Integrate duohub with AWS Lambda functions
import { Handler } from "aws-lambda"; import axios from "axios"; interface LambdaEvent { query: string; memoryID?: string; } interface MemoryRetrieverResponse { payload: string; facts: Array<{ text: string; relevance: number; }>; } export const handler: Handler<LambdaEvent, LambdaResponse> = async (event) => { try { const { query, memoryID } = event; const params = new URLSearchParams({ query, ...(memoryID && { memoryID }), assisted: "true", facts: "true", }); const response = await axios.get<MemoryRetrieverResponse>( `https://api.duohub.ai/memory/?${params.toString()}`, { headers: { "X-API-KEY": process.env.API_KEY as string, "Content-Type": "application/json", }, } ); return { success: true, message: "Query executed successfully.", answer: response.data.payload, facts: response.data.facts, }; } catch (err) { console.error("Error querying memory retriever:", err); return { success: false, message: `Error: ${err instanceof Error ? err.message : String(err)}`, answer: "", facts: [], }; } };
API_KEY=your-duohub-api-key
{ "dependencies": { "aws-lambda": "^1.0.7", "axios": "^1.7.7" } }
serverless.yml
service: duohub-memory-service provider: name: aws runtime: nodejs18.x environment: API_KEY: ${env:API_KEY} functions: memoryQuery: handler: index.handler events: - http: path: query method: post
serverless deploy
tsc
zip -r function.zip dist/ node_modules/
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }
{ "query": string, // Required: Your query "memoryID": string // Optional: Specific memory ID }
{ "success": boolean, "message": string, "answer": string, "facts": Array<{ "text": string, "relevance": number }> }
curl -X POST https://your-lambda-url/query \ -H "Content-Type: application/json" \ -d '{"query": "your query", "memoryID": "optional-memory-id"}'