@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.
@@ -2049,21 +2049,14 @@ ${autoSkillNames.join("\n")}`);
2049
2049
  parts.push(`## \uB2A5\uB825 \uC18C\uAC1C \uAC00\uC774\uB4DC
2050
2050
 
2051
2051
  \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,
2052
- \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.
2052
+ \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.
2053
2053
 
2054
2054
  ${capabilityFeatures.join("\n\n")}
2055
2055
 
2056
2056
  **\uC18C\uAC1C \uBC29\uC2DD:**
2057
- \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.
2058
- \uC608\uC2DC:
2059
- "\uC81C\uAC00 \uD560 \uC218 \uC788\uB294 \uAC83\uB4E4\uC744 \uC9C1\uC811 \uBCF4\uC5EC\uB4DC\uB9AC\uACA0\uC2B5\uB2C8\uB2E4!
2060
-
2061
- <checklist>
2062
- <step>\uC6F9 \uAC80\uC0C9\uC73C\uB85C \uCD5C\uC2E0 \uB274\uC2A4 \uAC00\uC838\uC624\uAE30</step>
2063
- <step>\uAC80\uC0C9 \uACB0\uACFC \uAE30\uBC18 \uC694\uC57D \uBCF4\uACE0\uC11C \uC791\uC131</step>
2064
- </checklist>"
2065
-
2066
- \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.`);
2057
+ - \uC704 \uAE30\uB2A5\uB4E4\uC744 \uD56D\uBAA9\uBCC4\uB85C \uAC04\uACB0\uD558\uAC8C \uC124\uBA85
2058
+ - \uAC01 \uAE30\uB2A5\uC774 \uC5B4\uB5A4 \uC0C1\uD669\uC5D0\uC11C \uC720\uC6A9\uD55C\uC9C0 \uC608\uC2DC\uB97C \uD55C\uB450 \uC904\uC529 \uD3EC\uD568
2059
+ - 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)`);
2067
2060
  }
2068
2061
  if (enablePoll) {
2069
2062
  parts.push("");
@@ -3097,6 +3090,65 @@ ${result.content}
3097
3090
  abortControllerRef.current = null;
3098
3091
  return;
3099
3092
  }
3093
+ const skillResultType = result.metadata?.type;
3094
+ if (skillResultType === "image" || skillResultType === "file") {
3095
+ const imgFileParts = [];
3096
+ if (skillCleanContent.trim()) {
3097
+ imgFileParts.push({ type: "text", content: skillCleanContent });
3098
+ }
3099
+ imgFileParts.push({
3100
+ type: "tool_result",
3101
+ toolName: detectedSkill.name,
3102
+ label: result.metadata?.label || detectedSkill.name,
3103
+ icon: result.metadata?.icon,
3104
+ result: {
3105
+ type: skillResultType,
3106
+ content: result.content,
3107
+ metadata: result.metadata,
3108
+ sources: result.sources
3109
+ }
3110
+ });
3111
+ setSessions(
3112
+ (prev) => prev.map((s) => {
3113
+ if (s.id !== capturedSessionId) return s;
3114
+ return {
3115
+ ...s,
3116
+ messages: s.messages.map((m) => {
3117
+ if (m.id !== assistantMessageId) return m;
3118
+ return {
3119
+ ...m,
3120
+ contentParts: imgFileParts,
3121
+ skillExecution: {
3122
+ ...m.skillExecution,
3123
+ status: "done",
3124
+ result
3125
+ }
3126
+ };
3127
+ })
3128
+ };
3129
+ })
3130
+ );
3131
+ let shouldContinueImgFile = continueAfterToolResult;
3132
+ if (onSkillCompleteRef.current) {
3133
+ const decision = onSkillCompleteRef.current(detectedSkill.name, result);
3134
+ shouldContinueImgFile = decision === "continue";
3135
+ }
3136
+ if (!shouldContinueImgFile) {
3137
+ saveMessagesOnEarlyReturn();
3138
+ setIsLoading(false);
3139
+ abortControllerRef.current = null;
3140
+ return;
3141
+ }
3142
+ skipNextSkillParsingRef.current = true;
3143
+ saveMessagesOnEarlyReturn();
3144
+ 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.`;
3145
+ setTimeout(() => {
3146
+ sendMessage(imgFilePrompt, { hiddenUserMessage: true });
3147
+ }, 100);
3148
+ setIsLoading(false);
3149
+ abortControllerRef.current = null;
3150
+ return;
3151
+ }
3100
3152
  setSessions(
3101
3153
  (prev) => prev.map((s) => {
3102
3154
  if (s.id !== capturedSessionId) return s;