retort-js
Version:
Intuitive, production-ready prompt chaining in Javascript
56 lines (55 loc) • 1.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.claudeChatCompletion = void 0;
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
async function* claudeChatCompletion(settings, messagePromises) {
const anthropic = new sdk_1.default({
apiKey: process.env['ANTHROPIC_API_KEY'],
});
let system = undefined;
let messages = [];
for await (let m of messagePromises) {
messages.push({
content: m.content,
role: m.role === "assistant" ? "assistant" : "user",
});
}
if (messages[0]?.role === "user" && messages[0].content.startsWith("system:")) {
system = messages[0].content.substring(7);
messages = messages.slice(1);
}
const commonOptions = {
messages,
max_tokens: settings.maxTokens ?? 4096,
temperature: settings.temperature,
top_p: settings.topP,
model: settings.model.toString(),
system,
};
// Only stream if explicitly set to true
if (settings.stream === true) {
const stream = anthropic.messages.stream(commonOptions);
let content = "";
for await (const chunk of stream) {
if (chunk.type === "content_block_delta") {
const contentDelta = chunk.delta.text || "";
content += contentDelta;
yield { content, contentDelta };
}
}
}
else {
const response = await anthropic.messages.create(commonOptions);
if (response.content[0]) {
const content = response.content[0].text;
yield { content, contentDelta: content };
}
else {
throw new Error("Response content is empty.");
}
}
}
exports.claudeChatCompletion = claudeChatCompletion;