Skip to content

Commit 39f956e

Browse files
[Fix] Prompt Studio Output update issue (#912)
* fixes for prompt sudio coverage * fixed prompt studio local variable issue * updated return type * added optional chaining * added missing type * added comment for error suppression * handled edge cases * added fix on run all prompt coverage issue * added optional chaining * fixed prompt output update issue * prettier fix
1 parent a2749b2 commit 39f956e

File tree

3 files changed

+64
-45
lines changed

3 files changed

+64
-45
lines changed

frontend/src/components/custom-tools/prompt-card/PromptCardItems.jsx

+26-14
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { Header } from "./Header";
1919
import { OutputForIndex } from "./OutputForIndex";
2020
import { PromptOutput } from "./PromptOutput";
2121
import { TABLE_ENFORCE_TYPE, RECORD_ENFORCE_TYPE } from "./constants";
22-
import usePromptOutput from "../../../hooks/usePromptOutput";
2322

2423
let TableExtractionSettingsBtn;
2524
try {
@@ -63,11 +62,9 @@ function PromptCardItems({
6362
isSimplePromptStudio,
6463
isPublicSource,
6564
adapters,
66-
defaultLlmProfile,
6765
singlePassExtractMode,
6866
} = useCustomToolStore();
6967

70-
const { generatePromptOutputKey } = usePromptOutput();
7168
const [isEditingPrompt, setIsEditingPrompt] = useState(false);
7269
const [isEditingTitle, setIsEditingTitle] = useState(false);
7370
const [expandCard, setExpandCard] = useState(true);
@@ -81,17 +78,6 @@ function PromptCardItems({
8178
const divRef = useRef(null);
8279
const [enforceType, setEnforceType] = useState("");
8380
const promptId = promptDetails?.prompt_id;
84-
const docId = selectedDoc?.document_id;
85-
const promptProfile = promptDetails?.profile_manager || defaultLlmProfile;
86-
const promptOutputKey = generatePromptOutputKey(
87-
promptId,
88-
docId,
89-
promptProfile,
90-
singlePassExtractMode,
91-
true
92-
);
93-
const promptCoverage =
94-
promptOutputs[promptOutputKey]?.coverage || coverageCountData;
9581

9682
useEffect(() => {
9783
if (enforceType !== promptDetails?.enforce_type) {
@@ -123,6 +109,32 @@ function PromptCardItems({
123109
return result;
124110
};
125111

112+
const getUpdatedCoverage = (promptId, singlePass, promptOutputs) => {
113+
let updatedCoverage = null;
114+
Object.keys(promptOutputs).forEach((key) => {
115+
const [keyPromptId, , , keyIsSinglePass] = key.split("__"); // Destructure the key parts
116+
117+
// Check if the key matches the criteria
118+
if (keyPromptId === promptId && keyIsSinglePass === String(singlePass)) {
119+
const currentCoverage = promptOutputs[key]?.coverage || [];
120+
121+
// Update the highestCoverage if the current one is longer
122+
if (
123+
!updatedCoverage ||
124+
currentCoverage.length > updatedCoverage.length
125+
) {
126+
updatedCoverage = currentCoverage;
127+
}
128+
}
129+
});
130+
131+
return updatedCoverage;
132+
};
133+
134+
const promptCoverage =
135+
getUpdatedCoverage(promptId, singlePassExtractMode, promptOutputs) ||
136+
coverageCountData;
137+
126138
const getAdapterInfo = async (adapterData) => {
127139
// If simple prompt studio, return early
128140
if (isSimplePromptStudio) {

frontend/src/components/custom-tools/tool-ide/ToolIde.jsx

+12-7
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,18 @@ function ToolIde() {
216216
const body = {
217217
output: doc?.document_id,
218218
};
219-
handleUpdateTool(body).catch((err) => {
220-
const revertSelectedDoc = {
221-
selectedDoc: prevSelectedDoc,
222-
};
223-
updateCustomTool(revertSelectedDoc);
224-
setAlertDetails(handleException(err, "Failed to select the document"));
225-
});
219+
handleUpdateTool(body)
220+
.then((res) => {
221+
const updatedToolData = res?.data;
222+
updateCustomTool({ details: updatedToolData });
223+
})
224+
.catch((err) => {
225+
const revertSelectedDoc = {
226+
selectedDoc: prevSelectedDoc,
227+
};
228+
updateCustomTool(revertSelectedDoc);
229+
setAlertDetails(handleException(err, "Failed to select the document"));
230+
});
226231
};
227232

228233
return (

frontend/src/hooks/usePromptOutput.js

+26-24
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ try {
2424
const usePromptOutput = () => {
2525
const { sessionDetails } = useSessionStore();
2626
const { setTokenUsage, updateTokenUsage } = useTokenUsageStore();
27-
const { setPromptOutput, updatePromptOutput, promptOutputs } =
28-
usePromptOutputStore();
27+
const { setPromptOutput, updatePromptOutput } = usePromptOutputStore();
2928
const { isSimplePromptStudio, isPublicSource, selectedDoc } =
3029
useCustomToolStore();
3130
const axiosPrivate = useAxiosPrivate();
@@ -154,32 +153,35 @@ const usePromptOutput = () => {
154153
setPromptOutput(outputs);
155154
setTokenUsage(tokenUsageDetails);
156155
} else {
157-
let updatedPromptOutputs = promptOutputs;
158-
Object.keys(outputs).forEach((key) => {
159-
const [keyPromptId, keyDoctId, keyLlmProfile, keyIsSinglePass] =
160-
key.split("__");
161-
// only add output of selected document
162-
if (keyDoctId === selectedDoc?.document_id) {
163-
const currentOutput = { [key]: outputs[key] };
164-
updatedPromptOutputs = { ...promptOutputs, ...currentOutput };
165-
}
166-
Object.keys(updatedPromptOutputs).forEach((innerKey) => {
167-
const [existingPromptId, , existingLlmProfile, existingIsSinglePass] =
168-
innerKey.split("__"); // Extract promptId from key
169-
if (
170-
keyPromptId === existingPromptId &&
171-
keyLlmProfile === existingLlmProfile &&
172-
keyIsSinglePass === existingIsSinglePass
173-
) {
174-
updatedPromptOutputs[innerKey].coverage = outputs[key]?.coverage;
175-
}
176-
});
177-
});
178-
updatePromptOutput(updatedPromptOutputs);
156+
const prevOutputs = usePromptOutputStore.getState().promptOutputs;
157+
updatePromptOutput(updateCoverage(prevOutputs, outputs));
179158
updateTokenUsage(tokenUsageDetails);
180159
}
181160
};
182161

162+
const updateCoverage = (promptOutputs, outputs) => {
163+
let updatedPromptOutputs = promptOutputs;
164+
Object.keys(outputs).forEach((key) => {
165+
const [keyPromptId, keyDoctId, , keyIsSinglePass] = key.split("__");
166+
// only add output of selected document
167+
if (keyDoctId === selectedDoc?.document_id) {
168+
const currentOutput = { [key]: outputs[key] };
169+
updatedPromptOutputs = { ...promptOutputs, ...currentOutput };
170+
}
171+
Object.keys(updatedPromptOutputs).forEach((innerKey) => {
172+
const [existingPromptId, , , existingIsSinglePass] =
173+
innerKey.split("__"); // Extract promptId from key
174+
if (
175+
keyPromptId === existingPromptId &&
176+
keyIsSinglePass === existingIsSinglePass
177+
) {
178+
updatedPromptOutputs[innerKey].coverage = outputs[key]?.coverage;
179+
}
180+
});
181+
});
182+
return updatedPromptOutputs;
183+
};
184+
183185
const promptOutputApi = async (
184186
toolId,
185187
docId = null,

0 commit comments

Comments
 (0)