Skip to content

Commit 932850c

Browse files
committed
feat(core): add ShadowPlanner for generating development plans #352
- Implement ShadowPlanner object with methods for enhancing prompts and generating plans - Add functionality to collect system prompts using sketch templates - Integrate with LlmFactory for language model generation - Utilize AutoDevCoroutineScope for asynchronous plan generation
1 parent 70a9537 commit 932850c

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package cc.unitmesh.devti.shadow
2+
3+
import cc.unitmesh.devti.llms.LlmFactory
4+
import cc.unitmesh.devti.llms.cancelHandler
5+
import cc.unitmesh.devti.provider.devins.LanguageProcessor
6+
import cc.unitmesh.devti.sketch.SketchRunContext
7+
import cc.unitmesh.devti.template.GENIUS_CODE
8+
import cc.unitmesh.devti.template.TemplateRender
9+
import cc.unitmesh.devti.util.AutoDevCoroutineScope
10+
import com.intellij.openapi.project.Project
11+
import kotlinx.coroutines.flow.cancellable
12+
import kotlinx.coroutines.launch
13+
14+
object ShadowPlanner {
15+
/**
16+
* Call llm to make prompt better
17+
*/
18+
fun enhancePrompt(prompt: String): String {
19+
return prompt.replace("{{", "{{{").replace("}}", "}}}")
20+
}
21+
22+
suspend fun generatePlan(project: Project, input: String, handleCancel: ((String) -> Unit)?) {
23+
var llmProvider = LlmFactory.create(project)
24+
25+
AutoDevCoroutineScope.workerScope(project).launch {
26+
val devInProcessor = LanguageProcessor.devin()
27+
val compiledInput = devInProcessor?.compile(project, input) ?: input
28+
29+
val input = compiledInput.toString().trim()
30+
if (input.isEmpty()) {
31+
return@launch
32+
}
33+
34+
val systemPrompt = collectSystemPrompt(project)
35+
val flow = llmProvider.stream(input, systemPrompt, keepHistory = true, true)
36+
val suggestion = StringBuilder()
37+
38+
flow.cancelHandler { handleCancel }.cancellable().collect { char ->
39+
suggestion.append(char)
40+
}
41+
}
42+
}
43+
44+
/**
45+
* call sketch and can also can plan model to directly generate code
46+
*/
47+
suspend fun collectSystemPrompt(project: Project): String {
48+
val templateRender = TemplateRender(GENIUS_CODE)
49+
val template = templateRender.getTemplate("sketch.vm")
50+
val customContext = SketchRunContext.create(project, null, "")
51+
var systemPrompt = templateRender.renderTemplate(template, customContext)
52+
return systemPrompt
53+
}
54+
}

0 commit comments

Comments
 (0)