Bablu Kumar Singh
Back to Projects

AgentCore

TypeScriptNode.jsZodOpenAI APIAnthropic APIGemini APINext.js
AgentCore

The Problem

Every LLM provider ships its own SDK, message format, and streaming API, so switching models, or falling back to a second provider when one is rate-limited, usually means rewriting the integration layer.

Architecture & Topology

A TypeScript SDK with decoupled primitives: universal model adapters normalize OpenAI, Anthropic, Gemini, Ollama, DeepSeek, Mistral, and Grok into one request/response shape, sitting behind an AI gateway that handles routing, retries, and fallback. A memory engine manages context windows (sliding window, token budget, summary) with pluggable persistence and Mem0/vector adapters, and a guardrails layer validates schemas and filters input/output before anything reaches a tool or the caller.

Engineering Challenges

Normalizing streaming responses across providers that do not agree on chunk shape or even what counts as a tool-call event, while keeping the public API small enough that swapping providers is genuinely a one-line change.

Applied Solutions

Built a standardized adapter interface each provider implements, a token-budget-aware memory manager that summarizes or trims history before it silently exceeds a context window, and a guardrails engine that runs the same policy checks regardless of which model produced the output.

Results & Benchmarks

Published as @bablusingh-dev/agentcore on npm with a live docs site and interactive pipeline simulator at agentcore.bablusingh.in.

Performance Tuning

Gateway-level fallback and rate limiting so one slow or rate-limited provider does not take the whole pipeline down; memory strategies keep prompt size, and therefore per-request cost and latency, predictable.

Lessons Learned

Most of the real engineering in an agent framework is not the model call itself, it is what happens before and after it: validating what goes in, deciding what history survives the context window, and catching a malformed tool call before it reaches your code.