Skip to content

Commit

Permalink
feat(ui): make new content builder works
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Jul 30, 2023
1 parent 86a5c72 commit 0b7499c
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 37 deletions.
Expand Up @@ -58,7 +58,6 @@ class JvmIdeaContextPrompter : ContextPrompter() {
return runBlocking {
val prompt = createPrompt(selectedText)


val finalPrompt = if (additionContext.isNotEmpty()) {
"""$additionContext
|$selectedText""".trimMargin()
Expand All @@ -67,8 +66,8 @@ class JvmIdeaContextPrompter : ContextPrompter() {
}

return@runBlocking """$prompt:
<pre><code>$finalPrompt</pre></code>
""".trimMargin()
| <pre><code>$finalPrompt</pre></code>
""".trimMargin()
}
}

Expand All @@ -78,13 +77,19 @@ class JvmIdeaContextPrompter : ContextPrompter() {

val finalPrompt = if (additionContext.isNotEmpty()) {
"""$additionContext
|$selectedText""".trimMargin()
|```$lang
|$selectedText
|```
|""".trimMargin()
} else {
selectedText
"""```$lang
|$selectedText
|```
""".trimMargin()
}

return@runBlocking """$prompt:
$finalPrompt
return@runBlocking """$prompt:
| $finalPrompt
""".trimMargin()
}
}
Expand Down
10 changes: 3 additions & 7 deletions src/main/kotlin/cc/unitmesh/devti/actions/chat/ChatBaseAction.kt
Expand Up @@ -37,15 +37,11 @@ abstract class ChatBaseAction : AnAction() {
if (prefixText.isEmpty()) {
prefixText = document?.text?.substring(0, lineEndOffset) ?: ""
}

// suffixText is the text after the selectedText, which is the text after the cursor position
val suffixText = document?.text?.substring(lineEndOffset) ?: ""


val prompter = ContextPrompter.prompter(file?.language?.displayName ?: "")
logger.info("use prompter: ${prompter?.javaClass}")
prompter?.initContext(getActionType(), prefixText, file, project, caretModel?.offset ?: 0)

logger.info("use prompter: ${prompter.javaClass}")
prompter.initContext(getActionType(), prefixText, file, project, caretModel?.offset ?: 0)

sendToToolWindow(project) { service, panel ->
val chatContext = ChatContext(
Expand All @@ -54,7 +50,7 @@ abstract class ChatBaseAction : AnAction() {
suffixText
)

service.handlePromptAndResponse(panel, prompter!!, chatContext)
service.handlePromptAndResponse(panel, prompter, chatContext)
}
}

Expand Down
Expand Up @@ -21,7 +21,7 @@ enum class ChatActionType {
EXPLAIN -> "Explain selected $lang code"
REVIEW -> "Code Review for following $lang code"
REFACTOR -> "Refactor the following $lang code"
CODE_COMPLETE -> "Complete $lang code, return rest code, no explaining"
CODE_COMPLETE -> "Complete $lang code, return rest code, no explaining"
WRITE_TEST -> "Write unit test for following $lang code"
FIX_ISSUE -> "Help me fix this issue"
GEN_COMMIT_MESSAGE -> """suggest 10 commit messages based on the following diff:
Expand Down
6 changes: 1 addition & 5 deletions src/main/kotlin/cc/unitmesh/devti/gui/chat/MessageView.kt
Expand Up @@ -13,7 +13,7 @@ import java.awt.*
import javax.swing.*
import kotlin.jvm.internal.Ref

class MessageView(private val message: String, role: ChatRole) : JBPanel<MessageView>(), DataProvider {
class MessageView(private val message: String, role: ChatRole) : JBPanel<MessageView>() {
private val component: DisplayComponent = DisplayComponent(message)
private var answer: String? = null

Expand Down Expand Up @@ -166,8 +166,4 @@ class MessageView(private val message: String, role: ChatRole) : JBPanel<Message
private val logger = logger<MessageView>()

}

override fun getData(dataId: String): Any? {
return message
}
}
30 changes: 21 additions & 9 deletions src/main/kotlin/cc/unitmesh/devti/gui/chat/block/MessageBlock.kt
Expand Up @@ -4,26 +4,38 @@ interface MessageBlock {
val type: MessageBlockType
val message: CompletableMessage
val textContent: String

fun addContent(blockText: String)
fun replaceContent(content: String)
}

class TextBlock(override val message: CompletableMessage) : MessageBlock {
override val type: MessageBlockType = MessageBlockType.PlainText
override val textContent: String
get() = message.text
abstract class AbstractMessageBlock(override val message: CompletableMessage) : MessageBlock {
private val contentBuilder: StringBuilder

init {
contentBuilder = StringBuilder()
}

override val textContent: String = contentBuilder.toString()

override fun addContent(blockText: String) {
contentBuilder.append(blockText)
}

override fun replaceContent(content: String) {
contentBuilder.clear()
contentBuilder.append(content)
}
}

class CodeBlock(override val message: CompletableMessage) : MessageBlock {
override val type: MessageBlockType = MessageBlockType.CodeEditor
class TextBlock(override val message: CompletableMessage) : AbstractMessageBlock(message) {
override val type: MessageBlockType = MessageBlockType.PlainText
override val textContent: String
get() = message.text
}

override fun addContent(blockText: String) {
class CodeBlock(override val message: CompletableMessage) : AbstractMessageBlock(message) {
override val type: MessageBlockType = MessageBlockType.CodeEditor
override val textContent: String
get() = message.text

}
}
Expand Up @@ -40,7 +40,7 @@ class MessageCodeBlockCharProcessor {
}
}

fun isCodeBlockEnd(parameters: Parameters, blockStart: Int): Boolean {
private fun isCodeBlockEnd(parameters: Parameters, blockStart: Int): Boolean {
if (parameters.charIndex - blockStart < 5) {
return false
}
Expand All @@ -51,17 +51,15 @@ class MessageCodeBlockCharProcessor {
val subSequence = fullMessage.subSequence(charIndex - 3, charIndex + 1)
subSequence == "\n$borderBlock"
}

parameters.char == '\n' && (charIndex - 3) - 1 >= 0 -> {
val subSequence = fullMessage.subSequence(charIndex - 4, charIndex)
subSequence == "\n$borderBlock"
}

else -> false
}
}

fun isCodeBlockStart(parameters: Parameters): Boolean {
private fun isCodeBlockStart(parameters: Parameters): Boolean {
if (parameters.char == triggerChar && parameters.charIndex + 3 < parameters.fullMessage.length) {
val isLineStart = parameters.charIndex == 0 || parameters.fullMessage[parameters.charIndex - 1] == '\n'
if (isLineStart) {
Expand Down
Expand Up @@ -52,8 +52,8 @@ abstract class AbstractChatIntention : IntentionAction {


val prompter = ContextPrompter.prompter(file.language.displayName)
prompter?.initContext(actionType, selectedText, file, project, editor.caretModel.offset)
sendToChat(project, actionType, prompter!!)
prompter.initContext(actionType, selectedText, file, project, editor.caretModel.offset)
sendToChat(project, actionType, prompter)
}

protected fun selectElement(elementToExplain: PsiElement, editor: Editor) {
Expand Down
2 changes: 0 additions & 2 deletions src/main/kotlin/cc/unitmesh/devti/provider/ContextPrompter.kt
@@ -1,8 +1,6 @@
package cc.unitmesh.devti.provider

import cc.unitmesh.devti.context.chunks.SimilarChunksWithPaths
import cc.unitmesh.devti.gui.chat.ChatActionType
import cc.unitmesh.devti.prompting.model.CustomPromptConfig
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
Expand Down

0 comments on commit 0b7499c

Please sign in to comment.