@assistant-ui/react 0.11.29 → 0.11.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadMessageClient.d.ts","sourceRoot":"","sources":["../../src/client/ThreadMessageClient.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIvE,OAAO,EAIL,aAAa,EACd,MAAM,UAAU,CAAC;AA8ClB,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,mBAAmB;;;;4BA2F/B,CAAC"}
1
+ {"version":3,"file":"ThreadMessageClient.d.ts","sourceRoot":"","sources":["../../src/client/ThreadMessageClient.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIvE,OAAO,EAIL,aAAa,EACd,MAAM,UAAU,CAAC;AA8ClB,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,mBAAmB;;;;4BA8F/B,CAAC"}
@@ -84,7 +84,7 @@ var ThreadMessageClient = resource(
84
84
  branchNumber,
85
85
  branchCount,
86
86
  speech: void 0,
87
- submittedFeedback: void 0,
87
+ submittedFeedback: message.role === "assistant" ? message.metadata.submittedFeedback : void 0,
88
88
  isCopied: isCopiedState,
89
89
  isHovering: isHoveringState
90
90
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/ThreadMessageClient.tsx"],"sourcesContent":["\"use client\";\nimport {\n resource,\n tapMemo,\n tapState,\n tapInlineResource,\n} from \"@assistant-ui/tap\";\nimport { AttachmentClientApi } from \"./types/Attachment\";\nimport { MessageClientState, MessageClientApi } from \"./types/Message\";\nimport { MessagePartClientState, MessagePartClientApi } from \"./types/Part\";\nimport { tapLookupResources } from \"./util-hooks/tapLookupResources\";\nimport { tapApi } from \"../utils/tap-store\";\nimport {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n Attachment,\n ThreadMessage,\n} from \"../types\";\nimport { NoOpComposerClient } from \"./NoOpComposerClient\";\n\nconst ThreadMessagePartClient = resource(\n ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {\n const state = tapMemo<MessagePartClientState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return tapApi<MessagePartClientApi>(\n {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key:\n state.type === \"tool-call\"\n ? \"toolCallId-\" + state.toolCallId\n : undefined,\n },\n );\n },\n);\nconst ThreadMessageAttachmentClient = resource(\n ({ attachment }: { attachment: Attachment }) => {\n return tapApi<AttachmentClientApi>(\n {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key: attachment.id,\n },\n );\n },\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\nexport const ThreadMessageClient = resource(\n ({\n message,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n }: ThreadMessageClientProps) => {\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const parts = tapLookupResources(\n message.content.map((_, idx) =>\n ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n message.attachments?.map((_, idx) =>\n ThreadMessageAttachmentClient(\n { attachment: message.attachments![idx]! },\n { key: idx },\n ),\n ) ?? [],\n );\n\n const composerState = tapInlineResource(\n NoOpComposerClient({ type: \"edit\" }),\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState.state,\n parentId: null,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n submittedFeedback: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [message, isCopiedState, isHoveringState, isLast]);\n\n return tapApi<MessageClientApi>({\n getState: () => state,\n composer: composerState.api,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: \"toolCallId-\" + selector.toolCallId });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return message.content\n .map((part) => {\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n return \"\";\n })\n .join(\"\\n\");\n },\n setIsCopied,\n setIsHovering,\n });\n },\n);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/client/ThreadMessageClient.tsx"],"sourcesContent":["\"use client\";\nimport {\n resource,\n tapMemo,\n tapState,\n tapInlineResource,\n} from \"@assistant-ui/tap\";\nimport { AttachmentClientApi } from \"./types/Attachment\";\nimport { MessageClientState, MessageClientApi } from \"./types/Message\";\nimport { MessagePartClientState, MessagePartClientApi } from \"./types/Part\";\nimport { tapLookupResources } from \"./util-hooks/tapLookupResources\";\nimport { tapApi } from \"../utils/tap-store\";\nimport {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n Attachment,\n ThreadMessage,\n} from \"../types\";\nimport { NoOpComposerClient } from \"./NoOpComposerClient\";\n\nconst ThreadMessagePartClient = resource(\n ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {\n const state = tapMemo<MessagePartClientState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return tapApi<MessagePartClientApi>(\n {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key:\n state.type === \"tool-call\"\n ? \"toolCallId-\" + state.toolCallId\n : undefined,\n },\n );\n },\n);\nconst ThreadMessageAttachmentClient = resource(\n ({ attachment }: { attachment: Attachment }) => {\n return tapApi<AttachmentClientApi>(\n {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key: attachment.id,\n },\n );\n },\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\nexport const ThreadMessageClient = resource(\n ({\n message,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n }: ThreadMessageClientProps) => {\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const parts = tapLookupResources(\n message.content.map((_, idx) =>\n ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n message.attachments?.map((_, idx) =>\n ThreadMessageAttachmentClient(\n { attachment: message.attachments![idx]! },\n { key: idx },\n ),\n ) ?? [],\n );\n\n const composerState = tapInlineResource(\n NoOpComposerClient({ type: \"edit\" }),\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState.state,\n parentId: null,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n submittedFeedback:\n message.role === \"assistant\"\n ? message.metadata.submittedFeedback\n : undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [message, isCopiedState, isHoveringState, isLast]);\n\n return tapApi<MessageClientApi>({\n getState: () => state,\n composer: composerState.api,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: \"toolCallId-\" + selector.toolCallId });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return message.content\n .map((part) => {\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n return \"\";\n })\n .join(\"\\n\");\n },\n setIsCopied,\n setIsHovering,\n });\n },\n);\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/runtime/ThreadRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,eAAe,EAChB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EACL,cAAc,EACd,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG;IACzD,MAAM,CAAC,EAAE,CACP,OAAO,EAAE,mBAAmB,KACzB,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;CACxD,CAAC;AAmBF,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN;IACE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACjD,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC,CAAC;AAgCN,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,CAC1D,iBAAiB,EACjB,iBAAiB,CAClB,GAAG;IACF,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,qBAAqB,CAC9D,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAE5C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,iBAAiB,EAC1B,qBAAqB,mBAAmB,KACvC,WAkBF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IAEzC;;OAEG;IACH,QAAQ,IAAI,WAAW,CAAC;IAExB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAE7C;;;QAGI;IACJ,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAExD;;;OAGG;IACH,0BAA0B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAE7C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;IAC7C,SAAS,IAAI,IAAI,CAAC;IAClB,eAAe,IAAI,YAAY,CAAC;IAEhC;;OAEG;IACH,cAAc,IAAI,YAAY,CAAC;IAE/B,MAAM,IAAI,yBAAyB,CAAC;IACpC,MAAM,CAAC,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAE5D,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;IAC/C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC;IAElD;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB,WAAW,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;CAC/E,CAAC;AAEF,qBAAa,iBAAkB,YAAW,aAAa;IACrD,IAAW,IAAI,sBAEd;IAED,IAAW,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAxLV,MAAM,IAAI,GAAG,WAAW;;yBA6L9B,WAAW;MAH7B;IAED,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;gBAGA,aAAa,EAAE,wBAAwB,EACvC,qBAAqB,EAAE,4BAA4B;IA0CrD,SAAS,CAAC,sBAAsB;IAoBhC,SAAgB,QAAQ,4BAAC;IAElB,QAAQ;IAIR,MAAM,CAAC,OAAO,EAAE,mBAAmB;IAQnC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI9B,eAAe;IAIf,cAAc;IAId,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,oBAAoB;IAQ/D,kBAAkB,CAAC,MAAM,EAAE,qBAAqB;IAIhD,0BAA0B,CAAC,KAAK,EAAE,GAAG;IAIrC,SAAS;IAIT,YAAY;IAIZ,MAAM;IAIN,MAAM,CAAC,IAAI,EAAE,yBAAyB;IAItC,KAAK,CAAC,eAAe,CAAC,EAAE,SAAS,iBAAiB,EAAE;IAIpD,iBAAiB,CAAC,GAAG,EAAE,MAAM;IAqB7B,cAAc,CAAC,SAAS,EAAE,MAAM;IAavC,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,0BAA0B,CAG9B;IAEG,WAAW,CAChB,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,MAAM,IAAI,GACnB,WAAW;CAWf"}
1
+ {"version":3,"file":"ThreadRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/runtime/ThreadRuntime.ts"],"names":[],"mappings":"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"}
@@ -210,7 +210,7 @@ var ThreadRuntimeImpl = class {
210
210
  if (!message || parentId === void 0) return SKIP_UPDATE;
211
211
  const thread = this._threadBinding.getState();
212
212
  const branches = thread.getBranches(message.id);
213
- const submittedFeedback = thread.getSubmittedFeedback(message.id);
213
+ const submittedFeedback = message.role === "assistant" ? message.metadata.submittedFeedback : void 0;
214
214
  return {
215
215
  ...message,
216
216
  ...{ [symbolInnerMessage]: message[symbolInnerMessage] },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/runtime/ThreadRuntime.ts"],"sourcesContent":["import {\n ThreadSuggestion,\n RuntimeCapabilities,\n ThreadRuntimeCore,\n SpeechState,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../runtime-cores/core/ThreadRuntimeCore\";\nimport { ExportedMessageRepository } from \"../runtime-cores/utils/MessageRepository\";\nimport { AppendMessage, ThreadMessage, Unsubscribe } from \"../../types\";\nimport { ThreadMessageLike } from \"../runtime-cores/external-store\";\nimport {\n MessageRuntime,\n MessageRuntimeImpl,\n MessageState,\n} from \"./MessageRuntime\";\nimport { NestedSubscriptionSubject } from \"./subscribable/NestedSubscriptionSubject\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport { SubscribableWithState } from \"./subscribable/Subscribable\";\nimport {\n ThreadComposerRuntime,\n ThreadComposerRuntimeImpl,\n} from \"./ComposerRuntime\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport {\n MessageRuntimePath,\n ThreadListItemRuntimePath,\n ThreadRuntimePath,\n} from \"./RuntimePathTypes\";\nimport type { ThreadListItemState } from \"./RuntimeBindings\";\nimport { RunConfig } from \"../../types/AssistantTypes\";\nimport { EventSubscriptionSubject } from \"./subscribable/EventSubscriptionSubject\";\nimport { symbolInnerMessage } from \"../runtime-cores/external-store/getExternalStoreMessage\";\nimport { ModelContext } from \"../../model-context\";\nimport { ChatModelRunOptions, ChatModelRunResult } from \"../runtime-cores\";\nimport { ReadonlyJSONValue } from \"assistant-stream/utils\";\n\nexport type CreateStartRunConfig = {\n parentId: string | null;\n sourceId?: string | null | undefined;\n runConfig?: RunConfig | undefined;\n};\n\nexport type CreateResumeRunConfig = CreateStartRunConfig & {\n stream?: (\n options: ChatModelRunOptions,\n ) => AsyncGenerator<ChatModelRunResult, void, unknown>;\n};\n\nconst toResumeRunConfig = (message: CreateResumeRunConfig): ResumeRunConfig => {\n return {\n parentId: message.parentId ?? null,\n sourceId: message.sourceId ?? null,\n runConfig: message.runConfig ?? {},\n ...(message.stream ? { stream: message.stream } : {}),\n };\n};\n\nconst toStartRunConfig = (message: CreateStartRunConfig): StartRunConfig => {\n return {\n parentId: message.parentId ?? null,\n sourceId: message.sourceId ?? null,\n runConfig: message.runConfig ?? {},\n };\n};\n\nexport type CreateAppendMessage =\n | string\n | {\n parentId?: string | null | undefined;\n sourceId?: string | null | undefined;\n role?: AppendMessage[\"role\"] | undefined;\n content: AppendMessage[\"content\"];\n attachments?: AppendMessage[\"attachments\"] | undefined;\n metadata?: AppendMessage[\"metadata\"] | undefined;\n createdAt?: Date | undefined;\n runConfig?: AppendMessage[\"runConfig\"] | undefined;\n startRun?: boolean | undefined;\n };\n\nconst toAppendMessage = (\n messages: readonly ThreadMessage[],\n message: CreateAppendMessage,\n): AppendMessage => {\n if (typeof message === \"string\") {\n return {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n };\n }\n\n return {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n } as AppendMessage;\n};\n\nexport type ThreadRuntimeCoreBinding = SubscribableWithState<\n ThreadRuntimeCore,\n ThreadRuntimePath\n> & {\n outerSubscribe(callback: () => void): Unsubscribe;\n};\n\nexport type ThreadListItemRuntimeBinding = SubscribableWithState<\n ThreadListItemState,\n ThreadListItemRuntimePath\n>;\n\nexport type ThreadState = {\n /**\n * The thread ID.\n * @deprecated This field is deprecated and will be removed in 0.8.0. Use `useThreadListItem().id` instead.\n */\n readonly threadId: string;\n\n /**\n * The thread metadata.\n *\n * @deprecated Use `useThreadListItem()` instead. This field is deprecated and will be removed in 0.8.0.\n */\n readonly metadata: ThreadListItemState;\n\n /**\n * Whether the thread is disabled. Disabled threads cannot receive new messages.\n */\n readonly isDisabled: boolean;\n\n /**\n * Whether the thread is loading its history.\n */\n readonly isLoading: boolean;\n\n /**\n * Whether the thread is running. A thread is considered running when there is an active stream connection to the backend.\n */\n readonly isRunning: boolean;\n\n /**\n * The capabilities of the thread, such as whether the thread supports editing, branch switching, etc.\n */\n readonly capabilities: RuntimeCapabilities;\n\n /**\n * The messages in the currently selected branch of the thread.\n */\n readonly messages: readonly ThreadMessage[];\n\n /**\n * The thread state.\n *\n * @deprecated This feature is experimental\n */\n readonly state: ReadonlyJSONValue;\n\n /**\n * Follow up message suggestions to show the user.\n */\n readonly suggestions: readonly ThreadSuggestion[];\n\n /**\n * Custom extra information provided by the runtime.\n */\n readonly extras: unknown;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n readonly speech: SpeechState | undefined;\n};\n\nexport const getThreadState = (\n runtime: ThreadRuntimeCore,\n threadListItemState: ThreadListItemState,\n): ThreadState => {\n const lastMessage = runtime.messages.at(-1);\n return Object.freeze({\n threadId: threadListItemState.id,\n metadata: threadListItemState,\n capabilities: runtime.capabilities,\n isDisabled: runtime.isDisabled,\n isLoading: runtime.isLoading,\n isRunning:\n lastMessage?.role !== \"assistant\"\n ? false\n : lastMessage.status.type === \"running\",\n messages: runtime.messages,\n state: runtime.state,\n suggestions: runtime.suggestions,\n extras: runtime.extras,\n speech: runtime.speech,\n });\n};\n\nexport type ThreadRuntime = {\n /**\n * The selector for the thread runtime.\n */\n readonly path: ThreadRuntimePath;\n\n /**\n * The thread composer runtime.\n */\n readonly composer: ThreadComposerRuntime;\n\n /**\n * Gets a snapshot of the thread state.\n */\n getState(): ThreadState;\n\n /**\n * Append a new message to the thread.\n *\n * @example ```ts\n * // append a new user message with the text \"Hello, world!\"\n * threadRuntime.append(\"Hello, world!\");\n * ```\n *\n * @example ```ts\n * // append a new assistant message with the text \"Hello, world!\"\n * threadRuntime.append({\n * role: \"assistant\",\n * content: [{ type: \"text\", text: \"Hello, world!\" }],\n * });\n * ```\n */\n append(message: CreateAppendMessage): void;\n\n /**\n * @deprecated pass an object with `parentId` instead. This will be removed in 0.8.0.\n */\n startRun(parentId: string | null): void;\n /**\n * Start a new run with the given configuration.\n * @param config The configuration for starting the run\n */\n startRun(config: CreateStartRunConfig): void;\n\n /**\n * Resume a run with the given configuration.\n * @param config The configuration for resuming the run\n **/\n unstable_resumeRun(config: CreateResumeRunConfig): void;\n\n /**\n * Load external state into the thread.\n * @param state The state to load into the thread\n */\n unstable_loadExternalState(state: any): void;\n\n subscribe(callback: () => void): Unsubscribe;\n cancelRun(): void;\n getModelContext(): ModelContext;\n\n /**\n * @deprecated This method was renamed to `getModelContext`.\n */\n getModelConfig(): ModelContext;\n\n export(): ExportedMessageRepository;\n import(repository: ExportedMessageRepository): void;\n\n /**\n * Reset the thread with optional initial messages.\n *\n * @param initialMessages - Optional array of initial messages to populate the thread\n */\n reset(initialMessages?: readonly ThreadMessageLike[]): void;\n\n getMessageByIndex(idx: number): MessageRuntime;\n getMessageById(messageId: string): MessageRuntime;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n stopSpeaking(): void;\n\n unstable_on(event: ThreadRuntimeEventType, callback: () => void): Unsubscribe;\n};\n\nexport class ThreadRuntimeImpl implements ThreadRuntime {\n public get path() {\n return this._threadBinding.path;\n }\n\n public get __internal_threadBinding() {\n return this._threadBinding;\n }\n\n private readonly _threadBinding: ThreadRuntimeCoreBinding & {\n getStateState(): ThreadState;\n };\n\n constructor(\n threadBinding: ThreadRuntimeCoreBinding,\n threadListItemBinding: ThreadListItemRuntimeBinding,\n ) {\n const stateBinding = new ShallowMemoizeSubject({\n path: threadBinding.path,\n getState: () =>\n getThreadState(\n threadBinding.getState(),\n threadListItemBinding.getState(),\n ),\n subscribe: (callback) => {\n const sub1 = threadBinding.subscribe(callback);\n const sub2 = threadListItemBinding.subscribe(callback);\n return () => {\n sub1();\n sub2();\n };\n },\n });\n\n this._threadBinding = {\n path: threadBinding.path,\n getState: () => threadBinding.getState(),\n getStateState: () => stateBinding.getState(),\n outerSubscribe: (callback) => threadBinding.outerSubscribe(callback),\n subscribe: (callback) => threadBinding.subscribe(callback),\n };\n\n this.composer = new ThreadComposerRuntimeImpl(\n new NestedSubscriptionSubject({\n path: {\n ...this.path,\n ref: this.path.ref + `${this.path.ref}.composer`,\n composerSource: \"thread\",\n },\n getState: () => this._threadBinding.getState().composer,\n subscribe: (callback) => this._threadBinding.subscribe(callback),\n }),\n );\n\n this.__internal_bindMethods();\n }\n\n protected __internal_bindMethods() {\n this.append = this.append.bind(this);\n this.unstable_resumeRun = this.unstable_resumeRun.bind(this);\n this.unstable_loadExternalState =\n this.unstable_loadExternalState.bind(this);\n this.startRun = this.startRun.bind(this);\n this.cancelRun = this.cancelRun.bind(this);\n this.stopSpeaking = this.stopSpeaking.bind(this);\n this.export = this.export.bind(this);\n this.import = this.import.bind(this);\n this.reset = this.reset.bind(this);\n this.getMessageByIndex = this.getMessageByIndex.bind(this);\n this.getMessageById = this.getMessageById.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.unstable_on = this.unstable_on.bind(this);\n this.getModelContext = this.getModelContext.bind(this);\n this.getModelConfig = this.getModelConfig.bind(this);\n this.getState = this.getState.bind(this);\n }\n\n public readonly composer;\n\n public getState() {\n return this._threadBinding.getStateState();\n }\n\n public append(message: CreateAppendMessage) {\n this._threadBinding\n .getState()\n .append(\n toAppendMessage(this._threadBinding.getState().messages, message),\n );\n }\n\n public subscribe(callback: () => void) {\n return this._threadBinding.subscribe(callback);\n }\n\n public getModelContext() {\n return this._threadBinding.getState().getModelContext();\n }\n\n public getModelConfig() {\n return this.getModelContext();\n }\n\n public startRun(configOrParentId: string | null | CreateStartRunConfig) {\n const config =\n configOrParentId === null || typeof configOrParentId === \"string\"\n ? { parentId: configOrParentId }\n : configOrParentId;\n return this._threadBinding.getState().startRun(toStartRunConfig(config));\n }\n\n public unstable_resumeRun(config: CreateResumeRunConfig) {\n return this._threadBinding.getState().resumeRun(toResumeRunConfig(config));\n }\n\n public unstable_loadExternalState(state: any) {\n this._threadBinding.getState().unstable_loadExternalState(state);\n }\n\n public cancelRun() {\n this._threadBinding.getState().cancelRun();\n }\n\n public stopSpeaking() {\n return this._threadBinding.getState().stopSpeaking();\n }\n\n public export() {\n return this._threadBinding.getState().export();\n }\n\n public import(data: ExportedMessageRepository) {\n this._threadBinding.getState().import(data);\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this._threadBinding.getState().reset(initialMessages);\n }\n\n public getMessageByIndex(idx: number) {\n if (idx < 0) throw new Error(\"Message index must be >= 0\");\n\n return this._getMessageRuntime(\n {\n ...this.path,\n ref: this.path.ref + `${this.path.ref}.messages[${idx}]`,\n messageSelector: { type: \"index\", index: idx },\n },\n () => {\n const messages = this._threadBinding.getState().messages;\n const message = messages[idx];\n if (!message) return undefined;\n return {\n message,\n parentId: messages[idx - 1]?.id ?? null,\n };\n },\n );\n }\n\n public getMessageById(messageId: string) {\n return this._getMessageRuntime(\n {\n ...this.path,\n ref:\n this.path.ref +\n `${this.path.ref}.messages[messageId=${JSON.stringify(messageId)}]`,\n messageSelector: { type: \"messageId\", messageId: messageId },\n },\n () => this._threadBinding.getState().getMessageById(messageId),\n );\n }\n\n private _getMessageRuntime(\n path: MessageRuntimePath,\n callback: () =>\n | { parentId: string | null; message: ThreadMessage }\n | undefined,\n ) {\n return new MessageRuntimeImpl(\n new ShallowMemoizeSubject({\n path,\n getState: () => {\n const { message, parentId } = callback() ?? {};\n\n const { messages, speech: speechState } =\n this._threadBinding.getState();\n\n if (!message || parentId === undefined) return SKIP_UPDATE;\n\n const thread = this._threadBinding.getState();\n\n const branches = thread.getBranches(message.id);\n const submittedFeedback = thread.getSubmittedFeedback(message.id);\n\n return {\n ...message,\n ...{ [symbolInnerMessage]: (message as any)[symbolInnerMessage] },\n\n isLast: messages.at(-1)?.id === message.id,\n parentId,\n\n branchNumber: branches.indexOf(message.id) + 1,\n branchCount: branches.length,\n\n speech:\n speechState?.messageId === message.id ? speechState : undefined,\n\n submittedFeedback,\n } satisfies MessageState;\n },\n subscribe: (callback) => this._threadBinding.subscribe(callback),\n }),\n this._threadBinding,\n );\n }\n\n private _eventSubscriptionSubjects = new Map<\n string,\n EventSubscriptionSubject<ThreadRuntimeEventType>\n >();\n\n public unstable_on(\n event: ThreadRuntimeEventType,\n callback: () => void,\n ): Unsubscribe {\n let subject = this._eventSubscriptionSubjects.get(event);\n if (!subject) {\n subject = new EventSubscriptionSubject({\n event: event,\n binding: this._threadBinding,\n });\n this._eventSubscriptionSubjects.set(event, subject);\n }\n return subject.subscribe(callback);\n }\n}\n"],"mappings":"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","names":["callback"]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/runtime/ThreadRuntime.ts"],"sourcesContent":["import {\n ThreadSuggestion,\n RuntimeCapabilities,\n ThreadRuntimeCore,\n SpeechState,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../runtime-cores/core/ThreadRuntimeCore\";\nimport { ExportedMessageRepository } from \"../runtime-cores/utils/MessageRepository\";\nimport { AppendMessage, ThreadMessage, Unsubscribe } from \"../../types\";\nimport { ThreadMessageLike } from \"../runtime-cores/external-store\";\nimport {\n MessageRuntime,\n MessageRuntimeImpl,\n MessageState,\n} from \"./MessageRuntime\";\nimport { NestedSubscriptionSubject } from \"./subscribable/NestedSubscriptionSubject\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport { SubscribableWithState } from \"./subscribable/Subscribable\";\nimport {\n ThreadComposerRuntime,\n ThreadComposerRuntimeImpl,\n} from \"./ComposerRuntime\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport {\n MessageRuntimePath,\n ThreadListItemRuntimePath,\n ThreadRuntimePath,\n} from \"./RuntimePathTypes\";\nimport type { ThreadListItemState } from \"./RuntimeBindings\";\nimport { RunConfig } from \"../../types/AssistantTypes\";\nimport { EventSubscriptionSubject } from \"./subscribable/EventSubscriptionSubject\";\nimport { symbolInnerMessage } from \"../runtime-cores/external-store/getExternalStoreMessage\";\nimport { ModelContext } from \"../../model-context\";\nimport { ChatModelRunOptions, ChatModelRunResult } from \"../runtime-cores\";\nimport { ReadonlyJSONValue } from \"assistant-stream/utils\";\n\nexport type CreateStartRunConfig = {\n parentId: string | null;\n sourceId?: string | null | undefined;\n runConfig?: RunConfig | undefined;\n};\n\nexport type CreateResumeRunConfig = CreateStartRunConfig & {\n stream?: (\n options: ChatModelRunOptions,\n ) => AsyncGenerator<ChatModelRunResult, void, unknown>;\n};\n\nconst toResumeRunConfig = (message: CreateResumeRunConfig): ResumeRunConfig => {\n return {\n parentId: message.parentId ?? null,\n sourceId: message.sourceId ?? null,\n runConfig: message.runConfig ?? {},\n ...(message.stream ? { stream: message.stream } : {}),\n };\n};\n\nconst toStartRunConfig = (message: CreateStartRunConfig): StartRunConfig => {\n return {\n parentId: message.parentId ?? null,\n sourceId: message.sourceId ?? null,\n runConfig: message.runConfig ?? {},\n };\n};\n\nexport type CreateAppendMessage =\n | string\n | {\n parentId?: string | null | undefined;\n sourceId?: string | null | undefined;\n role?: AppendMessage[\"role\"] | undefined;\n content: AppendMessage[\"content\"];\n attachments?: AppendMessage[\"attachments\"] | undefined;\n metadata?: AppendMessage[\"metadata\"] | undefined;\n createdAt?: Date | undefined;\n runConfig?: AppendMessage[\"runConfig\"] | undefined;\n startRun?: boolean | undefined;\n };\n\nconst toAppendMessage = (\n messages: readonly ThreadMessage[],\n message: CreateAppendMessage,\n): AppendMessage => {\n if (typeof message === \"string\") {\n return {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n };\n }\n\n return {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n } as AppendMessage;\n};\n\nexport type ThreadRuntimeCoreBinding = SubscribableWithState<\n ThreadRuntimeCore,\n ThreadRuntimePath\n> & {\n outerSubscribe(callback: () => void): Unsubscribe;\n};\n\nexport type ThreadListItemRuntimeBinding = SubscribableWithState<\n ThreadListItemState,\n ThreadListItemRuntimePath\n>;\n\nexport type ThreadState = {\n /**\n * The thread ID.\n * @deprecated This field is deprecated and will be removed in 0.8.0. Use `useThreadListItem().id` instead.\n */\n readonly threadId: string;\n\n /**\n * The thread metadata.\n *\n * @deprecated Use `useThreadListItem()` instead. This field is deprecated and will be removed in 0.8.0.\n */\n readonly metadata: ThreadListItemState;\n\n /**\n * Whether the thread is disabled. Disabled threads cannot receive new messages.\n */\n readonly isDisabled: boolean;\n\n /**\n * Whether the thread is loading its history.\n */\n readonly isLoading: boolean;\n\n /**\n * Whether the thread is running. A thread is considered running when there is an active stream connection to the backend.\n */\n readonly isRunning: boolean;\n\n /**\n * The capabilities of the thread, such as whether the thread supports editing, branch switching, etc.\n */\n readonly capabilities: RuntimeCapabilities;\n\n /**\n * The messages in the currently selected branch of the thread.\n */\n readonly messages: readonly ThreadMessage[];\n\n /**\n * The thread state.\n *\n * @deprecated This feature is experimental\n */\n readonly state: ReadonlyJSONValue;\n\n /**\n * Follow up message suggestions to show the user.\n */\n readonly suggestions: readonly ThreadSuggestion[];\n\n /**\n * Custom extra information provided by the runtime.\n */\n readonly extras: unknown;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n readonly speech: SpeechState | undefined;\n};\n\nexport const getThreadState = (\n runtime: ThreadRuntimeCore,\n threadListItemState: ThreadListItemState,\n): ThreadState => {\n const lastMessage = runtime.messages.at(-1);\n return Object.freeze({\n threadId: threadListItemState.id,\n metadata: threadListItemState,\n capabilities: runtime.capabilities,\n isDisabled: runtime.isDisabled,\n isLoading: runtime.isLoading,\n isRunning:\n lastMessage?.role !== \"assistant\"\n ? false\n : lastMessage.status.type === \"running\",\n messages: runtime.messages,\n state: runtime.state,\n suggestions: runtime.suggestions,\n extras: runtime.extras,\n speech: runtime.speech,\n });\n};\n\nexport type ThreadRuntime = {\n /**\n * The selector for the thread runtime.\n */\n readonly path: ThreadRuntimePath;\n\n /**\n * The thread composer runtime.\n */\n readonly composer: ThreadComposerRuntime;\n\n /**\n * Gets a snapshot of the thread state.\n */\n getState(): ThreadState;\n\n /**\n * Append a new message to the thread.\n *\n * @example ```ts\n * // append a new user message with the text \"Hello, world!\"\n * threadRuntime.append(\"Hello, world!\");\n * ```\n *\n * @example ```ts\n * // append a new assistant message with the text \"Hello, world!\"\n * threadRuntime.append({\n * role: \"assistant\",\n * content: [{ type: \"text\", text: \"Hello, world!\" }],\n * });\n * ```\n */\n append(message: CreateAppendMessage): void;\n\n /**\n * @deprecated pass an object with `parentId` instead. This will be removed in 0.8.0.\n */\n startRun(parentId: string | null): void;\n /**\n * Start a new run with the given configuration.\n * @param config The configuration for starting the run\n */\n startRun(config: CreateStartRunConfig): void;\n\n /**\n * Resume a run with the given configuration.\n * @param config The configuration for resuming the run\n **/\n unstable_resumeRun(config: CreateResumeRunConfig): void;\n\n /**\n * Load external state into the thread.\n * @param state The state to load into the thread\n */\n unstable_loadExternalState(state: any): void;\n\n subscribe(callback: () => void): Unsubscribe;\n cancelRun(): void;\n getModelContext(): ModelContext;\n\n /**\n * @deprecated This method was renamed to `getModelContext`.\n */\n getModelConfig(): ModelContext;\n\n export(): ExportedMessageRepository;\n import(repository: ExportedMessageRepository): void;\n\n /**\n * Reset the thread with optional initial messages.\n *\n * @param initialMessages - Optional array of initial messages to populate the thread\n */\n reset(initialMessages?: readonly ThreadMessageLike[]): void;\n\n getMessageByIndex(idx: number): MessageRuntime;\n getMessageById(messageId: string): MessageRuntime;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n stopSpeaking(): void;\n\n unstable_on(event: ThreadRuntimeEventType, callback: () => void): Unsubscribe;\n};\n\nexport class ThreadRuntimeImpl implements ThreadRuntime {\n public get path() {\n return this._threadBinding.path;\n }\n\n public get __internal_threadBinding() {\n return this._threadBinding;\n }\n\n private readonly _threadBinding: ThreadRuntimeCoreBinding & {\n getStateState(): ThreadState;\n };\n\n constructor(\n threadBinding: ThreadRuntimeCoreBinding,\n threadListItemBinding: ThreadListItemRuntimeBinding,\n ) {\n const stateBinding = new ShallowMemoizeSubject({\n path: threadBinding.path,\n getState: () =>\n getThreadState(\n threadBinding.getState(),\n threadListItemBinding.getState(),\n ),\n subscribe: (callback) => {\n const sub1 = threadBinding.subscribe(callback);\n const sub2 = threadListItemBinding.subscribe(callback);\n return () => {\n sub1();\n sub2();\n };\n },\n });\n\n this._threadBinding = {\n path: threadBinding.path,\n getState: () => threadBinding.getState(),\n getStateState: () => stateBinding.getState(),\n outerSubscribe: (callback) => threadBinding.outerSubscribe(callback),\n subscribe: (callback) => threadBinding.subscribe(callback),\n };\n\n this.composer = new ThreadComposerRuntimeImpl(\n new NestedSubscriptionSubject({\n path: {\n ...this.path,\n ref: this.path.ref + `${this.path.ref}.composer`,\n composerSource: \"thread\",\n },\n getState: () => this._threadBinding.getState().composer,\n subscribe: (callback) => this._threadBinding.subscribe(callback),\n }),\n );\n\n this.__internal_bindMethods();\n }\n\n protected __internal_bindMethods() {\n this.append = this.append.bind(this);\n this.unstable_resumeRun = this.unstable_resumeRun.bind(this);\n this.unstable_loadExternalState =\n this.unstable_loadExternalState.bind(this);\n this.startRun = this.startRun.bind(this);\n this.cancelRun = this.cancelRun.bind(this);\n this.stopSpeaking = this.stopSpeaking.bind(this);\n this.export = this.export.bind(this);\n this.import = this.import.bind(this);\n this.reset = this.reset.bind(this);\n this.getMessageByIndex = this.getMessageByIndex.bind(this);\n this.getMessageById = this.getMessageById.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.unstable_on = this.unstable_on.bind(this);\n this.getModelContext = this.getModelContext.bind(this);\n this.getModelConfig = this.getModelConfig.bind(this);\n this.getState = this.getState.bind(this);\n }\n\n public readonly composer;\n\n public getState() {\n return this._threadBinding.getStateState();\n }\n\n public append(message: CreateAppendMessage) {\n this._threadBinding\n .getState()\n .append(\n toAppendMessage(this._threadBinding.getState().messages, message),\n );\n }\n\n public subscribe(callback: () => void) {\n return this._threadBinding.subscribe(callback);\n }\n\n public getModelContext() {\n return this._threadBinding.getState().getModelContext();\n }\n\n public getModelConfig() {\n return this.getModelContext();\n }\n\n public startRun(configOrParentId: string | null | CreateStartRunConfig) {\n const config =\n configOrParentId === null || typeof configOrParentId === \"string\"\n ? { parentId: configOrParentId }\n : configOrParentId;\n return this._threadBinding.getState().startRun(toStartRunConfig(config));\n }\n\n public unstable_resumeRun(config: CreateResumeRunConfig) {\n return this._threadBinding.getState().resumeRun(toResumeRunConfig(config));\n }\n\n public unstable_loadExternalState(state: any) {\n this._threadBinding.getState().unstable_loadExternalState(state);\n }\n\n public cancelRun() {\n this._threadBinding.getState().cancelRun();\n }\n\n public stopSpeaking() {\n return this._threadBinding.getState().stopSpeaking();\n }\n\n public export() {\n return this._threadBinding.getState().export();\n }\n\n public import(data: ExportedMessageRepository) {\n this._threadBinding.getState().import(data);\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this._threadBinding.getState().reset(initialMessages);\n }\n\n public getMessageByIndex(idx: number) {\n if (idx < 0) throw new Error(\"Message index must be >= 0\");\n\n return this._getMessageRuntime(\n {\n ...this.path,\n ref: this.path.ref + `${this.path.ref}.messages[${idx}]`,\n messageSelector: { type: \"index\", index: idx },\n },\n () => {\n const messages = this._threadBinding.getState().messages;\n const message = messages[idx];\n if (!message) return undefined;\n return {\n message,\n parentId: messages[idx - 1]?.id ?? null,\n };\n },\n );\n }\n\n public getMessageById(messageId: string) {\n return this._getMessageRuntime(\n {\n ...this.path,\n ref:\n this.path.ref +\n `${this.path.ref}.messages[messageId=${JSON.stringify(messageId)}]`,\n messageSelector: { type: \"messageId\", messageId: messageId },\n },\n () => this._threadBinding.getState().getMessageById(messageId),\n );\n }\n\n private _getMessageRuntime(\n path: MessageRuntimePath,\n callback: () =>\n | { parentId: string | null; message: ThreadMessage }\n | undefined,\n ) {\n return new MessageRuntimeImpl(\n new ShallowMemoizeSubject({\n path,\n getState: () => {\n const { message, parentId } = callback() ?? {};\n\n const { messages, speech: speechState } =\n this._threadBinding.getState();\n\n if (!message || parentId === undefined) return SKIP_UPDATE;\n\n const thread = this._threadBinding.getState();\n\n const branches = thread.getBranches(message.id);\n const submittedFeedback =\n message.role === \"assistant\"\n ? message.metadata.submittedFeedback\n : undefined;\n\n return {\n ...message,\n ...{ [symbolInnerMessage]: (message as any)[symbolInnerMessage] },\n\n isLast: messages.at(-1)?.id === message.id,\n parentId,\n\n branchNumber: branches.indexOf(message.id) + 1,\n branchCount: branches.length,\n\n speech:\n speechState?.messageId === message.id ? speechState : undefined,\n\n submittedFeedback,\n } satisfies MessageState;\n },\n subscribe: (callback) => this._threadBinding.subscribe(callback),\n }),\n this._threadBinding,\n );\n }\n\n private _eventSubscriptionSubjects = new Map<\n string,\n EventSubscriptionSubject<ThreadRuntimeEventType>\n >();\n\n public unstable_on(\n event: ThreadRuntimeEventType,\n callback: () => void,\n ): Unsubscribe {\n let subject = this._eventSubscriptionSubjects.get(event);\n if (!subject) {\n subject = new EventSubscriptionSubject({\n event: event,\n binding: this._threadBinding,\n });\n this._eventSubscriptionSubjects.set(event, subject);\n }\n return subject.subscribe(callback);\n }\n}\n"],"mappings":"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","names":["callback"]}
@@ -1,7 +1,7 @@
1
- import type { AppendMessage, Unsubscribe } from "../../../types";
1
+ import type { AppendMessage, ThreadMessage, Unsubscribe } from "../../../types";
2
2
  import { ExportedMessageRepository, MessageRepository } from "../utils/MessageRepository";
3
3
  import { DefaultThreadComposerRuntimeCore } from "../composer/DefaultThreadComposerRuntimeCore";
4
- import { AddToolResultOptions, ResumeToolCallOptions, ThreadSuggestion, SubmitFeedbackOptions, ThreadRuntimeCore, SpeechState, RuntimeCapabilities, SubmittedFeedback, ThreadRuntimeEventType, StartRunConfig, ResumeRunConfig } from "./ThreadRuntimeCore";
4
+ import { AddToolResultOptions, ResumeToolCallOptions, ThreadSuggestion, SubmitFeedbackOptions, ThreadRuntimeCore, SpeechState, RuntimeCapabilities, ThreadRuntimeEventType, StartRunConfig, ResumeRunConfig } from "./ThreadRuntimeCore";
5
5
  import { DefaultEditComposerRuntimeCore } from "../composer/DefaultEditComposerRuntimeCore";
6
6
  import { SpeechSynthesisAdapter } from "../adapters/speech/SpeechAdapterTypes";
7
7
  import { FeedbackAdapter } from "../adapters/feedback/FeedbackAdapter";
@@ -31,7 +31,7 @@ export declare abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore
31
31
  abstract resumeToolCall(options: ResumeToolCallOptions): void;
32
32
  abstract cancelRun(): void;
33
33
  abstract unstable_loadExternalState(state: any): void;
34
- get messages(): readonly import("../../..").ThreadMessage[];
34
+ get messages(): readonly ThreadMessage[];
35
35
  get state(): string | number | boolean | import("assistant-stream/utils").ReadonlyJSONObject | import("assistant-stream/utils").ReadonlyJSONArray | null;
36
36
  readonly composer: DefaultThreadComposerRuntimeCore;
37
37
  constructor(_contextProvider: ModelContextProvider);
@@ -41,15 +41,16 @@ export declare abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore
41
41
  beginEdit(messageId: string): void;
42
42
  getMessageById(messageId: string): {
43
43
  parentId: string | null;
44
- message: import("../../..").ThreadMessage;
44
+ message: ThreadMessage;
45
45
  } | undefined;
46
46
  getBranches(messageId: string): string[];
47
47
  switchToBranch(branchId: string): void;
48
48
  protected _notifySubscribers(): void;
49
49
  _notifyEventSubscribers(event: ThreadRuntimeEventType): void;
50
50
  subscribe(callback: () => void): Unsubscribe;
51
- private _submittedFeedback;
52
- getSubmittedFeedback(messageId: string): SubmittedFeedback | undefined;
51
+ getSubmittedFeedback(messageId: string): {
52
+ readonly type: "positive" | "negative";
53
+ } | undefined;
53
54
  submitFeedback({ messageId, type }: SubmitFeedbackOptions): void;
54
55
  private _stopSpeaking;
55
56
  speech: SpeechState | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
@@ -73,16 +73,28 @@ var BaseThreadRuntimeCore = class {
73
73
  this._subscriptions.add(callback);
74
74
  return () => this._subscriptions.delete(callback);
75
75
  }
76
- _submittedFeedback = {};
77
76
  getSubmittedFeedback(messageId) {
78
- return this._submittedFeedback[messageId];
77
+ const messageData = this.repository.getMessage(messageId);
78
+ if (messageData.message.role === "assistant") {
79
+ return messageData.message.metadata.submittedFeedback;
80
+ }
81
+ return void 0;
79
82
  }
80
83
  submitFeedback({ messageId, type }) {
81
84
  const adapter = this.adapters?.feedback;
82
85
  if (!adapter) throw new Error("Feedback adapter not configured");
83
- const { message } = this.repository.getMessage(messageId);
86
+ const { message, parentId } = this.repository.getMessage(messageId);
84
87
  adapter.submit({ message, type });
85
- this._submittedFeedback[messageId] = { type };
88
+ if (message.role === "assistant") {
89
+ const updatedMessage = {
90
+ ...message,
91
+ metadata: {
92
+ ...message.metadata,
93
+ submittedFeedback: { type }
94
+ }
95
+ };
96
+ this.repository.addOrUpdateMessage(parentId, updatedMessage);
97
+ }
86
98
  this._notifySubscribers();
87
99
  }
88
100
  _stopSpeaking;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"sourcesContent":["import type { AppendMessage, Unsubscribe } from \"../../../types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/MessageRepository\";\nimport { DefaultThreadComposerRuntimeCore } from \"../composer/DefaultThreadComposerRuntimeCore\";\nimport {\n AddToolResultOptions,\n ResumeToolCallOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n RuntimeCapabilities,\n SubmittedFeedback,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"./ThreadRuntimeCore\";\nimport { DefaultEditComposerRuntimeCore } from \"../composer/DefaultEditComposerRuntimeCore\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport { getThreadMessageText } from \"../../../utils/getThreadMessageText\";\nimport { ModelContextProvider } from \"../../../model-context\";\nimport { ThreadMessageLike } from \"../external-store\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {\n private _subscriptions = new Set<() => void>();\n private _isInitialized = false;\n\n protected readonly repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract cancelRun(): void;\n public abstract unstable_loadExternalState(state: any): void;\n\n public get messages() {\n return this.repository.getMessages();\n }\n\n public get state() {\n let mostRecentAssistantMessage;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n break;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n constructor(private readonly _contextProvider: ModelContextProvider) {}\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n public beginEdit(messageId: string) {\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n protected _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public _notifyEventSubscribers(event: ThreadRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private _submittedFeedback: Record<string, SubmittedFeedback> = {};\n\n public getSubmittedFeedback(messageId: string) {\n return this._submittedFeedback[messageId];\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n adapter.submit({ message, type });\n\n this._submittedFeedback[messageId] = { type };\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n\n this._stopSpeaking?.();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n const unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n } else {\n this.speech = { messageId, status: utterance.status };\n }\n this._notifySubscribers();\n });\n\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n\n this._stopSpeaking = () => {\n utterance.cancel();\n unsub();\n this.speech = undefined;\n this._stopSpeaking = undefined;\n };\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n this._stopSpeaking();\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\");\n }\n }\n\n // TODO import()/export() on external store doesn't make much sense\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<() => void>\n >();\n\n public unstable_on(event: ThreadRuntimeEventType, callback: () => void) {\n if (event === \"model-context-update\") {\n return this._contextProvider.subscribe?.(callback) ?? (() => {});\n }\n\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event)!;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,wCAAwC;AAcjD,SAAS,sCAAsC;AAI/C,SAAS,4BAA4B;AAU9B,IAAe,wBAAf,MAAkE;AAAA,EAsCvE,YAA6B,kBAAwC;AAAxC;AAAA,EAAyC;AAAA,EArC9D,iBAAiB,oBAAI,IAAgB;AAAA,EACrC,iBAAiB;AAAA,EAEN,aAAa,IAAI,kBAAkB;AAAA,EAgBtD,IAAW,WAAW;AACpB,WAAO,KAAK,WAAW,YAAY;AAAA,EACrC;AAAA,EAEA,IAAW,QAAQ;AACjB,QAAI;AACJ,eAAW,WAAW,KAAK,UAAU;AACnC,UAAI,QAAQ,SAAS,aAAa;AAChC,qCAA6B;AAC7B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,4BAA4B,SAAS,kBAAkB;AAAA,EAChE;AAAA,EAEgB,WAAW,IAAI,iCAAiC,IAAI;AAAA,EAI7D,kBAAkB;AACvB,WAAO,KAAK,iBAAiB,gBAAgB;AAAA,EAC/C;AAAA,EAEQ,iBAAiB,oBAAI,IAA4C;AAAA,EAClE,gBAAgB,WAAmB;AACxC,WAAO,KAAK,eAAe,IAAI,SAAS;AAAA,EAC1C;AAAA,EACO,UAAU,WAAmB;AAClC,QAAI,KAAK,eAAe,IAAI,SAAS;AACnC,YAAM,IAAI,MAAM,0BAA0B;AAE5C,SAAK,eAAe;AAAA,MAClB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,MAAM,KAAK,eAAe,OAAO,SAAS;AAAA,QAC1C,KAAK,WAAW,WAAW,SAAS;AAAA,MACtC;AAAA,IACF;AACA,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEO,eAAe,WAAmB;AACvC,QAAI;AACF,aAAO,KAAK,WAAW,WAAW,SAAS;AAAA,IAC7C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEO,YAAY,WAA6B;AAC9C,WAAO,KAAK,WAAW,YAAY,SAAS;AAAA,EAC9C;AAAA,EAEO,eAAe,UAAwB;AAC5C,SAAK,WAAW,eAAe,QAAQ;AACvC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEU,qBAAqB;AAC7B,eAAW,YAAY,KAAK,eAAgB,UAAS;AAAA,EACvD;AAAA,EAEO,wBAAwB,OAA+B;AAC5D,UAAM,cAAc,KAAK,kBAAkB,IAAI,KAAK;AACpD,QAAI,CAAC,YAAa;AAElB,eAAW,YAAY,YAAa,UAAS;AAAA,EAC/C;AAAA,EAEO,UAAU,UAAmC;AAClD,SAAK,eAAe,IAAI,QAAQ;AAChC,WAAO,MAAM,KAAK,eAAe,OAAO,QAAQ;AAAA,EAClD;AAAA,EAEQ,qBAAwD,CAAC;AAAA,EAE1D,qBAAqB,WAAmB;AAC7C,WAAO,KAAK,mBAAmB,SAAS;AAAA,EAC1C;AAAA,EAEO,eAAe,EAAE,WAAW,KAAK,GAA0B;AAChE,UAAM,UAAU,KAAK,UAAU;AAC/B,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,iCAAiC;AAE/D,UAAM,EAAE,QAAQ,IAAI,KAAK,WAAW,WAAW,SAAS;AACxD,YAAQ,OAAO,EAAE,SAAS,KAAK,CAAC;AAEhC,SAAK,mBAAmB,SAAS,IAAI,EAAE,KAAK;AAC5C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEQ;AAAA,EACD;AAAA,EAEA,MAAM,WAAmB;AAC9B,UAAM,UAAU,KAAK,UAAU;AAC/B,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,+BAA+B;AAE7D,UAAM,EAAE,QAAQ,IAAI,KAAK,WAAW,WAAW,SAAS;AAExD,SAAK,gBAAgB;AAErB,UAAM,YAAY,QAAQ,MAAM,qBAAqB,OAAO,CAAC;AAC7D,UAAM,QAAQ,UAAU,UAAU,MAAM;AACtC,UAAI,UAAU,OAAO,SAAS,SAAS;AACrC,aAAK,gBAAgB;AACrB,aAAK,SAAS;AAAA,MAChB,OAAO;AACL,aAAK,SAAS,EAAE,WAAW,QAAQ,UAAU,OAAO;AAAA,MACtD;AACA,WAAK,mBAAmB;AAAA,IAC1B,CAAC;AAED,SAAK,SAAS,EAAE,WAAW,QAAQ,UAAU,OAAO;AACpD,SAAK,mBAAmB;AAExB,SAAK,gBAAgB,MAAM;AACzB,gBAAU,OAAO;AACjB,YAAM;AACN,WAAK,SAAS;AACd,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEO,eAAe;AACpB,QAAI,CAAC,KAAK,cAAe,OAAM,IAAI,MAAM,4BAA4B;AACrE,SAAK,cAAc;AACnB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEU,oBAAoB;AAC5B,QAAI,CAAC,KAAK,gBAAgB;AACxB,WAAK,iBAAiB;AACtB,WAAK,wBAAwB,YAAY;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA,EAGO,SAAS;AACd,WAAO,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEO,OAAO,MAAiC;AAC7C,SAAK,kBAAkB;AACvB,SAAK,WAAW,MAAM;AACtB,SAAK,WAAW,OAAO,IAAI;AAC3B,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEO,MAAM,iBAAgD;AAC3D,SAAK,OAAO,0BAA0B,UAAU,mBAAmB,CAAC,CAAC,CAAC;AAAA,EACxE;AAAA,EAEQ,oBAAoB,oBAAI,IAG9B;AAAA,EAEK,YAAY,OAA+B,UAAsB;AACtE,QAAI,UAAU,wBAAwB;AACpC,aAAO,KAAK,iBAAiB,YAAY,QAAQ,MAAM,MAAM;AAAA,MAAC;AAAA,IAChE;AAEA,UAAM,cAAc,KAAK,kBAAkB,IAAI,KAAK;AACpD,QAAI,CAAC,aAAa;AAChB,WAAK,kBAAkB,IAAI,OAAO,oBAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAAA,IACvD,OAAO;AACL,kBAAY,IAAI,QAAQ;AAAA,IAC1B;AAEA,WAAO,MAAM;AACX,YAAMA,eAAc,KAAK,kBAAkB,IAAI,KAAK;AACpD,MAAAA,aAAY,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AACF;","names":["subscribers"]}
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"sourcesContent":["import type { AppendMessage, ThreadMessage, Unsubscribe } from \"../../../types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/MessageRepository\";\nimport { DefaultThreadComposerRuntimeCore } from \"../composer/DefaultThreadComposerRuntimeCore\";\nimport {\n AddToolResultOptions,\n ResumeToolCallOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n RuntimeCapabilities,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"./ThreadRuntimeCore\";\nimport { DefaultEditComposerRuntimeCore } from \"../composer/DefaultEditComposerRuntimeCore\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport { getThreadMessageText } from \"../../../utils/getThreadMessageText\";\nimport { ModelContextProvider } from \"../../../model-context\";\nimport { ThreadMessageLike } from \"../external-store\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {\n private _subscriptions = new Set<() => void>();\n private _isInitialized = false;\n\n protected readonly repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract cancelRun(): void;\n public abstract unstable_loadExternalState(state: any): void;\n\n public get messages() {\n return this.repository.getMessages();\n }\n\n public get state() {\n let mostRecentAssistantMessage;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n break;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n constructor(private readonly _contextProvider: ModelContextProvider) {}\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n public beginEdit(messageId: string) {\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n protected _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public _notifyEventSubscribers(event: ThreadRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n public getSubmittedFeedback(messageId: string) {\n const messageData = this.repository.getMessage(messageId);\n if (messageData.message.role === \"assistant\") {\n return messageData.message.metadata.submittedFeedback;\n }\n return undefined;\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const { message, parentId } = this.repository.getMessage(messageId);\n adapter.submit({ message, type });\n\n // Update the message metadata with the feedback\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type },\n },\n };\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\n }\n\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n\n this._stopSpeaking?.();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n const unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n } else {\n this.speech = { messageId, status: utterance.status };\n }\n this._notifySubscribers();\n });\n\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n\n this._stopSpeaking = () => {\n utterance.cancel();\n unsub();\n this.speech = undefined;\n this._stopSpeaking = undefined;\n };\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n this._stopSpeaking();\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\");\n }\n }\n\n // TODO import()/export() on external store doesn't make much sense\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<() => void>\n >();\n\n public unstable_on(event: ThreadRuntimeEventType, callback: () => void) {\n if (event === \"model-context-update\") {\n return this._contextProvider.subscribe?.(callback) ?? (() => {});\n }\n\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event)!;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
@@ -64,6 +64,9 @@ export type ThreadAssistantMessage = MessageCommonProps & {
64
64
  readonly unstable_annotations: readonly ReadonlyJSONValue[];
65
65
  readonly unstable_data: readonly ReadonlyJSONValue[];
66
66
  readonly steps: readonly ThreadStep[];
67
+ readonly submittedFeedback?: {
68
+ readonly type: "positive" | "negative";
69
+ };
67
70
  readonly custom: Record<string, unknown>;
68
71
  };
69
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantTypes.d.ts","sourceRoot":"","sources":["../../src/types/AssistantTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantTypes.d.ts","sourceRoot":"","sources":["../../src/types/AssistantTypes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -28,7 +28,7 @@
28
28
  "conversational-ui",
29
29
  "conversational-ai"
30
30
  ],
31
- "version": "0.11.29",
31
+ "version": "0.11.30",
32
32
  "license": "MIT",
33
33
  "type": "module",
34
34
  "exports": {
@@ -106,7 +106,10 @@ export const ThreadMessageClient = resource(
106
106
  branchNumber,
107
107
  branchCount,
108
108
  speech: undefined,
109
- submittedFeedback: undefined,
109
+ submittedFeedback:
110
+ message.role === "assistant"
111
+ ? message.metadata.submittedFeedback
112
+ : undefined,
110
113
  isCopied: isCopiedState,
111
114
  isHovering: isHoveringState,
112
115
  };
@@ -485,7 +485,10 @@ export class ThreadRuntimeImpl implements ThreadRuntime {
485
485
  const thread = this._threadBinding.getState();
486
486
 
487
487
  const branches = thread.getBranches(message.id);
488
- const submittedFeedback = thread.getSubmittedFeedback(message.id);
488
+ const submittedFeedback =
489
+ message.role === "assistant"
490
+ ? message.metadata.submittedFeedback
491
+ : undefined;
489
492
 
490
493
  return {
491
494
  ...message,
@@ -1,4 +1,4 @@
1
- import type { AppendMessage, Unsubscribe } from "../../../types";
1
+ import type { AppendMessage, ThreadMessage, Unsubscribe } from "../../../types";
2
2
  import {
3
3
  ExportedMessageRepository,
4
4
  MessageRepository,
@@ -12,7 +12,6 @@ import {
12
12
  ThreadRuntimeCore,
13
13
  SpeechState,
14
14
  RuntimeCapabilities,
15
- SubmittedFeedback,
16
15
  ThreadRuntimeEventType,
17
16
  StartRunConfig,
18
17
  ResumeRunConfig,
@@ -127,20 +126,33 @@ export abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {
127
126
  return () => this._subscriptions.delete(callback);
128
127
  }
129
128
 
130
- private _submittedFeedback: Record<string, SubmittedFeedback> = {};
131
-
132
129
  public getSubmittedFeedback(messageId: string) {
133
- return this._submittedFeedback[messageId];
130
+ const messageData = this.repository.getMessage(messageId);
131
+ if (messageData.message.role === "assistant") {
132
+ return messageData.message.metadata.submittedFeedback;
133
+ }
134
+ return undefined;
134
135
  }
135
136
 
136
137
  public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {
137
138
  const adapter = this.adapters?.feedback;
138
139
  if (!adapter) throw new Error("Feedback adapter not configured");
139
140
 
140
- const { message } = this.repository.getMessage(messageId);
141
+ const { message, parentId } = this.repository.getMessage(messageId);
141
142
  adapter.submit({ message, type });
142
143
 
143
- this._submittedFeedback[messageId] = { type };
144
+ // Update the message metadata with the feedback
145
+ if (message.role === "assistant") {
146
+ const updatedMessage: ThreadMessage = {
147
+ ...message,
148
+ metadata: {
149
+ ...message.metadata,
150
+ submittedFeedback: { type },
151
+ },
152
+ };
153
+ this.repository.addOrUpdateMessage(parentId, updatedMessage);
154
+ }
155
+
144
156
  this._notifySubscribers();
145
157
  }
146
158
 
@@ -751,7 +751,11 @@ describe("MessageRepository", () => {
751
751
  repository.addOrUpdateMessage("B", messageC);
752
752
 
753
753
  // Verify initial state
754
- expect(repository.getMessages().map((m) => m.id)).toEqual(["A", "B", "C"]);
754
+ expect(repository.getMessages().map((m) => m.id)).toEqual([
755
+ "A",
756
+ "B",
757
+ "C",
758
+ ]);
755
759
  expect(repository.headId).toBe("C");
756
760
 
757
761
  // Now insert new messages at the start: X -> Y
@@ -118,6 +118,7 @@ export type ThreadAssistantMessage = MessageCommonProps & {
118
118
  readonly unstable_annotations: readonly ReadonlyJSONValue[];
119
119
  readonly unstable_data: readonly ReadonlyJSONValue[];
120
120
  readonly steps: readonly ThreadStep[];
121
+ readonly submittedFeedback?: { readonly type: "positive" | "negative" };
121
122
  readonly custom: Record<string, unknown>;
122
123
  };
123
124
  };