@gendive/chatllm 0.17.34 → 0.17.36

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.
@@ -2118,21 +2118,14 @@ ${autoSkillNames.join("\n")}`);
2118
2118
  parts.push(`## \uB2A5\uB825 \uC18C\uAC1C \uAC00\uC774\uB4DC
2119
2119
 
2120
2120
  \uC0AC\uC6A9\uC790\uAC00 "\uBB50 \uD560 \uC218 \uC788\uC5B4?", "\uC5B4\uB5A4 \uAE30\uB2A5\uC774 \uC788\uC5B4?", "\uB3C4\uC6C0\uC774 \uD544\uC694\uD574" \uB4F1 \uB2A5\uB825/\uAE30\uB2A5\uC744 \uBB3C\uC5B4\uBCF4\uBA74,
2121
- \uC544\uB798 \uB0B4\uC6A9\uC744 \uBC14\uD0D5\uC73C\uB85C **\uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uD615\uD0DC**\uB85C \uC9C1\uC811 \uC2DC\uC5F0\uD558\uBA70 \uC18C\uAC1C\uD558\uC138\uC694.
2121
+ \uC544\uB798 \uB0B4\uC6A9\uC744 \uBC14\uD0D5\uC73C\uB85C \uD14D\uC2A4\uD2B8\uB85C \uCE5C\uC808\uD558\uAC8C \uC18C\uAC1C\uD558\uC138\uC694. \uC2DC\uC5F0\uC774\uB098 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC2E4\uD589\uC740 \uD558\uC9C0 \uB9C8\uC138\uC694.
2122
2122
 
2123
2123
  ${capabilityFeatures.join("\n\n")}
2124
2124
 
2125
2125
  **\uC18C\uAC1C \uBC29\uC2DD:**
2126
- \uC704 \uAE30\uB2A5 \uC911 \uB300\uD45C\uC801\uC778 \uAC83\uB4E4\uC744 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8\uB85C \uAD6C\uC131\uD558\uC5EC, \uAC01 \uB2E8\uACC4\uC5D0\uC11C \uD574\uB2F9 \uAE30\uB2A5\uC744 \uC2E4\uC81C\uB85C \uC2DC\uC5F0\uD558\uC138\uC694.
2127
- \uC608\uC2DC:
2128
- "\uC81C\uAC00 \uD560 \uC218 \uC788\uB294 \uAC83\uB4E4\uC744 \uC9C1\uC811 \uBCF4\uC5EC\uB4DC\uB9AC\uACA0\uC2B5\uB2C8\uB2E4!
2129
-
2130
- <checklist>
2131
- <step>\uC6F9 \uAC80\uC0C9\uC73C\uB85C \uCD5C\uC2E0 \uB274\uC2A4 \uAC00\uC838\uC624\uAE30</step>
2132
- <step>\uAC80\uC0C9 \uACB0\uACFC \uAE30\uBC18 \uC694\uC57D \uBCF4\uACE0\uC11C \uC791\uC131</step>
2133
- </checklist>"
2134
-
2135
- \uB2E8, \uB3C4\uAD6C\uAC00 \uC5C6\uB294 \uACBD\uC6B0\uC5D0\uB294 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC5C6\uC774 \uD14D\uC2A4\uD2B8\uB85C \uAC04\uB2E8\uD788 \uC18C\uAC1C\uD558\uC138\uC694.`);
2126
+ - \uC704 \uAE30\uB2A5\uB4E4\uC744 \uD56D\uBAA9\uBCC4\uB85C \uAC04\uACB0\uD558\uAC8C \uC124\uBA85
2127
+ - \uAC01 \uAE30\uB2A5\uC774 \uC5B4\uB5A4 \uC0C1\uD669\uC5D0\uC11C \uC720\uC6A9\uD55C\uC9C0 \uC608\uC2DC\uB97C \uD55C\uB450 \uC904\uC529 \uD3EC\uD568
2128
+ - checklist, poll, skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694 (\uC18C\uAC1C\uB9CC \uD558\uACE0 \uC2E4\uD589\uD558\uC9C0 \uC54A\uC74C)`);
2136
2129
  }
2137
2130
  if (enablePoll) {
2138
2131
  parts.push("");
@@ -3166,6 +3159,65 @@ ${result.content}
3166
3159
  abortControllerRef.current = null;
3167
3160
  return;
3168
3161
  }
3162
+ const skillResultType = result.metadata?.type;
3163
+ if (skillResultType === "image" || skillResultType === "file") {
3164
+ const imgFileParts = [];
3165
+ if (skillCleanContent.trim()) {
3166
+ imgFileParts.push({ type: "text", content: skillCleanContent });
3167
+ }
3168
+ imgFileParts.push({
3169
+ type: "tool_result",
3170
+ toolName: detectedSkill.name,
3171
+ label: result.metadata?.label || detectedSkill.name,
3172
+ icon: result.metadata?.icon,
3173
+ result: {
3174
+ type: skillResultType,
3175
+ content: result.content,
3176
+ metadata: result.metadata,
3177
+ sources: result.sources
3178
+ }
3179
+ });
3180
+ setSessions(
3181
+ (prev) => prev.map((s) => {
3182
+ if (s.id !== capturedSessionId) return s;
3183
+ return {
3184
+ ...s,
3185
+ messages: s.messages.map((m) => {
3186
+ if (m.id !== assistantMessageId) return m;
3187
+ return {
3188
+ ...m,
3189
+ contentParts: imgFileParts,
3190
+ skillExecution: {
3191
+ ...m.skillExecution,
3192
+ status: "done",
3193
+ result
3194
+ }
3195
+ };
3196
+ })
3197
+ };
3198
+ })
3199
+ );
3200
+ let shouldContinueImgFile = continueAfterToolResult;
3201
+ if (onSkillCompleteRef.current) {
3202
+ const decision = onSkillCompleteRef.current(detectedSkill.name, result);
3203
+ shouldContinueImgFile = decision === "continue";
3204
+ }
3205
+ if (!shouldContinueImgFile) {
3206
+ saveMessagesOnEarlyReturn();
3207
+ setIsLoading(false);
3208
+ abortControllerRef.current = null;
3209
+ return;
3210
+ }
3211
+ skipNextSkillParsingRef.current = true;
3212
+ saveMessagesOnEarlyReturn();
3213
+ const imgFilePrompt = skillResultType === "image" ? `"${detectedSkill.name}" \uC2A4\uD0AC\uB85C \uC774\uBBF8\uC9C0\uAC00 \uC0DD\uC131\uB418\uC5B4 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD45C\uC2DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uC774\uBBF8\uC9C0 URL\uC744 \uD14D\uC2A4\uD2B8\uC5D0 \uD3EC\uD568\uD558\uC9C0 \uB9D0\uACE0, \uC0DD\uC131\uB41C \uC774\uBBF8\uC9C0\uC5D0 \uB300\uD574 \uAC04\uB2E8\uD788 \uC548\uB0B4\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.` : `"${detectedSkill.name}" \uC2A4\uD0AC\uB85C \uD30C\uC77C\uC774 \uC0DD\uC131\uB418\uC5B4 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD45C\uC2DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD30C\uC77C URL\uC744 \uD14D\uC2A4\uD2B8\uC5D0 \uD3EC\uD568\uD558\uC9C0 \uB9D0\uACE0, \uACB0\uACFC\uC5D0 \uB300\uD574 \uAC04\uB2E8\uD788 \uC548\uB0B4\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.`;
3214
+ setTimeout(() => {
3215
+ sendMessage(imgFilePrompt, { hiddenUserMessage: true });
3216
+ }, 100);
3217
+ setIsLoading(false);
3218
+ abortControllerRef.current = null;
3219
+ return;
3220
+ }
3169
3221
  setSessions(
3170
3222
  (prev) => prev.map((s) => {
3171
3223
  if (s.id !== capturedSessionId) return s;