Skip to content

Conversation

@Tomass673
Copy link
Collaborator

@Tomass673 Tomass673 changed the title Prd 2007: Edit AI message logic PRD-2007: Edit AI message logic Dec 8, 2025
@Tomass673
Copy link
Collaborator Author

@veliseev93 could you please take a look?

let preparedChat: ChatResponse;

if (editedMessage.role === Role.ASSISTANT) {
preparedChat = prepareEditAssistantMessagePayload(chat, editingMessageId, message);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Tomass673 Could you please check the logic for “Save as copy”? When the “Save as copy” button is clicked, the history and history.currentId should be updated (similar to what happens after clicking the “Submit” button when editing a user message).

Also, in order to update the history branch, the prepareEditAssistantMessagePayload should look approximately as follows:


import uuid from 'react-native-uuid';
import { Role } from '@open-webui-react-native/shared/data-access/common';
import { ChatResponse, History } from '../models';
import { createMessagesList } from './create-messages-list';

export function prepareEditAssistantMessagePayload(
  oldData: ChatResponse,
  messageId: string,
  newContent: string,
): ChatResponse {
  const history = oldData.chat.history;
  const messagesMap = { ...history.messages };
  const newAssistantMessageId = uuid.v4()
  const parentId = history?.messages?.[messageId]?.parentId

  const target = messagesMap[messageId];
  if (!target || target.role !== Role.ASSISTANT) return oldData;

  const updatedMessage = {
    ...target,
    childrenIs: [],
    id: newAssistantMessageId,
    content: newContent,
    done: true,
  };

  const updatedHistory: History = {
    ...history,
    currentId: newAssistantMessageId,
    messages: {
      ...history.messages,
      [newAssistantMessageId]: updatedMessage,
    },
    lastAssistantMessage:
      history.lastAssistantMessage?.id === messageId ? updatedMessage : history.lastAssistantMessage,
  };
  updatedHistory.messages[parentId || ''].childrenIds?.push(newAssistantMessageId);

  const lastAssistantMessage =
    updatedHistory.lastAssistantMessage?.id === messageId ? updatedMessage : updatedHistory.lastAssistantMessage;
  
  return {
    ...oldData,
    chat: {
      ...oldData.chat,
      history: {
        ...updatedHistory,
        lastAssistantMessage,
      },
      messages: createMessagesList(updatedHistory, newAssistantMessageId),
    },
  };
}

This comment briefly describes the flow for editing an AI message, with links to the relevant code in the web application – https://app.clickup.com/t/24336023/PRD-1965?comment=90150163295336
We need to implement it in a similar way.

If implemented correctly, "Save As Copy" should work like this:

Simulator.Screen.Recording.-.iPhone.17.-.2025-12-09.at.11.23.25.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants