Skip to content

Commit 639b234

Browse files
authored
fix: Do not rerender everytime CharmRunner's charm changes (#1121)
fix: Do not rerender everytime CharmRunner's charm changes, instead key callbacks based on immutable ID.
1 parent ec040c6 commit 639b234

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

jumble/src/components/CharmRunner.tsx

+13-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ function RawCharmRenderer({ charm, className = "" }: CharmRendererProps) {
8787
const id = useMemo(() => charmId(charm), [charm]);
8888
const navigate = useNavigate();
8989

90+
if (!id) {
91+
throw new Error("CharmRenderer has no id.");
92+
}
93+
9094
// Store a reference to the current charm to detect changes
9195
const prevCharmRef = useRef<Charm | null>(null);
9296

@@ -121,6 +125,14 @@ function RawCharmRenderer({ charm, className = "" }: CharmRendererProps) {
121125
const submitAutomaticErrorFeedback = React.useCallback(
122126
async (error: Error) => {
123127
try {
128+
// Don't use `charm` from args as it's not guaranteed to be
129+
// the same object. Instead, use `id` as a dependency,
130+
// and recreate a charm instance here.
131+
const charm = await charmManager.get(id);
132+
if (!charm) {
133+
throw new Error(`No charm found with id ${id}.`);
134+
}
135+
124136
const traceId = charmManager.getLLMTrace(charm);
125137

126138
if (!traceId) {
@@ -152,7 +164,7 @@ function RawCharmRenderer({ charm, className = "" }: CharmRendererProps) {
152164
console.error("Failed to submit automatic feedback:", submissionError);
153165
}
154166
},
155-
[charm, charmManager],
167+
[id, charmManager],
156168
);
157169

158170
React.useEffect(() => {

0 commit comments

Comments
 (0)