Skip to content

Commit

Permalink
fix(chat): fix prompts duplication (Issue #2201) (#2241)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander-Kezik authored Oct 2, 2024
1 parent c1e1a79 commit ac6462c
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 36 deletions.
5 changes: 1 addition & 4 deletions apps/chat/src/store/conversations/conversations.epics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -810,7 +810,6 @@ const updateFolderEpic: AppEpic = (action$, state$) =>
filter(ConversationsActions.updateFolder.match),
switchMap(({ payload }) => {
const folder = getFolderFromId(payload.folderId, FolderType.Chat);

const newFolder = addGeneratedFolderId({ ...folder, ...payload.values });

if (payload.folderId === newFolder.id) {
Expand Down Expand Up @@ -2354,9 +2353,7 @@ const recreateConversationEpic: AppEpic = (action$) =>
const updateConversationEpic: AppEpic = (action$, state$) =>
action$.pipe(
filter(ConversationsActions.updateConversation.match),
mergeMap(({ payload }) => {
return getOrUploadConversation(payload, state$.value);
}),
mergeMap(({ payload }) => getOrUploadConversation(payload, state$.value)),
mergeMap(({ payload, conversation }) => {
const { id, values } = payload as {
id: string;
Expand Down
30 changes: 16 additions & 14 deletions apps/chat/src/store/prompts/prompts.epics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -408,20 +408,7 @@ const updateFolderEpic: AppEpic = (action$, state$) =>
);

const actions: Observable<AnyAction>[] = [];
actions.push(
of(
PromptsActions.updateFolderSuccess({
folders: updatedFolders,
prompts: updatedPrompts,
}),
),
of(
UIActions.setOpenedFoldersIds({
openedFolderIds: updatedOpenedFoldersIds,
featureType: FeatureType.Prompt,
}),
),
);

if (prompts.length) {
prompts.forEach((prompt) => {
actions.push(
Expand All @@ -437,6 +424,21 @@ const updateFolderEpic: AppEpic = (action$, state$) =>
});
}

actions.push(
of(
PromptsActions.updateFolderSuccess({
folders: updatedFolders,
prompts: updatedPrompts,
}),
),
of(
UIActions.setOpenedFoldersIds({
openedFolderIds: updatedOpenedFoldersIds,
featureType: FeatureType.Prompt,
}),
),
);

return concat(...actions);
}),
catchError((err) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ export const getOrUploadConversation = (
const conversation = ConversationsSelectors.selectConversation(
state,
payload.id,
) as Conversation;
);

if (conversation?.status !== UploadStatus.LOADED) {
if (conversation && conversation?.status !== UploadStatus.LOADED) {
return forkJoin({
conversation: ConversationService.getConversation(conversation).pipe(
catchError((err) => {
Expand All @@ -82,7 +82,7 @@ export const getOrUploadConversation = (
});
} else {
return forkJoin({
conversation: of(conversation),
conversation: of((conversation as Conversation) ?? null),
payload: of(payload),
});
}
Expand Down
13 changes: 2 additions & 11 deletions apps/chat/src/utils/app/data/storages/api/prompt-api-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ import { Observable, catchError, forkJoin, of } from 'rxjs';

import { cleanPrompt } from '@/src/utils/app/clean';
import { PromptService } from '@/src/utils/app/data/prompt-service';
import { constructPath } from '@/src/utils/app/file';
import { splitEntityId } from '@/src/utils/app/folders';
import { regeneratePromptId } from '@/src/utils/app/prompts';
import { getPromptApiKey, parsePromptApiKey } from '@/src/utils/server/api';

import { ApiKeys } from '@/src/types/common';
Expand Down Expand Up @@ -47,13 +44,7 @@ export const getOrUploadPrompt = (
}> => {
const prompt = PromptsSelectors.selectPrompt(state, payload.id);

if (prompt?.status !== UploadStatus.LOADED) {
const { apiKey, bucket, name, parentPath } = splitEntityId(payload.id);
const prompt = regeneratePromptId({
name,
folderId: constructPath(apiKey, bucket, parentPath),
});

if (prompt && prompt?.status !== UploadStatus.LOADED) {
return forkJoin({
prompt: PromptService.getPrompt(prompt).pipe(
catchError((err) => {
Expand All @@ -65,7 +56,7 @@ export const getOrUploadPrompt = (
});
} else {
return forkJoin({
prompt: of(prompt),
prompt: of(prompt ?? null),
payload: of(payload),
});
}
Expand Down
15 changes: 11 additions & 4 deletions apps/chat/src/utils/server/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ const getModelApiIdFromConversation = (conversation: Conversation): string => {
return conversation.model.id;
};

// Format key: {modelId}__{name}
// Format key: {modelId}__{name} or {modelId}__{name}__{version} if conversation is public
export const getConversationApiKey = (
conversation: Omit<ConversationInfo, 'id' | 'folderId'>,
): string => {
Expand Down Expand Up @@ -103,9 +103,16 @@ export const parseConversationApiKey = (
return parsedApiKey;
};

// Format key: {name}
export const getPromptApiKey = (prompt: Omit<PromptInfo, 'id'>): string => {
return prompt.name;
// Format key: {name} or {name}__{version} if prompt is public
export const getPromptApiKey = (prompt: Omit<PromptInfo, 'id'>) => {
if (
!prompt.publicationInfo ||
prompt.publicationInfo.version === NA_VERSION
) {
return prompt.name;
}

return [prompt.name, prompt.publicationInfo.version].join(pathKeySeparator);
};

// Format key: {name}
Expand Down

0 comments on commit ac6462c

Please sign in to comment.