summaryrefslogtreecommitdiffstats
path: root/src/client/qianwen.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-04-24 16:12:38 +0800
committerGitHub <noreply@github.com>2024-04-24 16:12:38 +0800
commita17f349daa0609402c51205929b9f2b32f6fb1bb (patch)
tree380dd9c158f8d9278355634a8d474df3a90f8d25 /src/client/qianwen.rs
parent040c48b9b392e3329d3f1de8eeb1b8773129773c (diff)
downloadaichat-a17f349daa0609402c51205929b9f2b32f6fb1bb.tar.gz
feat: support customizing `top_p` parameter (#434)
Diffstat (limited to 'src/client/qianwen.rs')
-rw-r--r--src/client/qianwen.rs53
1 files changed, 24 insertions, 29 deletions
diff --git a/src/client/qianwen.rs b/src/client/qianwen.rs
index fb97964..c5a72e0 100644
--- a/src/client/qianwen.rs
+++ b/src/client/qianwen.rs
@@ -130,7 +130,6 @@ async fn send_message_streaming(
is_vl: bool,
) -> Result<()> {
let mut es = builder.eventsource()?;
- let mut offset = 0;
while let Some(event) = es.next().await {
match event {
@@ -139,12 +138,10 @@ async fn send_message_streaming(
let data: Value = serde_json::from_str(&message.data)?;
catch_error(&data)?;
if is_vl {
- let text =
- data["output"]["choices"][0]["message"]["content"][0]["text"].as_str();
- if let Some(text) = text {
- let text = &text[offset..];
+ if let Some(text) =
+ data["output"]["choices"][0]["message"]["content"][0]["text"].as_str()
+ {
handler.text(text)?;
- offset += text.len();
}
} else if let Some(text) = data["output"]["text"].as_str() {
handler.text(text)?;
@@ -169,11 +166,12 @@ fn build_body(data: SendData, model: &Model, is_vl: bool) -> Result<(Value, bool
let SendData {
messages,
temperature,
+ top_p,
stream,
} = data;
let mut has_upload = false;
- let (input, parameters) = if is_vl {
+ let input = if is_vl {
let messages: Vec<Value> = messages
.into_iter()
.map(|message| {
@@ -199,40 +197,37 @@ fn build_body(data: SendData, model: &Model, is_vl: bool) -> Result<(Value, bool
})
.collect();
- let input = json!({
+ json!({
"messages": messages,
- });
-
- let mut parameters = json!({});
- if let Some(v) = temperature {
- parameters["temperature"] = v.into();
- }
- (input, parameters)
+ })
} else {
- let input = json!({
+ json!({
"messages": messages,
- });
+ })
+ };
- let mut parameters = json!({});
- if stream {
- parameters["incremental_output"] = true.into();
- }
+ let mut parameters = json!({});
+ if stream {
+ parameters["incremental_output"] = true.into();
+ }
- if let Some(max_tokens) = model.max_output_tokens {
- parameters["max_tokens"] = max_tokens.into();
- }
+ if let Some(max_tokens) = model.max_output_tokens {
+ parameters["max_tokens"] = max_tokens.into();
+ }
- if let Some(v) = temperature {
- parameters["temperature"] = v.into();
- }
- (input, parameters)
- };
+ if let Some(temperature) = temperature {
+ parameters["temperature"] = temperature.into();
+ }
+ if let Some(top_p) = top_p {
+ parameters["top_p"] = top_p.into();
+ }
let body = json!({
"model": &model.name,
"input": input,
"parameters": parameters
});
+
Ok((body, has_upload))
}