package com.zy.ai.service;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
|
@Slf4j
|
@Component
|
public class PythonService {
|
|
@Autowired
|
private LlmChatService llmChatService;
|
|
public boolean runPython(String prompt, String chatId, SseEmitter emitter) {
|
try {
|
llmChatService.chatStreamRunPython(prompt, chatId, s -> {
|
try {
|
String safe = s == null ? "" : s.replace("\r", "").replace("\n", "\\n");
|
if (!safe.isEmpty()) {
|
sse(emitter, safe);
|
}
|
} catch (Exception ignore) {
|
}
|
}, () -> {
|
try {
|
sse(emitter, "\\n\\n【AI】运行已停止(正常结束)\\n\\n");
|
log.info("AI MCP diagnose stopped: final end");
|
emitter.complete();
|
} catch (Exception ignore) {
|
}
|
}, e -> {
|
sse(emitter, "\\n\\n【AI】分析出错,正在回退...\\n\\n");
|
});
|
return true;
|
} catch (Exception e) {
|
try {
|
sse(emitter, "\\n\\n【AI】运行已停止(异常)\\n\\n");
|
log.error("AI MCP diagnose stopped: error", e);
|
emitter.completeWithError(e);
|
} catch (Exception ignore) {}
|
return true;
|
}
|
}
|
|
private void sse(SseEmitter emitter, String data) {
|
if (data == null) return;
|
try {
|
emitter.send(SseEmitter.event().data(data));
|
} catch (Exception e) {
|
log.warn("SSE send failed", e);
|
}
|
}
|
|
}
|