/
psklyarov
/
agent-replacer
Обзор
Документация
Войти
/
psklyarov
/
agent-replacer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/example/agentreplacer/llm/LlmController.java
77 строк
3 KB
pavelsklyarov
fixed imports
15 дек 2025, 14:26
15 дек 2025, 14:26
d3effc3
Код
Авторство
О чём код?
package com.example.agentreplacer.llm; import com.example.agentreplacer.plan.ChangePlan; import com.example.agentreplacer.plan.PlanService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; @RestController @RequestMapping("/api/llm") public class LlmController { private final LlmClient llmClient; private final PlanService planService; private static final Logger log = LoggerFactory.getLogger(LlmController.class); public LlmController(LlmClient llmClient, PlanService planService) { this.llmClient = llmClient; this.planService = planService; } @PostMapping("/chat") public ResponseEntity<?> chat(@RequestBody Map<String, String> body) { log.info("LLM /chat"); String system = body.getOrDefault("systemPrompt", "Ты помощник. Отвечай кратко."); String message = body.get("message"); if (message == null || message.isBlank()) { return ResponseEntity.badRequest().body(Map.of("error", "message is required")); } String content = llmClient.chat(system, message); log.debug("LLM chat response length={}", content != null ? content.length() : 0); return ResponseEntity.ok(Map.of("content", content)); } @PostMapping("/transform") public ResponseEntity<?> transform(@RequestBody Map<String, String> body) { log.info("LLM /transform"); String instructions = body.getOrDefault("instructions", ""); String filePath = body.getOrDefault("filePath", "test.txt"); String content = body.get("content"); if (content == null) { return ResponseEntity.badRequest().body(Map.of("error", "content is required")); } String system = "Ты помощник по рефакторингу. Верни только новое содержимое файла, без пояснений."; String updated = llmClient.transformFile(system, instructions, filePath, content); log.debug("LLM transform response length={}", updated != null ? updated.length() : 0); return ResponseEntity.ok(Map.of("content", updated)); } @PostMapping("/plan") public ResponseEntity<?> plan(@RequestBody Map<String, Object> body) { log.info("LLM /plan"); // Для теста используем уже существующую логику PlanService: собираем ChatSessionState-подобные поля try { var session = new com.example.agentreplacer.chat.ChatSessionState(); Object ex = body.get("excludedReposAnswer"); Object inc = body.get("includeCriteriaAnswer"); Object exc = body.get("excludeCriteriaAnswer"); Object what = body.get("whatToChangeAnswer"); Object task = body.get("taskNumberAnswer"); if (ex != null) session.setExcludedReposAnswer(String.valueOf(ex)); if (inc != null) session.setIncludeCriteriaAnswer(String.valueOf(inc)); if (exc != null) session.setExcludeCriteriaAnswer(String.valueOf(exc)); if (what != null) session.setWhatToChangeAnswer(String.valueOf(what)); if (task != null) session.setTaskNumberAnswer(String.valueOf(task)); ChangePlan plan = planService.buildPlan(session); log.debug("LLM plan built: projectKey={}, mode={}, targets={}", plan.getProjectKey(), plan.getMode(), plan.getTargetBranches()); return ResponseEntity.ok(Map.of("plan", plan)); } catch (Exception e) { log.error("LLM /plan error: {}", e.getMessage(), e); return ResponseEntity.badRequest().body(Map.of("error", e.getMessage())); } } }