Skip to content

Commit

Permalink
fix: fix gemini pro streaming api duplicated issue (ChatGPTNextWeb#3721)
Browse files Browse the repository at this point in the history
* fix: streaming duplicated issue

* chore: remove debug logs

* chore: add types defination
  • Loading branch information
fredliang44 authored Dec 31, 2023
1 parent eade013 commit a80502f
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions app/client/platforms/google.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { prettyObject } from "@/app/utils/format";
import { getClientConfig } from "@/app/config/client";
import Locale from "../../locales";
import { getServerSideConfig } from "@/app/config/server";
import de from "@/app/locales/de";
export class GeminiProApi implements LLMApi {
extractMessage(res: any) {
console.log("[Response] gemini-pro response: ", res);
Expand Down Expand Up @@ -87,9 +88,11 @@ export class GeminiProApi implements LLMApi {
"streamGenerateContent",
);
let finished = false;

let existingTexts: string[] = [];
const finish = () => {
finished = true;
options.onFinish(responseText + remainText);
options.onFinish(existingTexts.join(""));
};

// animate response to make it looks smooth
Expand Down Expand Up @@ -134,11 +137,26 @@ export class GeminiProApi implements LLMApi {

try {
let data = JSON.parse(ensureProperEnding(partialData));
console.log(data);
let fetchText = apiClient.extractMessage(data[data.length - 1]);
console.log("[Response Animation] fetchText: ", fetchText);
remainText += fetchText;

const textArray = data.reduce(
(acc: string[], item: { candidates: any[] }) => {
const texts = item.candidates.map((candidate) =>
candidate.content.parts
.map((part: { text: any }) => part.text)
.join(""),
);
return acc.concat(texts);
},
[],
);

if (textArray.length > existingTexts.length) {
const deltaArray = textArray.slice(existingTexts.length);
existingTexts = textArray;
remainText += deltaArray.join("");
}
} catch (error) {
// console.log("[Response Animation] error: ", error,partialData);
// skip error message when parsing json
}

Expand Down

0 comments on commit a80502f

Please sign in to comment.