Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

custom_agent 執行/write 無法產生新檔案 #144

Closed
ymli0215 opened this issue Apr 10, 2024 · 25 comments
Closed

custom_agent 執行/write 無法產生新檔案 #144

ymli0215 opened this issue Apr 10, 2024 · 25 comments

Comments

@ymli0215
Copy link
Contributor

@phodal

正在嘗試透過 custom agent 來做一些連續性的流程,是透過nodejs寫agent

app.post("/api/agent/junit", (req, res) => {
    const reqCtx = req.body.messages[0].content;
    
    res.type('text/plain');
    res.send( `
/write:len/test.java#L1-L12

\`\`\`java
public class Controller {
    public void method() {
        System.out.println("Hello, World!");
    }
}


\`\`\`
`);
});

上述的寫法,沒有辦法把內容寫到已存在的檔案,也無法產生新檔案

如果改為下方,就是透過 `` ` devin ``` 將 /write包起來,就可以把內容寫到已存在檔案內,但是依然不能產生新檔案

app.post("/api/agent/junit", (req, res) => {
    const reqCtx = req.body.messages[0].content;
console.log('');
    res.type('text/plain');
    res.send(`
\`\`\`devin  <-  增加這段

/write:len/test.java#L1-L12

\\\`\\\`\\\`java
public class Controller {
    public void method() {
        System.out.println("Hello, World!666");
    }
}
\\\`\\\`\\\`


\`\`\`
`);
});

下方是log內容,看起來也跟 #143有類似的問題


com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: Read access is allowed from inside read-action (see Application.runReadAction()); see https://jb.gg/ij-platform-threading for details
Current thread: Thread[DefaultDispatcher-worker-7,6,main] 780236061 (EventQueue.isDispatchThread()=false)
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,main] 1322118874
	at com.intellij.util.concurrency.ThreadingAssertions.createThreadAccessException(ThreadingAssertions.java:149)
	at com.intellij.util.concurrency.ThreadingAssertions.softAssertReadAccess(ThreadingAssertions.java:107)
	at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1012)
	at com.intellij.psi.impl.source.tree.TreeElement.assertReadAccessAllowed(TreeElement.java:421)
	at com.intellij.psi.impl.source.tree.CompositeElement.textToCharArray(CompositeElement.java:234)
	at com.intellij.psi.impl.source.tree.CompositeElement.getText(CompositeElement.java:217)
	at com.intellij.extapi.psi.ASTDelegatePsiElement.getText(ASTDelegatePsiElement.java:133)
	at cc.unitmesh.devti.language.compiler.DevInsCompiler.processingCommand(DevInsCompiler.kt:170)
	at cc.unitmesh.devti.language.compiler.DevInsCompiler.processUsed(DevInsCompiler.kt:108)
	at cc.unitmesh.devti.language.compiler.DevInsCompiler.compile(DevInsCompiler.kt:51)
	at cc.unitmesh.devti.language.run.flow.DevInsProcessProcessor.executeTask(DevInsProcessProcessor.kt:88)
	at cc.unitmesh.devti.language.run.flow.DevInsProcessProcessor.process(DevInsProcessProcessor.kt:61)
@phodal
Copy link
Member

phodal commented Apr 10, 2024

我测试了一下本地是可以的,看一下你的插件更新了没有。

@ymli0215
Copy link
Contributor Author

有重新下載安裝 https://github.com/unit-mesh/auto-dev/releases/tag/v1.8.1

測試還是一樣的問題,customer_agent回傳下方內容

```devin

/write:len/test.java#L1-L12

\`\`\`java
public class Controller {
    public void method() {
        System.out.println("Hello, World!666");
    }
}
\`\`\`

`` `

如果檔案存在,雖然會寫入檔案
但是會跳出chat panel
image

如果檔案不存在,就會報錯

com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: Read access is allowed from inside read-action (see Application.runReadAction()); see https://jb.gg/ij-platform-threading for details
Current thread: Thread[DefaultDispatcher-worker-1,6,main] 1723949919 (EventQueue.isDispatchThread()=false)
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,main] 863239784
	at com.intellij.util.concurrency.ThreadingAssertions.createThreadAccessException(ThreadingAssertions.java:149)
	at com.intellij.util.concurrency.ThreadingAssertions.softAssertReadAccess(ThreadingAssertions.java:107)
	at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1012)
	at com.intellij.psi.impl.source.PsiFileImpl.assertReadAccessAllowed(PsiFileImpl.java:182)
	at com.intellij.psi.impl.source.PsiFileImpl.loadTreeElement(PsiFileImpl.java:186)
	at com.intellij.psi.impl.source.PsiFileImpl.getTreeElement(PsiFileImpl.java:109)
	at com.intellij.psi.impl.source.PsiFileImpl.calcTreeElement(PsiFileImpl.java:727)
	at com.intellij.psi.impl.source.PsiFileImpl.getNode(PsiFileImpl.java:927)
	at com.intellij.psi.impl.PsiFileFactoryImpl.trySetupPsiForFile(PsiFileFactoryImpl.java:110)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:74)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:59)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:53)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:47)
	at cc.unitmesh.devti.language.psi.DevInFile$Companion.fromString(DevInFile.kt:28)
	at cc.unitmesh.devti.language.run.flow.DevInsProcessProcessor.process(DevInsProcessProcessor.kt:61)
	at cc.unitmesh.devti.language.run.DevInsProgramRunner$doExecute$1.runFinish(DevInsProgramRunner.kt:37)
	at com.intellij.util.messages.impl.MessageBusImplKt.invokeMethod(MessageBusImpl.kt:700)
	at com.intellij.util.messages.impl.MessageBusImplKt.invokeListener(MessageBusImpl.kt:660)
	at com.intellij.util.messages.impl.MessageBusImplKt.deliverMessage(MessageBusImpl.kt:423)
	at com.intellij.util.messages.impl.MessageBusImplKt.pumpWaiting(MessageBusImpl.kt:402)
	at com.intellij.util.messages.impl.MessageBusImplKt.access$pumpWaiting(MessageBusImpl.kt:1)
	at com.intellij.util.messages.impl.MessagePublisher.invoke(MessageBusImpl.kt:461)
	at jdk.proxy15/jdk.proxy15.$Proxy232.runFinish(Unknown Source)
	at cc.unitmesh.devti.language.run.DevInsRunConfigurationProfileState$execute$1.processTerminated(DevInsRunConfigurationProfileState.kt:57)
	at com.intellij.execution.process.ProcessHandler$2.processTerminated(ProcessHandler.java:259)
	at com.intellij.execution.process.ProcessHandler.lambda$notifyTerminated$2(ProcessHandler.java:204)
	at com.intellij.execution.process.ProcessHandler$TasksRunner.execute(ProcessHandler.java:322)
	at com.intellij.execution.process.ProcessHandler.notifyTerminated(ProcessHandler.java:187)
	at com.intellij.execution.process.ProcessHandler.notifyProcessTerminated(ProcessHandler.java:183)
	at cc.unitmesh.devti.language.run.DevInsProcessHandler.detachProcessImpl(DevInsProcessHandler.kt:9)
	at com.intellij.execution.process.ProcessHandler.lambda$detachProcess$1(ProcessHandler.java:140)
	at com.intellij.execution.process.ProcessHandler$TasksRunner.execute(ProcessHandler.java:322)
	at com.intellij.execution.process.ProcessHandler.detachProcess(ProcessHandler.java:137)
	at cc.unitmesh.devti.language.run.DevInsRunConfigurationProfileState$agentRun$1$1.invokeSuspend(DevInsRunConfigurationProfileState.kt:152)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)

@phodal
Copy link
Member

phodal commented Apr 10, 2024

奇怪,你用的是什么版本 => Intellij IDEA 版本?

@ymli0215
Copy link
Contributor Author

IntelliJ IDEA 2023.3.6 Build #IU-233.15026.9

還是請問你用的是啥版本??

@phodal
Copy link
Member

phodal commented Apr 10, 2024

对,我这边测试完,好像还行。明天我试试用 233.3.6 的版本

IntelliJ IDEA 2024.1 (Ultimate Edition)
Build #IU-241.14494.240, built on March 28, 2024

@ymli0215
Copy link
Contributor Author

回報一下,剛剛下載IntelliJ IDEA 2024.1 Build #IU-241.14494.240 來測試

還是一樣的問題,透過custom_agent返回 /write 無法產生新檔案,並且要透過 `` ` devin ``` 包起來才能寫入

@phodal
Copy link
Member

phodal commented Apr 10, 2024

哦,哦,之前理解错了,agent 里只有返回 devin 代码块才能执行:https://ide.unitmesh.cc/devins/orchestration.html

相当于是一种额外执行的规则。

@phodal
Copy link
Member

phodal commented Apr 10, 2024

还有一种方式可以适应你的需求,在自定义 AI Agent 中新增:responseAction 为 DevIns,这样默认返回的就是可执行。

 {
   "name": "Internal API Market",
   "url": "http://127.0.0.1:8765/api/agent/api-market",
   "responseAction": "DevIns"
 }

@ymli0215
Copy link
Contributor Author

"responseAction": "DevIns" <- 之前有試過這個參數,但是會出現圖中的錯誤
image

忽略它直接執行,會變成不能呼叫custom agent

@phodal
Copy link
Member

phodal commented Apr 10, 2024

@ymli0215 这个功能还不支持,如果需要的话,可以加

@ymli0215
Copy link
Contributor Author

responseAction 增加 DevIns 我後面再來許願

想要先處理好 agent 回應可以 /write
現在問題就是 #144 (comment) 這邊所提到的情況

@phodal
Copy link
Member

phodal commented Apr 11, 2024

@ymli0215 我刚加完了。因为默认会联系对话,所以还是建议放在 ```devin 代码块中。

@ymli0215
Copy link
Contributor Author

但是目前版本
我agent 回傳下方內容,他還是會聯繫對話,跳出chat來喔

`` `devin

/write:test.java#L1-L12

\`\`\`java
public class Controller {
    public void method() {
        System.out.println("Hello, World!666");
    }
}
\`\`\`

`` `

@phodal
Copy link
Member

phodal commented Apr 11, 2024

@ymli0215 现在好像不能复现:

图片

@ymli0215
Copy link
Contributor Author

我整理一下第一個狀況
稍早已經安裝最新版本,支援DevIns @ IntelliJ IDEA 2023.3.6 Build #IU-233.15026.9

image

現在agent會回傳

`` `devin <- should be ```

/write:test.java#L1-L12

\`\`\`java
public class Controller {
    public void method() {
        System.out.println("Hello, World!666");
    }
}
\`\`\`
`` `  <- should be ```

test.java有存在,可以正常寫入,但是會跳出chat panel以及報錯
image

image

error log

com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: Read access is allowed from inside read-action (see Application.runReadAction()); see https://jb.gg/ij-platform-threading for details
Current thread: Thread[DefaultDispatcher-worker-9,6,main] 1987186713 (EventQueue.isDispatchThread()=false)
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,main] 145111283
	at com.intellij.util.concurrency.ThreadingAssertions.createThreadAccessException(ThreadingAssertions.java:149)
	at com.intellij.util.concurrency.ThreadingAssertions.softAssertReadAccess(ThreadingAssertions.java:107)
	at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:1012)
	at com.intellij.psi.impl.source.PsiFileImpl.assertReadAccessAllowed(PsiFileImpl.java:182)
	at com.intellij.psi.impl.source.PsiFileImpl.loadTreeElement(PsiFileImpl.java:186)
	at com.intellij.psi.impl.source.PsiFileImpl.getTreeElement(PsiFileImpl.java:109)
	at com.intellij.psi.impl.source.PsiFileImpl.calcTreeElement(PsiFileImpl.java:727)
	at com.intellij.psi.impl.source.PsiFileImpl.getNode(PsiFileImpl.java:927)
	at com.intellij.psi.impl.PsiFileFactoryImpl.trySetupPsiForFile(PsiFileFactoryImpl.java:110)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:74)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:59)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:53)
	at com.intellij.psi.impl.PsiFileFactoryImpl.createFileFromText(PsiFileFactoryImpl.java:47)
	at cc.unitmesh.devti.language.psi.DevInFile$Companion.fromString(DevInFile.kt:28)

@phodal
Copy link
Member

phodal commented Apr 11, 2024

如果返回的类型是 DevIns 的话,需要返回 /write 相关的部分就可以了。这个问题我来修一下,应该是和版本有关,create 的时候会有问题。

@phodal
Copy link
Member

phodal commented Apr 11, 2024

CI 上 https://github.com/unit-mesh/auto-dev/actions/runs/8642911598 可以下载到最新版本。

@ymli0215
Copy link
Contributor Author

回報測試

不加入`` `devin 可以如預期寫入內容到已存在檔案

那目前剩下最後一個問題,就是希望agent回傳的/write 可以建立新檔案 ( 可以建立新檔案是在.devin檔案中執行)
因為也沒有錯誤,沒辦法提供log

@phodal
Copy link
Member

phodal commented Apr 11, 2024

10 分钟前的,新版本也不行,理论上返回的是 DevIn 应该也可以创建新档案了?

@ymli0215
Copy link
Contributor Author

怕我自己沒安裝好,再次重新下載安裝,問題還是一樣的

我覺得會不會是agent回去的處理,跑得跟 .devin不同?? 因此沒有建立出新檔案??

phodal added a commit that referenced this issue Apr 11, 2024
@phodal
Copy link
Member

phodal commented Apr 11, 2024

不好意思啊,之前处理的时候,有一个异步的数据接收没处理好。所以,拿到的 msg 是空的,就不执行了:

CustomAgentResponseAction.DevIns -> {
ui.addMessage(AutoDevBundle.message("autodev.loading"))
val msg: String = runBlocking {
ui.updateMessage(response)
}
llmProvider.appendLocalMessage(msg, ChatRole.Assistant)
ui.hiddenProgressBar()
ui.updateUI()
devInCode = msg
}
}

等 build 跑完应该 OK 了

@ymli0215
Copy link
Contributor Author

我現在抓了新版,233 241都碰到一樣的問題,就是原本可以的都不行了,感覺就是回到我最初的問題

我回去整理一下,會拿之前幾個版本來測試看看,看看到底狀況是甚麼
確認後再來回報

@phodal
Copy link
Member

phodal commented Apr 11, 2024

要不重开一个新的? issue ?

@ymli0215
Copy link
Contributor Author

已建立issue 這邊要close嗎?

@phodal phodal closed this as completed Apr 11, 2024
@phodal
Copy link
Member

phodal commented Apr 11, 2024

move to #146

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants