From 4fad27e60806cfcde114defd6b02e7f0ede49138 Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Sun, 16 Apr 2023 22:30:19 +0800 Subject: [PATCH] refactor: try to update codes --- src/main/kotlin/cc/unitmesh/devti/DevtiFlow.kt | 16 ++++++++-------- .../devti/prompt/openai/GptPromptText.kt | 1 + .../unitmesh/devti/prompt/openai/OpenAIAction.kt | 8 ++++++++ .../cc/unitmesh/devti/runconfig/DtRunState.kt | 7 +++---- .../prompts/update_controller_method.txt | 7 +++---- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/cc/unitmesh/devti/DevtiFlow.kt b/src/main/kotlin/cc/unitmesh/devti/DevtiFlow.kt index 6348d34688..d743c21d02 100644 --- a/src/main/kotlin/cc/unitmesh/devti/DevtiFlow.kt +++ b/src/main/kotlin/cc/unitmesh/devti/DevtiFlow.kt @@ -21,41 +21,41 @@ class DevtiFlow( // 1. check story detail is valid, if not, fill story detail var storyDetail = story.description if (!kanban.isValidStory(storyDetail)) { - logger.info("story detail is not valid, fill story detail") + logger.warn("story detail is not valid, fill story detail") storyDetail = flowAction.fillStoryDetail(project, story.description) - logger.info("fill story detail: $storyDetail") val newStory = SimpleStory(story.id, story.title, storyDetail) kanban.updateStoryDetail(newStory) } + logger.warn("user story detail: $storyDetail") // 2. get suggest endpoint val files: List = analyser?.controllerList() ?: emptyList() - logger.info("start devti flow") + logger.warn("start devti flow") val targetEndpoint = flowAction.analysisEndpoint(storyDetail, files) // use regex match *Controller from targetEndpoint val controller = getController(targetEndpoint) if (controller == null) { - logger.info("no controller found from: $targetEndpoint") + logger.warn("no controller found from: $targetEndpoint") return } - logger.info("target endpoint: $targetEndpoint") + logger.warn("target endpoint: $targetEndpoint") val targetController = files.find { it.name == targetEndpoint } if (targetController == null) { - logger.info("no controller found from: $targetEndpoint") + logger.warn("no controller found from: $targetEndpoint") return } // 3. update endpoint method val code = flowAction.needUpdateMethodForController(targetEndpoint, targetController) + logger.warn("update method code: $code") analyser?.updateMethod(targetController.name, code) - logger.info("update method code: $code") } private fun getController(targetEndpoint: String): String? { - val regex = Regex("""\s+(\w+Controller)""") + val regex = Regex("""(\w+Controller)""") val matchResult = regex.find(targetEndpoint) return matchResult?.groupValues?.get(1) } diff --git a/src/main/kotlin/cc/unitmesh/devti/prompt/openai/GptPromptText.kt b/src/main/kotlin/cc/unitmesh/devti/prompt/openai/GptPromptText.kt index 0f3b6e7d64..238ff5a541 100644 --- a/src/main/kotlin/cc/unitmesh/devti/prompt/openai/GptPromptText.kt +++ b/src/main/kotlin/cc/unitmesh/devti/prompt/openai/GptPromptText.kt @@ -44,6 +44,7 @@ class GptPromptText() { val promptText: InputStream = this::class.java.classLoader.getResourceAsStream("prompts/update_controller_method.txt")!! val promptTextString = promptText.bufferedReader().use { it.readText() } return promptTextString + .replace("{controllerName}", targetClazz.name) .replace("{controllers}", targetClazz.format()) .replace("{targetEndpoint}", targetEndpoint) } diff --git a/src/main/kotlin/cc/unitmesh/devti/prompt/openai/OpenAIAction.kt b/src/main/kotlin/cc/unitmesh/devti/prompt/openai/OpenAIAction.kt index 08ea8f3189..b4e41bb14c 100644 --- a/src/main/kotlin/cc/unitmesh/devti/prompt/openai/OpenAIAction.kt +++ b/src/main/kotlin/cc/unitmesh/devti/prompt/openai/OpenAIAction.kt @@ -4,6 +4,7 @@ import cc.unitmesh.devti.analysis.DtClass import cc.unitmesh.devti.kanban.SimpleProjectInfo import cc.unitmesh.devti.prompt.AiAction import cc.unitmesh.devti.prompt.DevtiFlowAction +import cc.unitmesh.devti.runconfig.DtRunState import com.aallam.openai.api.BetaOpenAI import com.aallam.openai.api.chat.ChatCompletion import com.aallam.openai.api.chat.ChatCompletionRequest @@ -11,6 +12,8 @@ import com.aallam.openai.api.chat.ChatMessage import com.aallam.openai.api.chat.ChatRole import com.aallam.openai.api.model.ModelId import com.aallam.openai.client.OpenAI +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.diagnostic.logger import kotlinx.coroutines.runBlocking class OpenAIAction(val openAIKey: String, val version: String) : AiAction, DevtiFlowAction { @@ -51,9 +54,14 @@ class OpenAIAction(val openAIKey: String, val version: String) : AiAction, Devti override fun needUpdateMethodForController(targetEndpoint: String, clazz: DtClass): String { val promptText = gptPromptText.fillUpdateMethod(targetEndpoint, clazz) + logger.info("needUpdateMethodForController prompt text: $promptText") return runBlocking { val prompt = prompt(promptText) return@runBlocking prompt } } + + companion object { + private val logger: Logger = logger() + } } \ No newline at end of file diff --git a/src/main/kotlin/cc/unitmesh/devti/runconfig/DtRunState.kt b/src/main/kotlin/cc/unitmesh/devti/runconfig/DtRunState.kt index 2db97c960e..47056c6faf 100644 --- a/src/main/kotlin/cc/unitmesh/devti/runconfig/DtRunState.kt +++ b/src/main/kotlin/cc/unitmesh/devti/runconfig/DtRunState.kt @@ -33,11 +33,10 @@ class DtRunState( log.warn(createStory.toString()) log.warn(options.toString()) - if (createStory == null) { - return null - } + // todo: check create story + val storyId = createStory?.storyId ?: 1 - devtiFlow.start(createStory.storyId.toString()) + devtiFlow.start(storyId.toString()) return null } diff --git a/src/main/resources/prompts/update_controller_method.txt b/src/main/resources/prompts/update_controller_method.txt index 3eef8b51d3..3f9606a268 100644 --- a/src/main/resources/prompts/update_controller_method.txt +++ b/src/main/resources/prompts/update_controller_method.txt @@ -1,8 +1,7 @@ -请根据下面的用户故事以及 BlogController 的相关信息,编写代码。要求如下: +请根据下面的用户故事以及 {controllerName} 的相关信息,修改代码。要求如下: -1. 使用 Java + Spring 编写,只返回 Controller 对应方法的代码,不需要编写 Service 层的代码。 -2. 只返回代码,不需要编写测试代码。 -3. 不做解释,只返回代码。 +1. 使用 Java + Spring 编写,只返回 Controller 对应方法的代码。 +2. 不做解释,只返回修改完的函数代码。 ``` {controllers}