Files
open-gsio/workers/site/providers/google.ts
geoffsee fc22278b58 Remove unused services and refactor SDK structure
Deleted outdated SDKs and services, including DocumentService and markdown-sdk. Consolidated and relocated SDKs into a unified "providers" structure to improve maintainability. Updated imports and adjusted utils naming for consistency.
2025-05-27 15:15:45 -04:00

98 lines
2.3 KiB
TypeScript

import { OpenAI } from "openai";
import ChatSdk from "../sdk/chat-sdk";
import { StreamParams } from "../services/ChatService";
export class GoogleChatSdk {
static async handleGoogleStream(
param: StreamParams,
dataCallback: (data) => void,
) {
const {
preprocessedContext,
messages,
env,
maxTokens,
systemPrompt,
model,
} = param;
const assistantPrompt = ChatSdk.buildAssistantPrompt({
maxTokens: maxTokens,
});
const safeMessages = ChatSdk.buildMessageChain(messages, {
systemPrompt: systemPrompt,
model,
assistantPrompt,
toolResults: preprocessedContext,
});
const openai = new OpenAI({
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai",
apiKey: param.env.GEMINI_API_KEY,
});
return GoogleChatSdk.streamGoogleResponse(
safeMessages,
{
model: param.model,
maxTokens: param.maxTokens,
openai: openai,
},
dataCallback,
);
}
private static async streamGoogleResponse(
messages: any[],
opts: {
model: string;
maxTokens: number | unknown | undefined;
openai: OpenAI;
},
dataCallback: (data: any) => void,
) {
const chatReq = JSON.stringify({
model: opts.model,
messages: messages,
stream: true,
});
const googleStream = await opts.openai.chat.completions.create(
JSON.parse(chatReq),
);
for await (const chunk of googleStream) {
console.log(JSON.stringify(chunk));
if (chunk.choices?.[0]?.finishReason === "stop") {
dataCallback({
type: "chat",
data: {
choices: [
{
delta: { content: chunk.choices[0].delta.content || "" },
finish_reason: "stop",
index: chunk.choices[0].index,
},
],
},
});
break;
} else {
dataCallback({
type: "chat",
data: {
choices: [
{
delta: { content: chunk.choices?.[0]?.delta?.content || "" },
finish_reason: null,
index: chunk.choices?.[0]?.index || 0,
},
],
},
});
}
}
}
}