1+ const express = require ( 'express' ) ;
2+ const { BedrockChat } = require ( "@langchain/community/chat_models/bedrock" ) ;
3+ const { ChatPromptTemplate } = require ( "@langchain/core/prompts" ) ;
4+ const traceloop = require ( "@traceloop/node-server-sdk" )
5+ const logger = require ( 'pino' ) ( )
6+
7+ const app = express ( ) ;
8+ app . use ( express . json ( ) ) ;
9+ const PORT = parseInt ( process . env . SAMPLE_APP_PORT || '8000' , 10 ) ;
10+
11+ const llm = new BedrockChat ( {
12+ model : "anthropic.claude-3-sonnet-20240229-v1:0" ,
13+ region : "us-east-1" ,
14+ credentials : {
15+ accessKeyId : process . env . BEDROCK_AWS_ACCESS_KEY_ID ,
16+ secretAccessKey : process . env . BEDROCK_AWS_SECRET_ACCESS_KEY ,
17+ } ,
18+ temperature : 0.7 ,
19+ } ) ;
20+
21+ const prompt = ChatPromptTemplate . fromMessages ( [
22+ [
23+ "system" ,
24+ "You are a helpful assistant. Provide a helpful response to the following user input." ,
25+ ] ,
26+ [ "human" , "{input}" ] ,
27+ ] ) ;
28+
29+ const chain = prompt . pipe ( llm ) ;
30+
31+ app . get ( '/health' , ( req , res ) => {
32+ res . json ( { status : 'healthy' } ) ;
33+ } ) ;
34+
35+ app . post ( '/ai-chat' , async ( req , res ) => {
36+ const { message } = req . body ;
37+
38+ if ( ! message ) {
39+ return res . status ( 400 ) . json ( { error : 'Message is required' } ) ;
40+ }
41+
42+ try {
43+ logger . info ( `Question asked: ${ message } ` ) ;
44+
45+ const response = await traceloop . withWorkflow ( { name : "sample_chat" } , ( ) => {
46+ return traceloop . withTask ( { name : "parent_task" } , ( ) => {
47+ return chain . invoke ( {
48+ input_language : "English" ,
49+ output_language : "English" ,
50+ input : message ,
51+ } ) ;
52+ } ) ;
53+ } ) ;
54+
55+ res . json ( { response : response . content } ) ;
56+ } catch ( error ) {
57+ logger . error ( `Error processing request: ${ error . message } ` ) ;
58+ res . status ( 500 ) . json ( { error : 'Internal server error' } ) ;
59+ }
60+ } ) ;
61+
62+ app . listen ( PORT , ( ) => {
63+ logger . info ( `GenAI service listening on port ${ PORT } ` ) ;
64+ } ) ;
0 commit comments