Skip to content

Commit d09b88b

Browse files
committed
feat: add highlight for json
Co-authored-by: VLSMB <2047857654@qq.com>
1 parent 5d80bae commit d09b88b

File tree

2 files changed

+28
-8
lines changed
  • spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph
  • spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views

2 files changed

+28
-8
lines changed

spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/CompiledGraph.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -994,8 +994,10 @@ public Data<Output> next() {
994994
if (shouldInterruptAfter(context.currentNodeId(), context.nextNodeId())) {
995995
// 在中断前保存 checkpoint
996996
try {
997-
addCheckpoint(config, context.currentNodeId(), currentState, context.nextNodeId(), overAllState);
998-
} catch (Exception e) {
997+
addCheckpoint(config, context.currentNodeId(), currentState, context.nextNodeId(),
998+
overAllState);
999+
}
1000+
catch (Exception e) {
9991001
log.warn("Failed to save checkpoint before interrupt: {}", e.getMessage());
10001002
}
10011003
return Data
@@ -1005,8 +1007,10 @@ public Data<Output> next() {
10051007
if (shouldInterruptBefore(context.nextNodeId(), context.currentNodeId())) {
10061008
// 在中断前保存 checkpoint
10071009
try {
1008-
addCheckpoint(config, context.currentNodeId(), currentState, context.nextNodeId(), overAllState);
1009-
} catch (Exception e) {
1010+
addCheckpoint(config, context.currentNodeId(), currentState, context.nextNodeId(),
1011+
overAllState);
1012+
}
1013+
catch (Exception e) {
10101014
log.warn("Failed to save checkpoint before interrupt: {}", e.getMessage());
10111015
}
10121016
return Data

spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views/AgentRun.vue

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@
323323
<div class="agent-response-title">
324324
<i class="bi bi-diagram-3"></i> 当前计划
325325
</div>
326-
<div class="agent-response-content">{{ formatHumanReviewPlan(humanReviewPlan) }}</div>
326+
<div class="agent-response-content" v-html="formatHumanReviewPlan(humanReviewPlan)"></div>
327327
</div>
328328
<div class="modal-footer" style="display:flex; gap:8px;">
329329
<textarea v-model="humanReviewSuggestion" placeholder="如不合理,请填写修改建议" style="width:100%; height:80px;"></textarea>
@@ -345,10 +345,12 @@ import hljs from 'highlight.js';
345345
import 'highlight.js/styles/github.css';
346346
import python from 'highlight.js/lib/languages/python';
347347
import sql from 'highlight.js/lib/languages/sql'
348+
import json from 'highlight.js/lib/languages/json'
348349
349350
// 注册语言
350351
hljs.registerLanguage('python', python);
351352
hljs.registerLanguage('sql', sql);
353+
hljs.registerLanguage('json', json);
352354
353355
export default {
354356
name: 'AgentRun',
@@ -2637,16 +2639,30 @@ export default {
26372639
// 格式化人工复核计划显示
26382640
const formatHumanReviewPlan = (plan) => {
26392641
if (!plan) return ''
2640-
2642+
2643+
// 创建code元素
2644+
const codeElement = document.createElement('code');
2645+
codeElement.className = 'language-json';
2646+
26412647
try {
26422648
plan = plan.replace("```json", "").replace("```", "");
26432649
// 尝试解析JSON
26442650
const parsed = JSON.parse(plan)
2645-
return JSON.stringify(parsed, null, 2)
2651+
codeElement.textContent = JSON.stringify(parsed, null, 2);
26462652
} catch (e) {
26472653
// 如果不是JSON,直接返回原始内容
2648-
return plan
2654+
codeElement.textContent = plan;
26492655
}
2656+
2657+
// 高亮代码
2658+
hljs.highlightElement(codeElement);
2659+
2660+
// 创建pre元素并包装code元素
2661+
const preElement = document.createElement('pre');
2662+
preElement.appendChild(codeElement);
2663+
2664+
return preElement.outerHTML;
2665+
26502666
}
26512667
26522668
const approvePlan = async () => {

0 commit comments

Comments
 (0)