arcananex-synapse
Version:
Agentic AI framework
96 lines (80 loc) • 2.23 kB
text/typescript
import {
BedrockRuntimeClient,
InvokeModelCommand,
InvokeModelCommandOutput,
} from "@aws-sdk/client-bedrock-runtime";
import { config } from "dotenv";
import { getAwsCredentials } from "../utils/aws-credential";
import { NodeHttpHandler } from "@aws-sdk/node-http-handler";
config();
const MODEL_ID: string = process.env.AI_MODEL || "amazon.nova-lite-v1:0";
let inferenceConfig: InferenceConfig = {
maxTokens: 5000,
topP: 0.9,
topK: 20,
temperature: 0.7,
};
// Override inference configuration from .env if provided
if (process.env.INFERENCE_CONFIG) {
try {
inferenceConfig = JSON.parse(process.env.INFERENCE_CONFIG);
} catch (error) {
console.error("Failed to parse INFERENCE_CONFIG:", error);
}
}
/** @ts-ignore */
const runtimeClient = new BedrockRuntimeClient({
...getAwsCredentials(),
requestHandler: new NodeHttpHandler({
connectionTimeout: 3600000, // 60 minutes
socketTimeout: 3600000, // 60 minutes
}),
});
export async function invokeModel(
messages: UserMessage[],
memories: Memory[]
): Promise<InvokeModelCommandOutput> {
// Build the request payload according to the Amazon Nova Lite schema
const requestBody: RequestPayload = {
schemaVersion: "messages-v1",
system: memories,
messages,
inferenceConfig,
};
const params = {
modelId: MODEL_ID,
contentType: "application/json",
accept: "application/json",
body: JSON.stringify(requestBody),
};
try {
const command = new InvokeModelCommand(params);
return await runtimeClient.send(command);
} catch (error) {
console.error(`Something is wrong with the model invoke, ${error}`);
throw error; // Ensure a value is always returned or an error is thrown
}
}
interface InferenceConfig {
maxTokens: number;
topP: number;
topK: number;
temperature: number;
}
export interface Message {
text: string;
}
export interface UserMessage {
role: "user" | "assistant";
content: Message[];
}
interface RequestPayload {
schemaVersion: string;
system: Memory[];
messages: UserMessage[];
inferenceConfig: InferenceConfig;
}
export interface Memory {
text: string;
}
export type BedrockInvokeModelCommandOutput = InvokeModelCommandOutput;