mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-30 20:50:34 +00:00
for README.md
This commit is contained in:
parent
e4caa7a856
commit
30f9e9c782
6 changed files with 815 additions and 26 deletions
|
|
@ -16,7 +16,12 @@ import com.alibaba.qwen.code.cli.transport.process.ProcessTransport;
|
|||
import com.alibaba.qwen.code.cli.utils.MyConcurrentUtils;
|
||||
import com.alibaba.qwen.code.cli.utils.Timeout;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class QwenCodeCli {
|
||||
private static final Logger log = LoggerFactory.getLogger(QwenCodeCli.class);
|
||||
|
||||
public static List<String> simpleQuery(String prompt) {
|
||||
final List<String> response = new ArrayList<>();
|
||||
MyConcurrentUtils.runAndWait(() -> simpleQuery(prompt, response::add), Timeout.TIMEOUT_30_MINUTES);
|
||||
|
|
@ -24,7 +29,7 @@ public class QwenCodeCli {
|
|||
}
|
||||
|
||||
public static void simpleQuery(String prompt, Consumer<String> messageConsumer) {
|
||||
Session session = newSessionWithProcessTransport(new TransportOptions());
|
||||
Session session = newSession(new TransportOptions());
|
||||
try {
|
||||
session.sendPrompt(prompt, new SessionEventSimpleConsumers() {
|
||||
@Override
|
||||
|
|
@ -42,16 +47,20 @@ public class QwenCodeCli {
|
|||
}.setDefaultPermissionOperation(Operation.allow));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("sendPrompt error!", e);
|
||||
}
|
||||
|
||||
try {
|
||||
session.close();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("close Session error!", e);
|
||||
} finally {
|
||||
try {
|
||||
session.close();
|
||||
} catch (Exception e) {
|
||||
log.error("close session error!", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Session newSessionWithProcessTransport(TransportOptions transportOptions) {
|
||||
public static Session newSession() {
|
||||
return newSession(new TransportOptions());
|
||||
}
|
||||
|
||||
public static Session newSession(TransportOptions transportOptions) {
|
||||
Transport transport;
|
||||
try {
|
||||
transport = new ProcessTransport(transportOptions);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,11 @@ public class ThreadPoolConfig {
|
|||
ThreadPoolConfig.executorSupplier = executorSupplier;
|
||||
}
|
||||
|
||||
public static ExecutorService getExecutor() {
|
||||
public static ThreadPoolExecutor getDefaultExecutor() {
|
||||
return defaultExecutor;
|
||||
}
|
||||
|
||||
static ExecutorService getExecutor() {
|
||||
return Optional.ofNullable(executorSupplier).map(s -> {
|
||||
try {
|
||||
return s.get();
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ package com.alibaba.qwen.code.cli.session;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.qwen.code.cli.QwenCodeCli;
|
||||
import com.alibaba.qwen.code.cli.protocol.data.AssistantContent;
|
||||
import com.alibaba.qwen.code.cli.protocol.data.PermissionMode;
|
||||
import com.alibaba.qwen.code.cli.protocol.data.behavior.Allow;
|
||||
|
|
@ -19,9 +21,8 @@ import com.alibaba.qwen.code.cli.session.event.SessionEventConsumers;
|
|||
import com.alibaba.qwen.code.cli.session.event.SessionEventSimpleConsumers;
|
||||
import com.alibaba.qwen.code.cli.session.exception.SessionControlException;
|
||||
import com.alibaba.qwen.code.cli.session.exception.SessionSendPromptException;
|
||||
import com.alibaba.qwen.code.cli.transport.Transport;
|
||||
import com.alibaba.qwen.code.cli.transport.TransportOptions;
|
||||
import com.alibaba.qwen.code.cli.transport.process.ProcessTransport;
|
||||
import com.alibaba.qwen.code.cli.utils.Timeout;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -34,8 +35,7 @@ class SessionTest {
|
|||
|
||||
@Test
|
||||
void partialSendPromptSuccessfully() throws IOException, SessionControlException, SessionSendPromptException {
|
||||
Transport transport = new ProcessTransport(new TransportOptions().setIncludePartialMessages(true));
|
||||
Session session = new Session(transport);
|
||||
Session session = QwenCodeCli.newSession(new TransportOptions().setIncludePartialMessages(true));
|
||||
session.sendPrompt("in the dir src/test/temp/, create file empty file test.touch", new SessionEventSimpleConsumers() {
|
||||
@Override
|
||||
public void onAssistantMessageIncludePartial(Session session, List<AssistantContent> assistantContents,
|
||||
|
|
@ -47,8 +47,7 @@ class SessionTest {
|
|||
|
||||
@Test
|
||||
void setPermissionModeSuccessfully() throws IOException, SessionControlException, SessionSendPromptException {
|
||||
Transport transport = new ProcessTransport();
|
||||
Session session = new Session(transport);
|
||||
Session session = QwenCodeCli.newSession(new TransportOptions());
|
||||
|
||||
log.info(session.setPermissionMode(PermissionMode.YOLO).map(s -> s ? "setPermissionMode 1 success" : "setPermissionMode 1 error")
|
||||
.orElse("setPermissionMode 1 unknown"));
|
||||
|
|
@ -74,8 +73,7 @@ class SessionTest {
|
|||
|
||||
@Test
|
||||
void sendPromptAndSetModelSuccessfully() throws IOException, SessionControlException, SessionSendPromptException {
|
||||
Transport transport = new ProcessTransport();
|
||||
Session session = new Session(transport);
|
||||
Session session = QwenCodeCli.newSession(new TransportOptions());
|
||||
|
||||
log.info(session.setModel("qwen3-coder-flash").map(s -> s ? "setModel 1 success" : "setModel 1 error").orElse("setModel 1 unknown"));
|
||||
writeSplitLine("setModel 1 end");
|
||||
|
|
@ -100,10 +98,10 @@ class SessionTest {
|
|||
|
||||
@Test
|
||||
void sendPromptAndInterruptContinueSuccessfully() throws IOException, SessionControlException, SessionSendPromptException {
|
||||
Transport transport = new ProcessTransport();
|
||||
Session session = new Session(transport);
|
||||
Session session = QwenCodeCli.newSession();
|
||||
|
||||
SessionEventConsumers sessionEventConsumers = new SessionEventSimpleConsumers() {
|
||||
|
||||
@Override
|
||||
public void onSystemMessage(Session session, SDKSystemMessage systemMessage) {
|
||||
log.info("systemMessage: {}", systemMessage);
|
||||
|
|
@ -133,7 +131,12 @@ class SessionTest {
|
|||
public void onOtherMessage(Session session, String message) {
|
||||
log.info("otherMessage: {}", message);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public Timeout onPermissionRequestTimeout(Session session) {
|
||||
return Timeout.TIMEOUT_30_MINUTES;
|
||||
}
|
||||
}.setDefaultEventTimeout(new Timeout(90L, TimeUnit.SECONDS));
|
||||
session.sendPrompt("查看下当前目录有多少个文件", sessionEventConsumers);
|
||||
writeSplitLine("prompt 1 end");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue