mirror of
https://github.com/geoffsee/open-gsio.git
synced 2025-09-08 22:56:46 +00:00

The `FileUploadStore` and all file upload features were removed, simplifying the chat interface. This change eliminates unused code, including file handling logic, attachment management, and UI elements, streamlining the application.
101 lines
2.3 KiB
TypeScript
101 lines
2.3 KiB
TypeScript
import Anthropic from "@anthropic-ai/sdk";
|
|
import { OpenAI } from "openai";
|
|
import {
|
|
_NotCustomized,
|
|
ISimpleType,
|
|
ModelPropertiesDeclarationToProperties,
|
|
ModelSnapshotType2,
|
|
UnionStringArray,
|
|
} from "mobx-state-tree";
|
|
import ChatSdk from "../chat-sdk";
|
|
|
|
export class ClaudeChatSdk {
|
|
private static async streamClaudeResponse(
|
|
messages: any[],
|
|
param: {
|
|
model: string;
|
|
maxTokens: number | unknown | undefined;
|
|
anthropic: Anthropic;
|
|
},
|
|
dataCallback: (data: any) => void,
|
|
) {
|
|
const claudeStream = await param.anthropic.messages.create({
|
|
stream: true,
|
|
model: param.model,
|
|
max_tokens: param.maxTokens,
|
|
messages: messages,
|
|
});
|
|
|
|
for await (const chunk of claudeStream) {
|
|
if (chunk.type === "message_stop") {
|
|
dataCallback({
|
|
type: "chat",
|
|
data: {
|
|
choices: [
|
|
{
|
|
delta: { content: "" },
|
|
logprobs: null,
|
|
finish_reason: "stop",
|
|
},
|
|
],
|
|
},
|
|
});
|
|
break;
|
|
}
|
|
dataCallback({ type: "chat", data: chunk });
|
|
}
|
|
}
|
|
static async handleClaudeStream(
|
|
param: {
|
|
openai: OpenAI;
|
|
systemPrompt: any;
|
|
preprocessedContext: ModelSnapshotType2<
|
|
ModelPropertiesDeclarationToProperties<{
|
|
role: ISimpleType<UnionStringArray<string[]>>;
|
|
content: ISimpleType<unknown>;
|
|
}>,
|
|
_NotCustomized
|
|
>;
|
|
maxTokens: unknown | number | undefined;
|
|
messages: any;
|
|
model: string;
|
|
env: Env;
|
|
},
|
|
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 anthropic = new Anthropic({
|
|
apiKey: env.ANTHROPIC_API_KEY,
|
|
});
|
|
|
|
return ClaudeChatSdk.streamClaudeResponse(
|
|
safeMessages,
|
|
{
|
|
model: param.model,
|
|
maxTokens: param.maxTokens,
|
|
anthropic: anthropic,
|
|
},
|
|
dataCallback,
|
|
);
|
|
}
|
|
}
|