From f7ed8e87881822f86c1dab319a64607ecac68d39 Mon Sep 17 00:00:00 2001 From: jade Date: Fri, 28 Aug 2026 17:11:39 +0900 Subject: [PATCH] fix: route Scaffolder AI requests to internal litellm and fix UseCase update bug --- .../executionHistory/executionHistory.bin | Bin 15431024 -> 15431024 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.14.3/fileHashes/fileHashes.bin | Bin 629809 -> 629809 bytes .gradle/8.14.3/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14.3/fileHashes/resourceHashesCache.bin | Bin 423929 -> 423963 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../presentation/ScaffoldingController.java | 29 ++++++++++++++++-- .../main/resources/static/admin/scaffold.html | 6 ++-- 8 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.gradle/8.14.3/executionHistory/executionHistory.bin b/.gradle/8.14.3/executionHistory/executionHistory.bin index fe734438b3094a247295b0bd4209c47688063a19..4d04a61b3290b1589051fbb8cf2f27078a53d0dd 100644 GIT binary patch delta 969 zcmZXQYgE$(7>6ZfmLAD(mG_xYXo{qP&QSt}W`VZ@F{ zuxB(5I3hvH7@T+%XIyxU$B`lD3C1#x@whU9i70Sm67EdKgDH68g*QG-Wg1WN6w`Sc zU;OZA1~Zw(Gt6cV0R$36FmnlE9`jkiLP7~ciHdL{c$P&hW(kojWf{-0oab3V6f0T9 zYF^+)qFKXQVpzvZ#1cn5FSDKmUSR`jG-%m~j#t@4BAeMl63L{HN*a1zBb}{eU?7ui zY$uBy>?E7l*@clDa@h^MK_2<+p@28p%RcsVfP);O5EF+v!dny}P|VxB!%>b=LMg{7 z;{@fLq=HILQAIWH@*bzDp_V${=L{cE&xbT{mPX8cL=zv=%qO()DXp|&;WN&0p3k{J zJ74f6U-2~;`G#+?a)}Nu^BtXBp^I*M_?{o={m?B1|jtm3}E{M=D*_v2Gn)|)#@#K=jqW{2Ack6g)KpLBAsDd%+i-$G%2 z=VoE3uiHx~OYIFa4>ySh2S+RQ%>)X&?rQv9i@O%3k3A!~vA{*SC$vLZ-uW=I+|~Gv z^9^1e?{{5aAxb=Q>uWQkdTg0+t5pmfzcfN^-`J9xP#s*+6ju}Db9LlO7`AAk$;vJ#6(q2Px<}9!-3m^zD?XGi_3AZEYU`ql(nl>$DCD#W*3X7af(-zUdSn0 zyRqs{om+HE^7d@|QL@;bX)f9w1DX|oRrk~;8tZJTy{&&q^sOXcl~U?_zG~ecHdSQ^ za}AywcQ&JZnV{ zw5A7B(He(YQ`F49{7-?RpySYq5P7RwH<&llQd5C+wB0DXhHhc_UiVDlKPSRPt2jAd UVij#%xACiu8)k|1X5y)T0qbYciU0rr delta 946 zcmZ9IX;hR26o#Q;aX@QKP>k5g%!S1!twa=+K_yvIDMM130R%CaC^HiW^$8p!l*Rc1 zf{2V%#LPw~%xx&mZ~>ADlWM^51L?4pB@~_-^jH0O&bjw_&%Hn1{_Yz4ehXPx^8gZT zu*D90Mj^!kM@BP-2YCn?V|kcyIN{8ACg8$E9>JAIal;)CJn_OCAAEU?Nj%PEo?r@7 znZ|Vd@F##kX7D6(o?<4mc$#N;me~X`hhXM1j}YdwfQ5vjAdE#UW(nau$5JAQB#LOB zXBo>`K@2bOA}e``SXL3o%dBP%Yl%mRiUbl#Vjan(u%1*l@Cs?9qvlmIc#YTD$Qx|p zO*ZouTgYT98nW2Nc6I=7lT8jg(Xxwo$mLz~*v%gDDWH%d_M$`JJ&Gxzl=ms4oDZnr zLn`@*eSAz6pRk_;9Hg2<)Nq(jIl^Zg<#Y5L<2VMspq3MS$w^LenlqfmNF87CHRm|b zH(cOb>bb}zE^~zj8foG?uF{N&?`h#0KX9E^e&i>9#!MUS+~5~F^f%on3Kd=wSD(`4 z3o|$EiZB*+iN1r?ak}OSvi~b#t;6)tu+)sjwpuqSu&yb zj3{?*&$Ai65t>pQ>UiEgMxWVJJ#r-s7?s{GiPBSbe}<=8MMt08Vmnr`@XEc1eVu~( zte7j)nTpgW0|GS4sKjOEE{X!f7^A3kh}~T87XRZv1wWy%=2Rx*m9ZuJ-Y6AOyHziusvEpr&5gigucTZv66rH-vqMRc=6@&dT zk&PvGJN?aCA#h!B>PQ7LLAJd$UTD;>o_~LxCsh^Pn{+E|{XI@BnH;PMkG&mmD`9r7 yUu9G2Un3>eXh+#tTUqN{gn_#)e!_oFgi8&gTaJB$Xra?WmxWsf`-bl1s(%58!q+4K diff --git a/.gradle/8.14.3/executionHistory/executionHistory.lock b/.gradle/8.14.3/executionHistory/executionHistory.lock index 9bcfc57764fa003df471f39197f7b03ef02e1cd9..0ad427ce34bf884cc057a4295bc22699a0d51e6d 100644 GIT binary patch literal 17 VcmZSHxa6?z_3Lk+F@S;SH2_D92DJbH literal 17 VcmZSHxa6?z_3Lk+F@S;SWdKKs2C@JE diff --git a/.gradle/8.14.3/fileHashes/fileHashes.bin b/.gradle/8.14.3/fileHashes/fileHashes.bin index 1b400bd648e019bfa493bd2dc0fa7279c0819d9c..09b2ecaaf90c11b3531ef9b1da3c5732e952ca7f 100644 GIT binary patch delta 253 zcmdnELv7;@wT2eP7N!>F7M2#)7Pc+yvQHJ>W!;)qm!EOt*Cad6cs1uJ1_s6j?%9Ss z3}8@jY`g7Kc7HDBoF@P2^XIckNzAzBQY^fI{iQXpeTVHu`$b^&IZYwc558xYlF%~q zj?sQzxa1kTT+^nt<$h4vi0L1_Iiw^!oRXNg?ahy0VYXyv^qO#GsBFyii?7(E6b{^* zRQ5nw!2Qd-&Tzk_8hKFJ9EeM*o=lJR;ZWP&`hi`6Lm{cf@Y26d$F7M2#)7Pc+yvQOo=I!LAaPMEzq@a_7&U75;<7#J8A*lb+< zi2)3E?ddfW}F=S@HO zo?S}f!M;sDe@wPFSJA&JJAH%OPpIsY=^wp0q$D2pvHW@Dnl;mv`F7M3lnx0o5Tw%=xEW#r*M@APkth|6*Y5MV3+x&1Of>nl+v zCB}`40({diM6&R;e>G;^{?(X`#bvrc91EYw-;YvJlK*uC56@PTnXlr%38+sF0HjeM A>;M1& delta 55 zcmV-70LcHF@EQ5<8GwWVgaU*Egaot&+5-V;x7z~+0SveF4+Y^B0wL+KAt(-)&{+fy NhxIcBxAijy1Vmik6k`AY diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 49fa4dbd6decec5d961fa64653eaf91db08af130..983dd068ff1e69ae5a1b24f43d3c0bfbf4bb96c4 100644 GIT binary patch literal 17 VcmZQ>U--INyyxCO1~3Sm1pq&i1_S^A literal 17 VcmZQ>U--INyyxCO1~3Sm002LT1^NI0 diff --git a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java index 882dabc9..fc915850 100644 --- a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java +++ b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java @@ -427,10 +427,33 @@ public class ScaffoldingController { } private String generateAiContent(String prompt, String requestedModel) { - return chatClientBuilder.build().prompt() + String resolvedModel = resolveModel(requestedModel); + org.springframework.ai.chat.client.ChatClient activeChatClient; + org.springframework.ai.chat.prompt.ChatOptions chatOptions; + + if ("Qwen3-Coder".equalsIgnoreCase(resolvedModel) || "Gemma-4-31B".equalsIgnoreCase(resolvedModel)) { + String liteLlmBaseUrl = "https://dev-iam-litellm.shinhanlife.co.kr:18020"; + String apiKey = "Gemma-4-31B".equalsIgnoreCase(resolvedModel) ? "sk-EH107wYBZuU6RUTqthR17A" : "sk-UJ2IRenvaMPbY3ozQdj6zw"; + + org.springframework.ai.openai.api.OpenAiApi openAiApi = org.springframework.ai.openai.api.OpenAiApi.builder() + .baseUrl(liteLlmBaseUrl) + .apiKey(new org.springframework.ai.model.SimpleApiKey(apiKey)) + .build(); + + org.springframework.ai.openai.OpenAiChatModel dynamicChatModel = org.springframework.ai.openai.OpenAiChatModel.builder() + .openAiApi(openAiApi) + .build(); + + activeChatClient = org.springframework.ai.chat.client.ChatClient.builder(dynamicChatModel).build(); + chatOptions = org.springframework.ai.openai.OpenAiChatOptions.builder().model(resolvedModel).build(); + } else { + activeChatClient = chatClientBuilder.build(); + chatOptions = org.springframework.ai.openai.OpenAiChatOptions.builder().model(resolvedModel).build(); + } + + return activeChatClient.prompt() .user(prompt) - .options(org.springframework.ai.openai.OpenAiChatOptions.builder() - .model(resolveModel(requestedModel)).build()) + .options(chatOptions) .call() .content(); } diff --git a/dat-gateway/src/main/resources/static/admin/scaffold.html b/dat-gateway/src/main/resources/static/admin/scaffold.html index 5630d839..adc6e3d6 100644 --- a/dat-gateway/src/main/resources/static/admin/scaffold.html +++ b/dat-gateway/src/main/resources/static/admin/scaffold.html @@ -1709,8 +1709,10 @@ } catch (error) { console.warn(error); } - nameInput.value = ''; - nameInput.readOnly = false; + if (!nameInput.value) { + nameInput.value = ''; + nameInput.readOnly = false; + } loadUseCasesForSelection(); }