Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,10 @@
import com.baidubce.appbuilder.base.exception.AppBuilderServerException;
import com.baidubce.appbuilder.base.utils.iterator.StreamIterator;
import com.baidubce.appbuilder.base.utils.json.JsonUtils;

import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.FileHandler;
import java.util.logging.Logger;

import org.apache.hc.client5.http.classic.methods.HttpDelete;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.classic.methods.HttpDelete;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
Expand All @@ -31,6 +19,17 @@
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;

import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class HttpClient {
public String SecretKey;
public String Gateway;
Expand Down Expand Up @@ -169,11 +168,11 @@ public ClassicHttpRequest createGetRequestV2(String url, Map<String, Object> map
return httpGet;
}

public ClassicHttpRequest createDeleteRequestV2(String url, Map<String, Object> map) {
public ClassicHttpRequest createDeleteRequestV2(String url, Map<String, Object> map) {
// 处理查询参数
String urlParams = toQueryString(map);
// 如果 URL 已经包含 '?', 不需要再添加
String requestURL = GatewayV2 + ConsoleOpenAPIPrefix + ConsoleOpenAPIVersion + url
String requestURL = GatewayV2 + ConsoleOpenAPIPrefix + ConsoleOpenAPIVersion + url
+ (url.contains("?") ? "&" : "?") + urlParams;

LOGGER.log(Level.FINE, "requestURL: " + requestURL);
Expand Down Expand Up @@ -222,10 +221,10 @@ public <T> HttpResponse<T> execute(ClassicHttpRequest request, Type bodyType)
});
if (httpResponse.getCode() != 200) {
String errorMessage = String.format(
"Error after processing response with code %d for request ID: %s, message: %s",
httpResponse.getCode(),
httpResponse.getRequestId(),
httpResponse.getMessage()
"Error after processing response with code %d for request ID: %s, message: %s",
httpResponse.getCode(),
httpResponse.getRequestId(),
httpResponse.getMessage()
);
LOGGER.log(Level.SEVERE, errorMessage);
throw new AppBuilderServerException(httpResponse.getRequestId(), httpResponse.getCode(),
Expand Down Expand Up @@ -256,7 +255,7 @@ public <T> HttpResponse<StreamIterator<T>> executeSSE(ClassicHttpRequest request
}
return new HttpResponse<StreamIterator<T>>().setCode(resp.getCode())
.setMessage(resp.getReasonPhrase()).setRequestId(requestId).setHeaders(headers)
.setBody(new StreamIterator<>(resp, bodyType));
.setBody(new StreamIterator<>(resp, bodyType, (HttpUriRequestBase) request));
}

private String toQueryString(Map<String, Object> map) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.baidubce.appbuilder.base.utils.iterator;

import com.baidubce.appbuilder.base.utils.json.JsonUtils;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;

import java.io.BufferedReader;
Expand All @@ -14,12 +15,14 @@ public class StreamIterator<T> implements Iterator<T>, AutoCloseable {
private final CloseableHttpResponse resp;
private final BufferedReader reader;
private final Type bodyType;
private final HttpUriRequestBase request;
private String nextLine;

public StreamIterator(CloseableHttpResponse resp, Type type) throws IOException {
public StreamIterator(CloseableHttpResponse resp, Type type, HttpUriRequestBase request) throws IOException {
this.resp = resp;
this.reader = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
this.bodyType = type;
this.request = request;
}

@Override
Expand Down Expand Up @@ -57,6 +60,9 @@ public T next() {

@Override
public void close() {
if (request != null) {
request.abort();
}
try {
if (reader != null) {
reader.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,4 +347,47 @@ public void AppBuilderClientRunCustomMetadataTest() throws IOException, AppBuild
System.out.println(result.getAnswer());
}
}

@Test
public void AppBuilderClientClose()throws IOException, AppBuilderServerException{

String appId = "8badfd05-5e95-4115-9b21-4c86137f1fb9";

String text = "你是一位顶尖的跨学科专家,任务是解决一个高度复杂、信息不完整且具有现实模糊性的问题。请遵循以下原则进行深度、严谨、分阶段的思考:\n" +
"不要急于给出结论。首先识别问题中的关键变量、隐含假设、潜在矛盾与信息缺口。\n" +
"分阶段推理:\n" +
"阶段一:解构问题,列出所有可能的解释框架(如经济学、系统论、博弈论、伦理学等);\n" +
"阶段二:为每个框架构建逻辑链条,评估其适用性与局限性;\n" +
"阶段三:整合多视角,识别交叉点与冲突点;\n" +
"阶段四:提出一个稳健的综合方案,并明确其前提条件与风险边界。\n" +
"主动质疑自身推理:在每一步,问自己:“这个假设是否可靠?是否有反例?是否有更底层的机制?”\n" +
"量化不确定性:对关键判断标注置信度(如高/中/低),并说明依据。\n" +
"最终输出必须包含:\n" +
"核心洞见(1–2 句)\n" +
"完整推理路径(分步骤,带编号)\n" +
"未解决问题与进一步研究建议\n" +
"对初始问题的重新定义(如果发现原问题表述有缺陷)\n" +
"现在,请针对以下问题展开深度思考:在全球供应链高度脆弱的背景下,一家中国新能源车企应如何重构其电池原材料采购策略,以同时满足成本控制、地缘政治风险规避、ESG 合规与技术迭代加速四大目标?";
AppBuilderClient builder = new AppBuilderClient(appId);
String conversationId = builder.createConversation();
AppBuilderClientIterator itor = builder.run(text, conversationId, new String[] {}, true);
StringBuilder answer = new StringBuilder();
int a=1;
while (itor.hasNext()) {
if (a==50) {
long start = System.currentTimeMillis();
itor.close();
long duration = System.currentTimeMillis() - start;
System.out.println("duration: " + duration + "ms");
break;
}
AppBuilderClientResult response = itor.next();
answer.append(response.getAnswer());

a++;
}
System.out.println(answer);
}


}
Loading