{"version":"1.0","generatedAt":"2026-10-31T02:42:22.119Z","site":{"name":"AI Wisdom","url":"https://www.aiwisdom.dev","description":"AI Wisdom is Amit Upadhyay's engineering reference for production AI: RAG, multi-agent architecture, LLM evaluation, token economics and software design.","owner":"Amit Upadhyay","contact":"connect@aiwisdom.dev","language":"en","feeds":{"rss":"https://www.aiwisdom.dev/rss.xml","feed":"https://www.aiwisdom.dev/feed.xml","llms":"https://www.aiwisdom.dev/llms.txt"},"machineReadable":{"robots":"https://www.aiwisdom.dev/robots.txt","openapi":"https://www.aiwisdom.dev/openapi.json","embeddings":"https://www.aiwisdom.dev/api/v1/embeddings","aiVisibility":"https://www.aiwisdom.dev/ai-visibility","changelog":"https://www.aiwisdom.dev/changelog","sitemaps":["https://www.aiwisdom.dev/sitemap.xml","https://www.aiwisdom.dev/sitemap-articles.xml","https://www.aiwisdom.dev/sitemap-static.xml"]},"featuredSiteLinks":[{"name":"Start Here","url":"https://www.aiwisdom.dev/start-here","description":"A guided first path through AI Wisdom for engineers new to the platform."},{"name":"Learn","url":"https://www.aiwisdom.dev/learn","description":"Domain-based learning paths across AI engineering, architecture, backend, frontend, cloud, security, and data."},{"name":"Global AI Model Reference","url":"https://www.aiwisdom.dev/landscape","description":"A curated reference for AI models, providers, frameworks, vector databases, observability, serving, and guardrails."},{"name":"AI Architecture","url":"https://www.aiwisdom.dev/ai-architecture","description":"Canonical AI architecture concepts for production systems, RAG, evaluation, observability, and model operations."},{"name":"Glossary","url":"https://www.aiwisdom.dev/glossary","description":"Engineer-friendly definitions for AI, LLM, RAG, agents, embeddings, evaluation, and production terms."},{"name":"Patterns","url":"https://www.aiwisdom.dev/patterns","description":"Reusable production AI patterns such as semantic cache, gateway, fallback chain, and circuit breaker."},{"name":"Case Studies","url":"https://www.aiwisdom.dev/case-studies","description":"Real architecture case studies showing the options, trade-offs, decisions, and consequences."},{"name":"Changelog","url":"https://www.aiwisdom.dev/changelog","description":"Recent platform updates, reference updates, and content changes on AI Wisdom."},{"name":"FAQ","url":"https://www.aiwisdom.dev/faq","description":"Answers about using AI Wisdom: cost, where to start, the five learning modes, accuracy and freshness."}]},"latestUpdatedAt":"2026-10-15T00:00:00.000Z","counts":{"articles":165,"glossaryTerms":64,"patterns":17,"decisions":13,"domains":17},"articles":[{"type":"TechArticle","title":"Claude: Anthropic's Model Family in Practice","url":"https://www.aiwisdom.dev/articles/llm-landscape/claude","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/claude","summary":"The four Claude tiers, adaptive thinking and effort, the tool-use rules that differ from other providers, prompt caching, and where you can run it.","abstract":"The four Claude tiers, adaptive thinking and effort, the tool-use rules that differ from other providers, prompt caching, and where you can run it.","domain":"llm-landscape","tags":["Claude","Anthropic","adaptive-thinking","prompt-caching","tool-use"],"datePublished":"2026-10-13","dateModified":"2026-10-15","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"LLM Evaluation Frameworks Compared","url":"https://www.aiwisdom.dev/articles/ai-observability/evaluation-frameworks","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/evaluation-frameworks","summary":"Promptfoo, DeepEval, RAGAS, LangSmith and Phoenix compared by what each is good at, with working examples and a way to choose.","abstract":"Promptfoo, DeepEval, RAGAS, LangSmith and Phoenix compared by what each is good at, with working examples and a way to choose.","domain":"ai-observability","tags":["evaluation","Promptfoo","DeepEval","RAGAS","LangSmith"],"datePublished":"2026-10-13","dateModified":"2026-10-15","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Evals for Choosing a Model","url":"https://www.aiwisdom.dev/articles/llm-landscape/evals","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/evals","summary":"Why public benchmarks do not transfer to your workload, how to build a model-selection eval, and why cost per successful task beats price per token.","abstract":"Why public benchmarks do not transfer to your workload, how to build a model-selection eval, and why cost per successful task beats price per token.","domain":"llm-landscape","tags":["evals","model-selection","benchmarks","cost-per-task","LLM"],"datePublished":"2026-10-13","dateModified":"2026-10-15","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Managing Short-Term Memory in Agents","url":"https://www.aiwisdom.dev/articles/agentic-systems/short-term-memory","canonicalUrl":"https://www.aiwisdom.dev/articles/agentic-systems/short-term-memory","summary":"Manage the context window as working memory — what to include, summarise, or drop to keep agents coherent across long conversations.","abstract":"Manage the context window as working memory — what to include, summarise, or drop to keep agents coherent across long conversations.","domain":"agentic-systems","tags":["context-window","working-memory","summarisation","token-budget","agents"],"datePublished":"2026-05-22","dateModified":"2026-10-15","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"GPT: OpenAI's Model Family in Practice","url":"https://www.aiwisdom.dev/articles/llm-landscape/gpt-model-family","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/gpt-model-family","summary":"The GPT-6 tiers, what reasoning effort replaced, when to use the Responses API over Chat Completions, how the bill is calculated, and what is different on Azure.","abstract":"The GPT-6 tiers, what reasoning effort replaced, when to use the Responses API over Chat Completions, how the bill is calculated, and what is different on Azure.","domain":"llm-landscape","tags":["GPT-6","OpenAI","reasoning-effort","Responses-API","model-selection"],"datePublished":"2026-10-13","dateModified":"2026-10-14","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"Llama: Open-Weight Models for Production","url":"https://www.aiwisdom.dev/articles/llm-landscape/llama","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/llama","summary":"The Llama lineup and licence, serving with Ollama and vLLM, GPU memory sizing, and an honest look at when a hosted API is still the better choice.","abstract":"The Llama lineup and licence, serving with Ollama and vLLM, GPU memory sizing, and an honest look at when a hosted API is still the better choice.","domain":"llm-landscape","tags":["Llama","open-weight","self-hosting","vLLM","quantization"],"datePublished":"2026-10-13","dateModified":"2026-10-14","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Offline Evals: The Regression Suite for LLM Features","url":"https://www.aiwisdom.dev/articles/ai-observability/offline-evals","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/offline-evals","summary":"Build an evaluation dataset from real use, pick the cheapest grader that works, measure the noise floor, and turn the suite into a release gate.","abstract":"Build an evaluation dataset from real use, pick the cheapest grader that works, measure the noise floor, and turn the suite into a release gate.","domain":"ai-observability","tags":["offline-evals","regression-testing","datasets","LLM-as-judge","CI"],"datePublished":"2026-10-13","dateModified":"2026-10-14","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Hallucination Testing: Measuring What the Model Makes Up","url":"https://www.aiwisdom.dev/articles/llm-landscape/hallucination-testing","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/hallucination-testing","summary":"The three kinds of hallucination, a test set that includes questions with no answer, claim-by-claim faithfulness scoring, and what lowers the rate.","abstract":"The three kinds of hallucination, a test set that includes questions with no answer, claim-by-claim faithfulness scoring, and what lowers the rate.","domain":"llm-landscape","tags":["hallucination","faithfulness","grounding","RAG","evaluation"],"datePublished":"2026-10-13","dateModified":"2026-10-14","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Docker for Production: Multi-Stage Builds, Security, and Compose","url":"https://www.aiwisdom.dev/articles/devops-cicd/docker","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/docker","summary":"Multi-stage builds that cut image size by 80%, non-root users, read-only filesystems, health checks, and Compose patterns for local development parity.","abstract":"Multi-stage builds that cut image size by 80%, non-root users, read-only filesystems, health checks, and Compose patterns for local development parity.","domain":"devops-cicd","tags":["docker","containers","multi-stage-builds","compose","security"],"datePublished":"2026-04-20","dateModified":"2026-10-14","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Terraform Workspaces: Multi-Environment Infrastructure","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-workspaces","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-workspaces","summary":"Terraform workspaces vs separate state files, workspace-based environment promotion, and when to use workspaces vs directory-per-env.","abstract":"Terraform workspaces vs separate state files, workspace-based environment promotion, and when to use workspaces vs directory-per-env.","domain":"infrastructure-as-code","tags":["terraform","workspaces","iac","environments","infrastructure"],"datePublished":"2026-03-03","dateModified":"2026-10-14","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Long-Term Memory for AI Agents","url":"https://www.aiwisdom.dev/articles/agentic-systems/long-term-memory","canonicalUrl":"https://www.aiwisdom.dev/articles/agentic-systems/long-term-memory","summary":"Persist agent knowledge beyond the context window — vector stores, key-value caches, and structured stores for cross-session recall.","abstract":"Persist agent knowledge beyond the context window — vector stores, key-value caches, and structured stores for cross-session recall.","domain":"agentic-systems","tags":["long-term-memory","vector-store","cross-session","memory-consolidation","agents"],"datePublished":"2026-05-18","dateModified":"2026-10-13","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"CQRS in .NET Without the Cargo Cult: A Practical Guide for 2026","url":"https://www.aiwisdom.dev/articles/backend-dotnet/cqrs","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/cqrs","summary":"CQRS as a folder discipline, command/query handlers without MediatR, vertical slice architecture, and when eventual consistency is overkill.","abstract":"CQRS as a folder discipline, command/query handlers without MediatR, vertical slice architecture, and when eventual consistency is overkill.","domain":"backend-dotnet","tags":["csharp","architecture","cqrs","ddd","design-patterns","dotnet-9"],"datePublished":"2026-04-18","dateModified":"2026-10-13","readingTime":"15 min","difficulty":"advanced"},{"type":"TechArticle","title":"TypeScript Type Guards: Narrowing Without the Noise","url":"https://www.aiwisdom.dev/articles/typescript/type-guards","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/type-guards","summary":"typeof, instanceof, in, discriminated unions, custom type predicates, and assertion functions — the narrowing toolkit that keeps runtime errors out of production.","abstract":"typeof, instanceof, in, discriminated unions, custom type predicates, and assertion functions — the narrowing toolkit that keeps runtime errors out of production.","domain":"typescript","tags":["typescript","type-guards","narrowing","discriminated-unions","type-predicates"],"datePublished":"2026-04-10","dateModified":"2026-10-13","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"PostgreSQL 17/18 in 2026: MVCC, Indexes, and EF Core 9","url":"https://www.aiwisdom.dev/articles/databases/postgresql","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/postgresql","summary":"PG 17 (Sept 2024) async I/O, PG 18 (Sept 2025) features, MVCC + xmin/xmax, btree/GIN/GiST/BRIN, JSONB jsonb_path_ops, partial/functional indexes, EF Core 9 + Npgsql 9, EXPLAIN (ANALYZE, BUFFERS), VACUUM and PgBouncer pitfalls.","abstract":"PG 17 (Sept 2024) async I/O, PG 18 (Sept 2025) features, MVCC + xmin/xmax, btree/GIN/GiST/BRIN, JSONB jsonb_path_ops, partial/functional indexes, EF Core 9 + Npgsql 9, EXPLAIN (ANALYZE, BUFFERS), VACUUM and PgBouncer pitfalls.","domain":"databases","tags":["postgresql","databases","mvcc","indexes","jsonb","ef-core","csharp"],"datePublished":"2026-01-04","dateModified":"2026-10-13","readingTime":"17 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Online Evals: Production Quality Monitoring","url":"https://www.aiwisdom.dev/articles/ai-observability/online-evals","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/online-evals","summary":"Production-time evaluation — implicit user feedback, A/B testing, and real-time LLM-as-judge scoring for continuous quality monitoring after ship.","abstract":"Production-time evaluation — implicit user feedback, A/B testing, and real-time LLM-as-judge scoring for continuous quality monitoring after ship.","domain":"ai-observability","tags":["online-evals","A/B-testing","user-feedback","production-monitoring","quality-score"],"datePublished":"2026-06-09","dateModified":"2026-10-12","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Generics: Constraints, Variance, and Inference","url":"https://www.aiwisdom.dev/articles/typescript/generics-ts","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/generics-ts","summary":"Type parameters, constraints, conditional inference, and the patterns that make generics actually useful in production TypeScript.","abstract":"Type parameters, constraints, conditional inference, and the patterns that make generics actually useful in production TypeScript.","domain":"typescript","tags":["typescript","generics","type-system","constraints","inference"],"datePublished":"2026-04-06","dateModified":"2026-10-12","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"E2E Testing with Playwright: Auto-Waiting, Page Objects, and Network Interception","url":"https://www.aiwisdom.dev/articles/testing-engineering/e2e-testing-playwright","canonicalUrl":"https://www.aiwisdom.dev/articles/testing-engineering/e2e-testing-playwright","summary":"Write reliable end-to-end tests with Playwright — leverage auto-waiting, build Page Object Models, intercept network requests, and eliminate flakiness.","abstract":"Write reliable end-to-end tests with Playwright — leverage auto-waiting, build Page Object Models, intercept network requests, and eliminate flakiness.","domain":"testing-engineering","tags":["e2e-testing","playwright","cypress","page-objects","flaky-tests"],"datePublished":"2026-03-25","dateModified":"2026-10-12","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Mapped Types and Template Literals: Transforming Shapes at the Type Level","url":"https://www.aiwisdom.dev/articles/typescript/mapped-types","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/mapped-types","summary":"Mapped types, key remapping, template literal types, and combining them with conditional types to build transformation layers with zero runtime cost.","abstract":"Mapped types, key remapping, template literal types, and combining them with conditional types to build transformation layers with zero runtime cost.","domain":"typescript","tags":["typescript","mapped-types","template-literals","key-remapping","type-transforms"],"datePublished":"2026-04-16","dateModified":"2026-10-11","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Mocking Patterns: Stubs, Spies, Fakes, and When Not to Mock","url":"https://www.aiwisdom.dev/articles/testing-engineering/mocking-patterns-guide","canonicalUrl":"https://www.aiwisdom.dev/articles/testing-engineering/mocking-patterns-guide","summary":"Master test double patterns — distinguish stubs from mocks, use Vitest module mocking, implement MSW for HTTP, and avoid over-mocking that hides real bugs.","abstract":"Master test double patterns — distinguish stubs from mocks, use Vitest module mocking, implement MSW for HTTP, and avoid over-mocking that hides real bugs.","domain":"testing-engineering","tags":["mocking","stubs","spies","test-doubles","msw","vitest"],"datePublished":"2026-04-04","dateModified":"2026-10-11","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Vector Database Selection for Production RAG","url":"https://www.aiwisdom.dev/articles/databases/vector-database-selection-for-production-rag","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/vector-database-selection-for-production-rag","summary":"Cosmos DB, AI Search, Qdrant, Pinecone — benchmarks, cost, and operational complexity for production vector search.","abstract":"Cosmos DB, AI Search, Qdrant, Pinecone — benchmarks, cost, and operational complexity for production vector search.","domain":"databases","tags":["vector-db","RAG","Cosmos-DB","Pinecone","Qdrant"],"datePublished":"2026-02-11","dateModified":"2026-10-11","readingTime":"9 min","difficulty":null},{"type":"TechArticle","title":"OpenAPI 3.1 on .NET 9: Built-in Spec, Scalar UI, and Kiota Clients","url":"https://www.aiwisdom.dev/articles/api-design/openapi-spec","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/openapi-spec","summary":"Microsoft.AspNetCore.OpenApi replacing Swashbuckle, OpenAPI 3.1 with JSON Schema 2020-12, Scalar / Redoc UIs, schema + document transformers, Kiota / NSwag SDK generation, Spectral lint + oasdiff in CI.","abstract":"Microsoft.AspNetCore.OpenApi replacing Swashbuckle, OpenAPI 3.1 with JSON Schema 2020-12, Scalar / Redoc UIs, schema + document transformers, Kiota / NSwag SDK generation, Spectral lint + oasdiff in CI.","domain":"api-design","tags":["openapi","api-design","aspnetcore","csharp","kiota","documentation"],"datePublished":"2026-02-09","dateModified":"2026-10-11","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Recursion: When It's Elegant, When It's a Stack Overflow","url":"https://www.aiwisdom.dev/articles/algorithms/recursion","canonicalUrl":"https://www.aiwisdom.dev/articles/algorithms/recursion","summary":"Base/recursive/combine, memoization vs iteration, why .NET doesn't reliably tail-call optimize, and converting recursion to an explicit Stack<T> for adversarial depth.","abstract":"Base/recursive/combine, memoization vs iteration, why .NET doesn't reliably tail-call optimize, and converting recursion to an explicit Stack<T> for adversarial depth.","domain":"algorithms","tags":["recursion","algorithms","memoization","tail-call","csharp"],"datePublished":"2025-12-25","dateModified":"2026-10-11","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Kubernetes Deployments: Rolling Updates, Resource Limits, and HPA","url":"https://www.aiwisdom.dev/articles/devops-cicd/k8s-deployments","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/k8s-deployments","summary":"Deployment strategies, readiness and liveness probes, resource requests and limits, Horizontal Pod Autoscaler, and PodDisruptionBudgets for zero-downtime releases.","abstract":"Deployment strategies, readiness and liveness probes, resource requests and limits, Horizontal Pod Autoscaler, and PodDisruptionBudgets for zero-downtime releases.","domain":"devops-cicd","tags":["kubernetes","k8s","deployments","HPA","rolling-updates","resource-limits"],"datePublished":"2026-04-22","dateModified":"2026-10-10","readingTime":"16 min","difficulty":"intermediate"},{"type":"TechArticle","title":"API Versioning: URL, Header, Media Type, and Sunset Discipline","url":"https://www.aiwisdom.dev/articles/api-design/api-versioning","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/api-versioning","summary":"Asp.Versioning 8 on .NET 9, URL/query/header/media-type schemes, additive evolution, one domain with multiple wire mappers, RFC 8594 Sunset + Deprecation headers, per-version OpenAPI documents.","abstract":"Asp.Versioning 8 on .NET 9, URL/query/header/media-type schemes, additive evolution, one domain with multiple wire mappers, RFC 8594 Sunset + Deprecation headers, per-version OpenAPI documents.","domain":"api-design","tags":["api-versioning","api-design","aspnetcore","csharp","http","deprecation"],"datePublished":"2026-02-05","dateModified":"2026-10-10","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"REST Principles in 2026: Resources, Idempotency, and Problem Details","url":"https://www.aiwisdom.dev/articles/api-design/rest-principles","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/rest-principles","summary":"The five constraints that still matter (resources, methods, status codes, statelessness, cacheability), idempotency keys, RFC 9457 problem+json, cursor pagination over OFFSET, ETags + 304s, ASP.NET Core 9 MapGroup.","abstract":"The five constraints that still matter (resources, methods, status codes, statelessness, cacheability), idempotency keys, RFC 9457 problem+json, cursor pagination over OFFSET, ETags + 304s, ASP.NET Core 9 MapGroup.","domain":"api-design","tags":["rest","api-design","http","csharp","aspnetcore","idempotency"],"datePublished":"2026-01-28","dateModified":"2026-10-10","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Edge Models: Running Small LLMs on Phones, Laptops and Browsers","url":"https://www.aiwisdom.dev/articles/llm-landscape/edge-models","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/edge-models","summary":"What fits in device memory, why bandwidth sets generation speed, which runtime to use per platform, and how to ship quantised weights with a cloud fallback that keeps the privacy promise.","abstract":"What fits in device memory, why bandwidth sets generation speed, which runtime to use per platform, and how to ship quantised weights with a cloud fallback that keeps the privacy promise.","domain":"llm-landscape","tags":["edge AI","on-device","SLM","quantization","llama.cpp","WebLLM"],"datePublished":"2026-10-09","dateModified":"2026-10-09","readingTime":"8 min","difficulty":"intermediate"},{"type":"TechArticle","title":"AI-Powered Code Review: Building a Review Bot That Actually Helps","url":"https://www.aiwisdom.dev/articles/agentic-systems/ai-powered-code-review","canonicalUrl":"https://www.aiwisdom.dev/articles/agentic-systems/ai-powered-code-review","summary":"How to build an AI code review system that catches real issues — architecture, prompt design, GitHub integration, and practical lessons.","abstract":"How to build an AI code review system that catches real issues — architecture, prompt design, GitHub integration, and practical lessons.","domain":"agentic-systems","tags":["code-review","AI","GitHub","automation","prompt-design"],"datePublished":"2026-02-08","dateModified":"2026-10-09","readingTime":"10 min","difficulty":null},{"type":"TechArticle","title":"Trees: BSTs, Balance, and Why SortedDictionary Is Red-Black","url":"https://www.aiwisdom.dev/articles/algorithms/trees","canonicalUrl":"https://www.aiwisdom.dev/articles/algorithms/trees","summary":"BST vs self-balancing (red-black, AVL), B-trees in databases, heaps with PriorityQueue, tries for prefix queries, and iterative traversals that don't blow the stack.","abstract":"BST vs self-balancing (red-black, AVL), B-trees in databases, heaps with PriorityQueue, tries for prefix queries, and iterative traversals that don't blow the stack.","domain":"algorithms","tags":["trees","algorithms","bst","red-black","heap","trie","csharp"],"datePublished":"2025-12-29","dateModified":"2026-10-09","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Token Tracking and Cost Management","url":"https://www.aiwisdom.dev/articles/ai-observability/token-tracking","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/token-tracking","summary":"Monitor token usage and costs — per-request tracking, budgets, cost allocation across teams, and the optimization strategies that shrink the bill.","abstract":"Monitor token usage and costs — per-request tracking, budgets, cost allocation across teams, and the optimization strategies that shrink the bill.","domain":"ai-observability","tags":["token-tracking","cost-allocation","token-budget","usage-metrics","FinOps"],"datePublished":"2026-06-17","dateModified":"2026-10-08","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Branching Strategies: Trunk-Based Development vs GitFlow in 2026","url":"https://www.aiwisdom.dev/articles/devops-cicd/branching-strategies","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/branching-strategies","summary":"Trunk-based development, feature flags, short-lived branches, GitFlow trade-offs, and why high-performing teams converge on committing to main.","abstract":"Trunk-based development, feature flags, short-lived branches, GitFlow trade-offs, and why high-performing teams converge on committing to main.","domain":"devops-cicd","tags":["git","branching","trunk-based","GitFlow","feature-flags","release-management"],"datePublished":"2026-04-26","dateModified":"2026-10-08","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"Zero Trust Architecture: Never Trust, Always Verify","url":"https://www.aiwisdom.dev/articles/security-engineering/zero-trust-architecture","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/zero-trust-architecture","summary":"Core principles of Zero Trust, microsegmentation, identity-centric security, BeyondCorp, continuous verification, and implementing Zero Trust in cloud environments.","abstract":"Core principles of Zero Trust, microsegmentation, identity-centric security, BeyondCorp, continuous verification, and implementing Zero Trust in cloud environments.","domain":"security-engineering","tags":["zero-trust","security","network-security","identity","cloud-security"],"datePublished":"2026-03-11","dateModified":"2026-10-08","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Module Resolution Demystified","url":"https://www.aiwisdom.dev/articles/typescript/module-resolution","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/module-resolution","summary":"Node, Node16, Bundler — understand how TypeScript actually finds and resolves your import paths, and why it breaks at runtime anyway.","abstract":"Node, Node16, Bundler — understand how TypeScript actually finds and resolves your import paths, and why it breaks at runtime anyway.","domain":"typescript","tags":["module-resolution","Node16","Bundler","package-exports","paths"],"datePublished":"2026-07-13","dateModified":"2026-10-07","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"OAuth 2.0 & OIDC: Authorization and Identity Explained","url":"https://www.aiwisdom.dev/articles/security-engineering/oauth2-oidc-complete-guide","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/oauth2-oidc-complete-guide","summary":"OAuth 2.0 grant types, PKCE, OpenID Connect layers, access vs ID tokens, token introspection, and securing SPAs and APIs with modern auth flows.","abstract":"OAuth 2.0 grant types, PKCE, OpenID Connect layers, access vs ID tokens, token introspection, and securing SPAs and APIs with modern auth flows.","domain":"security-engineering","tags":["oauth2","oidc","authentication","authorization","security"],"datePublished":"2026-03-09","dateModified":"2026-10-07","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Self-Hosting LLMs: Running a Model as a Service","url":"https://www.aiwisdom.dev/articles/llm-landscape/self-hosted-models","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/self-hosted-models","summary":"Break-even maths, GPU sizing from weights and KV cache, choosing between vLLM, SGLang and llama.cpp, and what to scale and alert on once open-weight models carry production traffic.","abstract":"Break-even maths, GPU sizing from weights and KV cache, choosing between vLLM, SGLang and llama.cpp, and what to scale and alert on once open-weight models carry production traffic.","domain":"llm-landscape","tags":["self-hosting","vLLM","inference","GPU","KV cache","Kubernetes"],"datePublished":"2026-10-06","dateModified":"2026-10-06","readingTime":"9 min","difficulty":"advanced"},{"type":"TechArticle","title":"Assertion Functions in TypeScript","url":"https://www.aiwisdom.dev/articles/typescript/assertion-functions","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/assertion-functions","summary":"asserts condition — functions that narrow types by throwing, for fail-fast validation patterns at function boundaries.","abstract":"asserts condition — functions that narrow types by throwing, for fail-fast validation patterns at function boundaries.","domain":"typescript","tags":["assertion-functions","asserts","invariant","fail-fast","type-narrowing"],"datePublished":"2026-07-07","dateModified":"2026-10-06","readingTime":"16 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Secrets Management in IaC: No More Hardcoded Credentials","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/iac-secrets-management","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/iac-secrets-management","summary":"Azure Key Vault integration, Terraform sensitive variables, Pulumi secrets, and CI/CD secret injection patterns.","abstract":"Azure Key Vault integration, Terraform sensitive variables, Pulumi secrets, and CI/CD secret injection patterns.","domain":"infrastructure-as-code","tags":["secrets-management","key-vault","terraform","iac","security"],"datePublished":"2026-02-25","dateModified":"2026-10-06","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"When to Fine-Tune vs Few-Shot vs RAG","url":"https://www.aiwisdom.dev/articles/ai-engineering/when-to-fine-tune-vs-few-shot-vs-rag","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-engineering/when-to-fine-tune-vs-few-shot-vs-rag","summary":"A decision framework for choosing between fine-tuning, few-shot prompting, and RAG for production LLM applications.","abstract":"A decision framework for choosing between fine-tuning, few-shot prompting, and RAG for production LLM applications.","domain":"ai-engineering","tags":["fine-tuning","few-shot","RAG","decision-framework","LLM"],"datePublished":"2026-01-22","dateModified":"2026-10-06","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"MongoDB 8.x: Embed vs Reference, ESR Indexes, and the Aggregation Pipeline","url":"https://www.aiwisdom.dev/articles/databases/mongodb","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/mongodb","summary":"MongoDB 8.0 (Oct 2024) / 8.2, queryable encryption GA, Cosmos DB for MongoDB vCore + DocumentDB, MongoDB.Driver 3.x LINQ, embed-vs-reference rule, ESR compound indexes, partial/TTL indexes, aggregation pipeline, atomic positional updates.","abstract":"MongoDB 8.0 (Oct 2024) / 8.2, queryable encryption GA, Cosmos DB for MongoDB vCore + DocumentDB, MongoDB.Driver 3.x LINQ, embed-vs-reference rule, ESR compound indexes, partial/TTL indexes, aggregation pipeline, atomic positional updates.","domain":"databases","tags":["mongodb","databases","nosql","aggregation","indexes","csharp"],"datePublished":"2026-01-12","dateModified":"2026-10-06","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Transactions and Isolation: ANSI Levels, MVCC, and SERIALIZABLE","url":"https://www.aiwisdom.dev/articles/databases/transactions","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/transactions","summary":"Four ANSI levels, MVCC vs 2PL, EF Core 9 BeginTransactionAsync, [Timestamp] rowversion optimistic concurrency, FOR UPDATE SKIP LOCKED, write-skew, retry on 40001/40P01 with exponential backoff, transactional outbox over 2PC.","abstract":"Four ANSI levels, MVCC vs 2PL, EF Core 9 BeginTransactionAsync, [Timestamp] rowversion optimistic concurrency, FOR UPDATE SKIP LOCKED, write-skew, retry on 40001/40P01 with exponential backoff, transactional outbox over 2PC.","domain":"databases","tags":["transactions","databases","isolation","mvcc","serializable","ef-core","csharp"],"datePublished":"2026-01-08","dateModified":"2026-10-06","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Episodic Memory: Agents That Learn From Experience","url":"https://www.aiwisdom.dev/articles/agentic-systems/episodic-memory","canonicalUrl":"https://www.aiwisdom.dev/articles/agentic-systems/episodic-memory","summary":"Store and retrieve past agent episodes — full trajectories of thought, action, and outcome — so agents avoid repeating mistakes and replicate past successes.","abstract":"Store and retrieve past agent episodes — full trajectories of thought, action, and outcome — so agents avoid repeating mistakes and replicate past successes.","domain":"agentic-systems","tags":["episodic-memory","trajectory","case-based-reasoning","experience-replay","agents"],"datePublished":"2026-05-14","dateModified":"2026-10-05","readingTime":"13 min","difficulty":"advanced"},{"type":"TechArticle","title":"SQL Patterns: Joins, Window Functions, MERGE, and Killing N+1","url":"https://www.aiwisdom.dev/articles/databases/sql-patterns","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/sql-patterns","summary":"N+1 to JOIN/LATERAL, EXISTS vs IN vs JOIN, ROW_NUMBER/RANK/SUM OVER, ANSI MERGE in PG 15+, ON CONFLICT upsert, Dapper parameterization, EXPLAIN read guide, NULL semantics + OR-defeats-index pitfalls.","abstract":"N+1 to JOIN/LATERAL, EXISTS vs IN vs JOIN, ROW_NUMBER/RANK/SUM OVER, ANSI MERGE in PG 15+, ON CONFLICT upsert, Dapper parameterization, EXPLAIN read guide, NULL semantics + OR-defeats-index pitfalls.","domain":"databases","tags":["sql","databases","joins","window-functions","merge","dapper","csharp"],"datePublished":"2026-01-06","dateModified":"2026-10-05","readingTime":"16 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Declaration Files: The Complete Guide","url":"https://www.aiwisdom.dev/articles/typescript/declaration-files","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/declaration-files","summary":".d.ts files and @types — type definitions for JavaScript libraries, ambient declarations, and module augmentation.","abstract":".d.ts files and @types — type definitions for JavaScript libraries, ambient declarations, and module augmentation.","domain":"typescript","tags":["declaration-files",".d.ts","types","DefinitelyTyped","module-augmentation"],"datePublished":"2026-07-09","dateModified":"2026-10-04","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TanStack Query v5: Server-Cache State Done Right","url":"https://www.aiwisdom.dev/articles/frontend-react/react-query","canonicalUrl":"https://www.aiwisdom.dev/articles/frontend-react/react-query","summary":"Query keys, staleTime vs gcTime, useSuspenseQuery, optimistic updates with rollback, and how to compose React Query with Next.js 16 Server Components.","abstract":"Query keys, staleTime vs gcTime, useSuspenseQuery, optimistic updates with rollback, and how to compose React Query with Next.js 16 Server Components.","domain":"frontend-react","tags":["react","tanstack-query","react-query","data-fetching","frontend"],"datePublished":"2026-05-06","dateModified":"2026-10-04","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"gRPC on .NET 9: HTTP/3, Streaming, Deadlines, and JSON Transcoding","url":"https://www.aiwisdom.dev/articles/api-design/grpc","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/grpc","summary":"Four call patterns (unary/server/client/bidi), .NET 9 server + strongly-typed client over HTTP/3, deadlines + ServiceConfig retry policies, gRPC-Web for browsers, JSON transcoding so one service speaks gRPC and REST.","abstract":"Four call patterns (unary/server/client/bidi), .NET 9 server + strongly-typed client over HTTP/3, deadlines + ServiceConfig retry policies, gRPC-Web for browsers, JSON transcoding so one service speaks gRPC and REST.","domain":"api-design","tags":["grpc","api-design","http2","http3","csharp","protobuf"],"datePublished":"2026-02-01","dateModified":"2026-10-04","readingTime":"16 min","difficulty":"advanced"},{"type":"TechArticle","title":"Service Mesh: When and Why","url":"https://www.aiwisdom.dev/articles/devops-cicd/service-mesh","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/service-mesh","summary":"Sidecar proxies for traffic management, mTLS, observability, and resilience — what a service mesh actually buys you, and when the operational cost is worth it.","abstract":"Sidecar proxies for traffic management, mTLS, observability, and resilience — what a service mesh actually buys you, and when the operational cost is worth it.","domain":"devops-cicd","tags":["service-mesh","Istio","Linkerd","sidecar-proxy","mTLS"],"datePublished":"2026-06-25","dateModified":"2026-10-03","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"WebSockets and SignalR: Heartbeats, Backplanes, and CSWSH Defense","url":"https://www.aiwisdom.dev/articles/api-design/websockets","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/websockets","summary":"WebSocket vs SignalR vs SSE vs WebTransport, .NET 9 SignalR Hub + MapHub, scale-out with Redis backplane or Azure SignalR Service, KeepAliveInterval heartbeats, JWT in query string, backpressure with Channels.","abstract":"WebSocket vs SignalR vs SSE vs WebTransport, .NET 9 SignalR Hub + MapHub, scale-out with Redis backplane or Azure SignalR Service, KeepAliveInterval heartbeats, JWT in query string, backpressure with Channels.","domain":"api-design","tags":["websockets","signalr","api-design","realtime","csharp","redis"],"datePublished":"2026-02-03","dateModified":"2026-10-03","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Partitioning and Sharding: Range, Hash, List, and Hot Partitions","url":"https://www.aiwisdom.dev/articles/databases/partitioning","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/partitioning","summary":"Vertical vs horizontal vs sharding, range/hash/list strategies, Postgres declarative partitioning + pg_partman, drop-old-partitions instead of DELETE, Cosmos hierarchical partition keys, verifying pruning with EXPLAIN.","abstract":"Vertical vs horizontal vs sharding, range/hash/list strategies, Postgres declarative partitioning + pg_partman, drop-old-partitions instead of DELETE, Cosmos hierarchical partition keys, verifying pruning with EXPLAIN.","domain":"databases","tags":["partitioning","sharding","databases","postgresql","cosmos-db","scale"],"datePublished":"2026-01-26","dateModified":"2026-10-03","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Meta-Prompting: Letting a Model Tune Your Prompts","url":"https://www.aiwisdom.dev/articles/prompt-engineering/meta-prompting","canonicalUrl":"https://www.aiwisdom.dev/articles/prompt-engineering/meta-prompting","summary":"From a one-off rewrite to refinement loops on failures, candidate search and compiled DSPy programs. How to optimise prompts against a metric without overfitting, and how to review what the optimiser produces.","abstract":"From a one-off rewrite to refinement loops on failures, candidate search and compiled DSPy programs. How to optimise prompts against a metric without overfitting, and how to review what the optimiser produces.","domain":"prompt-engineering","tags":["meta-prompting","prompt optimisation","DSPy","APE","OPRO","evaluation"],"datePublished":"2026-10-02","dateModified":"2026-10-02","readingTime":"9 min","difficulty":"advanced"},{"type":"TechArticle","title":"Minimal APIs in .NET 9: Typed Results, Route Groups, and Endpoint Filters Done Right","url":"https://www.aiwisdom.dev/articles/backend-dotnet/minimal-apis","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/minimal-apis","summary":"Production-shaped Minimal APIs with typed Results<T>, route groups, endpoint filters, [FromKeyedServices], and the new built-in OpenAPI replacing Swashbuckle.","abstract":"Production-shaped Minimal APIs with typed Results<T>, route groups, endpoint filters, [FromKeyedServices], and the new built-in OpenAPI replacing Swashbuckle.","domain":"backend-dotnet","tags":["csharp","aspnet-core","minimal-apis","dotnet-9","web-api","openapi"],"datePublished":"2026-04-25","dateModified":"2026-10-02","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Multi-Agent Architecture Patterns in Production","url":"https://www.aiwisdom.dev/articles/agentic-systems/multi-agent-architecture-patterns","canonicalUrl":"https://www.aiwisdom.dev/articles/agentic-systems/multi-agent-architecture-patterns","summary":"Orchestrator, supervisor, and swarm patterns for multi-agent systems with real trade-offs and failure modes.","abstract":"Orchestrator, supervisor, and swarm patterns for multi-agent systems with real trade-offs and failure modes.","domain":"agentic-systems","tags":["multi-agent","orchestration","architecture","production"],"datePublished":"2026-02-04","dateModified":"2026-10-02","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Pinecone Serverless: Namespaces, Hybrid Search, and Reranking","url":"https://www.aiwisdom.dev/articles/databases/pinecone","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/pinecone","summary":"Pinecone serverless GA (2024), namespaces for multitenancy, sparse-dense hybrid, .NET PineconeClient, batch upserts, metadata filtering, built-in rerankers (BGE/Cohere), tenant offboarding via DeleteAll.","abstract":"Pinecone serverless GA (2024), namespaces for multitenancy, sparse-dense hybrid, .NET PineconeClient, batch upserts, metadata filtering, built-in rerankers (BGE/Cohere), tenant offboarding via DeleteAll.","domain":"databases","tags":["pinecone","databases","vector-search","rag","serverless","ai","csharp"],"datePublished":"2026-01-18","dateModified":"2026-10-02","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Redis 8 / Valkey in 2026: HybridCache, Streams, and Distributed Locks","url":"https://www.aiwisdom.dev/articles/databases/redis","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/redis","summary":"Redis 8 SSPL/RSALv2 + Valkey LF fork, Azure Cache Enterprise, .NET 9 HybridCache (L1+L2 + stampede protection), atomic rate limit, SET NX EX + Lua compare-and-delete locks, Streams + consumer groups, sorted-set leaderboards, TTL jitter.","abstract":"Redis 8 SSPL/RSALv2 + Valkey LF fork, Azure Cache Enterprise, .NET 9 HybridCache (L1+L2 + stampede protection), atomic rate limit, SET NX EX + Lua compare-and-delete locks, Streams + consumer groups, sorted-set leaderboards, TTL jitter.","domain":"databases","tags":["redis","valkey","databases","caching","hybridcache","streams","csharp"],"datePublished":"2026-01-10","dateModified":"2026-10-02","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Conditional Types: Type-Level Logic That Scales","url":"https://www.aiwisdom.dev/articles/typescript/conditional-types","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/conditional-types","summary":"Conditional types, the infer keyword, distributive behaviour, and recursive types — the foundation of every advanced TypeScript utility.","abstract":"Conditional types, the infer keyword, distributive behaviour, and recursive types — the foundation of every advanced TypeScript utility.","domain":"typescript","tags":["typescript","conditional-types","infer","distributive","recursive-types"],"datePublished":"2026-04-14","dateModified":"2026-10-01","readingTime":"15 min","difficulty":"advanced"},{"type":"TechArticle","title":"SAST & DAST: Automated Security Testing in CI/CD","url":"https://www.aiwisdom.dev/articles/security-engineering/sast-dast-security-testing","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/sast-dast-security-testing","summary":"Static vs dynamic security testing, taint analysis, OWASP ZAP, Semgrep, integrating security gates into pull requests, and measuring programme effectiveness.","abstract":"Static vs dynamic security testing, taint analysis, OWASP ZAP, Semgrep, integrating security gates into pull requests, and measuring programme effectiveness.","domain":"security-engineering","tags":["sast","dast","security-testing","cicd","appsec"],"datePublished":"2026-03-13","dateModified":"2026-10-01","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"JWT Authentication: From Basics to Best Practices","url":"https://www.aiwisdom.dev/articles/security-engineering/jwt-authentication-deep-dive","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/jwt-authentication-deep-dive","summary":"How JSON Web Tokens work, signing algorithms (HS256 vs RS256), common vulnerabilities (algorithm confusion, none attack), token storage, and refresh token patterns.","abstract":"How JSON Web Tokens work, signing algorithms (HS256 vs RS256), common vulnerabilities (algorithm confusion, none attack), token storage, and refresh token patterns.","domain":"security-engineering","tags":["jwt","authentication","security","tokens","oauth"],"datePublished":"2026-03-07","dateModified":"2026-10-01","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"GraphQL with HotChocolate 14: Projections, DataLoaders, and Federation","url":"https://www.aiwisdom.dev/articles/api-design/graphql","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/graphql","summary":"When GraphQL beats REST and when it does not, HotChocolate 14 on .NET 9 with [UseProjection] + source-generated DataLoaders, persisted operations, cost analysis, Apollo Federation v2 with @key fields.","abstract":"When GraphQL beats REST and when it does not, HotChocolate 14 on .NET 9 with [UseProjection] + source-generated DataLoaders, persisted operations, cost analysis, Apollo Federation v2 with @key fields.","domain":"api-design","tags":["graphql","api-design","hotchocolate","csharp","federation","dataloader"],"datePublished":"2026-01-30","dateModified":"2026-10-01","readingTime":"16 min","difficulty":"advanced"},{"type":"TechArticle","title":"Rate Limiting: Token Bucket, Sliding Window, and Distributed Counters","url":"https://www.aiwisdom.dev/articles/system-design/rate-limiting","canonicalUrl":"https://www.aiwisdom.dev/articles/system-design/rate-limiting","summary":"ASP.NET Core RateLimiter, Redis-backed sliding-window in Lua, picking the right partition key, tiering by endpoint cost, and the 429 + Retry-After contract.","abstract":"ASP.NET Core RateLimiter, Redis-backed sliding-window in Lua, picking the right partition key, tiering by endpoint cost, and the 429 + Retry-After contract.","domain":"system-design","tags":["rate-limiting","token-bucket","redis","aspnet-core","system-design"],"datePublished":"2025-12-15","dateModified":"2026-10-01","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"OpenTelemetry for LLM Applications","url":"https://www.aiwisdom.dev/articles/ai-observability/opentelemetry-ai","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/opentelemetry-ai","summary":"Instrument LLM apps with OpenTelemetry — the gen-ai semantic conventions, distributed tracing across RAG pipelines, and vendor-neutral export to any backend.","abstract":"Instrument LLM apps with OpenTelemetry — the gen-ai semantic conventions, distributed tracing across RAG pipelines, and vendor-neutral export to any backend.","domain":"ai-observability","tags":["OpenTelemetry","gen-ai-semantic-conventions","distributed-tracing","OTEL","vendor-neutral"],"datePublished":"2026-06-11","dateModified":"2026-09-30","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Utility Types: The Production Toolkit","url":"https://www.aiwisdom.dev/articles/typescript/utility-types","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/utility-types","summary":"Partial, Required, Pick, Omit, Record, Extract, Exclude, ReturnType — when to use each and how to compose them for real-world type transformations.","abstract":"Partial, Required, Pick, Omit, Record, Extract, Exclude, ReturnType — when to use each and how to compose them for real-world type transformations.","domain":"typescript","tags":["typescript","utility-types","Partial","Pick","Omit","Record"],"datePublished":"2026-04-08","dateModified":"2026-09-30","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Red Teaming LLM Applications: Attack It Before Your Users Do","url":"https://www.aiwisdom.dev/articles/prompt-engineering/red-teaming","canonicalUrl":"https://www.aiwisdom.dev/articles/prompt-engineering/red-teaming","summary":"Threat model first, then manual sessions, then automated scans with garak, promptfoo and PyRIT. How to find jailbreaks, data leaks and unsafe tool calls, fix them in the architecture, and keep them fixed in CI.","abstract":"Threat model first, then manual sessions, then automated scans with garak, promptfoo and PyRIT. How to find jailbreaks, data leaks and unsafe tool calls, fix them in the architecture, and keep them fixed in CI.","domain":"prompt-engineering","tags":["red teaming","security","jailbreak","prompt injection","promptfoo","garak","OWASP"],"datePublished":"2026-09-29","dateModified":"2026-09-29","readingTime":"9 min","difficulty":"advanced"},{"type":"TechArticle","title":"Container Registry Best Practices","url":"https://www.aiwisdom.dev/articles/devops-cicd/container-registry","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/container-registry","summary":"Store, scan, and distribute container images — immutable tags, vulnerability scanning policies, geo-replication, and retention rules that keep a registry trustworthy.","abstract":"Store, scan, and distribute container images — immutable tags, vulnerability scanning policies, geo-replication, and retention rules that keep a registry trustworthy.","domain":"devops-cicd","tags":["container-registry","ACR","Docker-Hub","GHCR","image-scanning"],"datePublished":"2026-06-21","dateModified":"2026-09-29","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"EF Core 9 in Production: Tracking, Projections, and the Performance Levers That Matter","url":"https://www.aiwisdom.dev/articles/backend-dotnet/ef-core","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/ef-core","summary":"Bulk updates with ExecuteUpdateAsync, projection over Include, AsSplitQuery for cartesian explosion, auto-compiled models, and IDbContextFactory for parallel work.","abstract":"Bulk updates with ExecuteUpdateAsync, projection over Include, AsSplitQuery for cartesian explosion, auto-compiled models, and IDbContextFactory for parallel work.","domain":"backend-dotnet","tags":["ef-core","ef-core-9","csharp","aspnet-core","performance","sql"],"datePublished":"2026-04-12","dateModified":"2026-09-29","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Unit Testing Principles: AAA, Isolation, and Test Doubles","url":"https://www.aiwisdom.dev/articles/testing-engineering/unit-testing-principles","canonicalUrl":"https://www.aiwisdom.dev/articles/testing-engineering/unit-testing-principles","summary":"Master the foundational principles of unit testing — Arrange-Act-Assert, test isolation, deterministic tests, and test doubles with Vitest and xUnit.","abstract":"Master the foundational principles of unit testing — Arrange-Act-Assert, test isolation, deterministic tests, and test doubles with Vitest and xUnit.","domain":"testing-engineering","tags":["unit-testing","vitest","jest","xunit","test-doubles"],"datePublished":"2026-03-21","dateModified":"2026-09-28","readingTime":"12 min","difficulty":"foundational"},{"type":"TechArticle","title":"Terraform State Management: Remote Backends and Locking","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-state-management","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-state-management","summary":"Remote state backends (Azure Storage, S3, Terraform Cloud), state locking, state import, and disaster recovery for state files.","abstract":"Remote state backends (Azure Storage, S3, Terraform Cloud), state locking, state import, and disaster recovery for state files.","domain":"infrastructure-as-code","tags":["terraform","state-management","iac","azure-storage","infrastructure"],"datePublished":"2026-02-27","dateModified":"2026-09-28","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Rate Limiting on .NET 9: Token Buckets, Redis, and Tiered Policies","url":"https://www.aiwisdom.dev/articles/api-design/api-rate-limiting","canonicalUrl":"https://www.aiwisdom.dev/articles/api-design/api-rate-limiting","summary":"Built-in RateLimiter middleware with FixedWindow/SlidingWindow/TokenBucket/Concurrency, partition by user/API key, distributed counters with Redis Lua INCR/EXPIRE, 429 + Retry-After + RateLimit-* headers, layered with APIM.","abstract":"Built-in RateLimiter middleware with FixedWindow/SlidingWindow/TokenBucket/Concurrency, partition by user/API key, distributed counters with Redis Lua INCR/EXPIRE, 429 + Retry-After + RateLimit-* headers, layered with APIM.","domain":"api-design","tags":["rate-limiting","api-design","aspnetcore","csharp","redis","apim"],"datePublished":"2026-02-07","dateModified":"2026-09-28","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Alerting: Signal vs Noise","url":"https://www.aiwisdom.dev/articles/devops-cicd/alerting","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/alerting","summary":"Actionable alerts, on-call rotations, and incident response — alert rules, severity, routing, and the fatigue-prevention discipline that keeps on-call sane.","abstract":"Actionable alerts, on-call rotations, and incident response — alert rules, severity, routing, and the fatigue-prevention discipline that keeps on-call sane.","domain":"devops-cicd","tags":["alerting","PagerDuty","Alertmanager","on-call","incident-response"],"datePublished":"2026-06-19","dateModified":"2026-09-27","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Phoenix: Open-Source LLM Observability","url":"https://www.aiwisdom.dev/articles/ai-observability/phoenix","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/phoenix","summary":"Arize's open-source, OTel-native LLM observability stack — traces, eval workflows, and prompt experiments, self-hosted with no data leaving your VPC.","abstract":"Arize's open-source, OTel-native LLM observability stack — traces, eval workflows, and prompt experiments, self-hosted with no data leaving your VPC.","domain":"ai-observability","tags":["Phoenix","Arize","open-source","RAG-evaluation","tracing"],"datePublished":"2026-06-15","dateModified":"2026-09-27","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Terraform Modules: Reusable Infrastructure Patterns","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-modules","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/terraform-modules","summary":"Module composition, input variables, output values, module sources, versioning, and the Terraform Registry.","abstract":"Module composition, input variables, output values, module sources, versioning, and the Terraform Registry.","domain":"infrastructure-as-code","tags":["terraform","modules","iac","hcl","infrastructure"],"datePublished":"2026-03-01","dateModified":"2026-09-27","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Pulumi with TypeScript: Type-Safe Infrastructure","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/pulumi-typescript-iac","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/pulumi-typescript-iac","summary":"Pulumi TypeScript SDK — type-safe resources, async outputs, stack references, and testing infrastructure with Jest.","abstract":"Pulumi TypeScript SDK — type-safe resources, async outputs, stack references, and testing infrastructure with Jest.","domain":"infrastructure-as-code","tags":["pulumi","typescript","iac","infrastructure","azure"],"datePublished":"2026-02-23","dateModified":"2026-09-27","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"pgvector 0.8/0.9: HNSW, halfvec, and RAG on Postgres","url":"https://www.aiwisdom.dev/articles/databases/pgvector","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/pgvector","summary":"pgvector 0.8 (Oct 2024) iterative scans + halfvec, 0.9 sparse vectors, HNSW vs IVFFlat, EF Core 9 + Pgvector.EntityFrameworkCore, halfvec/bit quantization, hybrid search with tsvector, maintenance_work_mem for builds.","abstract":"pgvector 0.8 (Oct 2024) iterative scans + halfvec, 0.9 sparse vectors, HNSW vs IVFFlat, EF Core 9 + Pgvector.EntityFrameworkCore, halfvec/bit quantization, hybrid search with tsvector, maintenance_work_mem for builds.","domain":"databases","tags":["pgvector","postgresql","databases","vector-search","rag","ai","csharp"],"datePublished":"2026-01-16","dateModified":"2026-09-27","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Pulumi with Python: Infrastructure as Real Code","url":"https://www.aiwisdom.dev/articles/infrastructure-as-code/pulumi-python-iac","canonicalUrl":"https://www.aiwisdom.dev/articles/infrastructure-as-code/pulumi-python-iac","summary":"Pulumi Python SDK — stacks, resources, config, secrets, outputs, and ComponentResource for reusable infrastructure.","abstract":"Pulumi Python SDK — stacks, resources, config, secrets, outputs, and ComponentResource for reusable infrastructure.","domain":"infrastructure-as-code","tags":["pulumi","python","iac","infrastructure","azure"],"datePublished":"2026-02-21","dateModified":"2026-09-26","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Schema Design: Keys, Relationships, Tenancy, and Audit","url":"https://www.aiwisdom.dev/articles/databases/schema-design","canonicalUrl":"https://www.aiwisdom.dev/articles/databases/schema-design","summary":"Surrogate (UUIDv7/bigint) vs natural keys, foreign keys + CHECK constraints, audit columns + history triggers, soft delete with partial indexes, multi-tenancy patterns + Postgres RLS, junction tables for N:N.","abstract":"Surrogate (UUIDv7/bigint) vs natural keys, foreign keys + CHECK constraints, audit columns + history triggers, soft delete with partial indexes, multi-tenancy patterns + Postgres RLS, junction tables for N:N.","domain":"databases","tags":["schema-design","databases","sql","multi-tenant","rls","audit"],"datePublished":"2026-01-22","dateModified":"2026-09-26","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Integrating Azure OpenAI with ASP.NET Core: A Production Guide","url":"https://www.aiwisdom.dev/articles/backend-dotnet/integrating-azure-openai-with-aspnet-core","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/integrating-azure-openai-with-aspnet-core","summary":"SDK setup, retry policies, streaming responses, and structured outputs for Azure OpenAI in .NET production applications.","abstract":"SDK setup, retry policies, streaming responses, and structured outputs for Azure OpenAI in .NET production applications.","domain":"backend-dotnet","tags":["Azure-OpenAI","ASP.NET-Core","dotnet","SDK","production"],"datePublished":"2026-01-17","dateModified":"2026-09-26","readingTime":"10 min","difficulty":"foundational"},{"type":"TechArticle","title":"Azure OpenAI in Production: Deployments, PTUs, and Identity-Only Access","url":"https://www.aiwisdom.dev/articles/cloud-azure/azure-openai","canonicalUrl":"https://www.aiwisdom.dev/articles/cloud-azure/azure-openai","summary":"The 2026 Azure OpenAI baseline — Bicep with keys disabled, deployment names that don't break, Standard vs PTU sizing, and content filter handling.","abstract":"The 2026 Azure OpenAI baseline — Bicep with keys disabled, deployment names that don't break, Standard vs PTU sizing, and content filter handling.","domain":"cloud-azure","tags":["azure-openai","azure","gpt-4o","managed-identity","cloud"],"datePublished":"2025-11-27","dateModified":"2026-09-26","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Tree-of-Thought: Search Over Reasoning Paths","url":"https://www.aiwisdom.dev/articles/prompt-engineering/tree-of-thought","canonicalUrl":"https://www.aiwisdom.dev/articles/prompt-engineering/tree-of-thought","summary":"Propose several next steps, judge the partial states, keep the best and expand them. How to build a Tree-of-Thought search, why the evaluator decides everything, and when a reasoning model makes it unnecessary.","abstract":"Propose several next steps, judge the partial states, keep the best and expand them. How to build a Tree-of-Thought search, why the evaluator decides everything, and when a reasoning model makes it unnecessary.","domain":"prompt-engineering","tags":["tree-of-thought","ToT","reasoning","search","beam search","prompt-engineering"],"datePublished":"2026-09-25","dateModified":"2026-09-25","readingTime":"10 min","difficulty":"advanced"},{"type":"TechArticle","title":"CI/CD Pipeline Design: Fast Feedback, Quality Gates, and DORA Metrics","url":"https://www.aiwisdom.dev/articles/devops-cicd/pipeline-design","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/pipeline-design","summary":"Trunk-based development, parallel testing, deployment gates, feature flags, and designing pipelines that keep deployment frequency high and failure rate low.","abstract":"Trunk-based development, parallel testing, deployment gates, feature flags, and designing pipelines that keep deployment frequency high and failure rate low.","domain":"devops-cicd","tags":["ci-cd","pipeline","DORA","quality-gates","feature-flags","trunk-based"],"datePublished":"2026-04-24","dateModified":"2026-09-25","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Threat Modeling for Developers: STRIDE, DREAD & Beyond","url":"https://www.aiwisdom.dev/articles/security-engineering/threat-modeling-for-developers","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/threat-modeling-for-developers","summary":"STRIDE threat categories, data flow diagrams, trust boundaries, attack trees, DREAD scoring, PASTA methodology, and integrating threat modeling into the SDLC.","abstract":"STRIDE threat categories, data flow diagrams, trust boundaries, attack trees, DREAD scoring, PASTA methodology, and integrating threat modeling into the SDLC.","domain":"security-engineering","tags":["threat-modeling","stride","security","appsec","sdlc"],"datePublished":"2026-03-19","dateModified":"2026-09-25","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Load Balancing: L4 vs L7, P2C, and Health Checks That Actually Catch Failures","url":"https://www.aiwisdom.dev/articles/system-design/load-balancing","canonicalUrl":"https://www.aiwisdom.dev/articles/system-design/load-balancing","summary":"Algorithm matrix (round-robin, least-conn, EWMA, P2C, consistent hash), .NET 9 health checks, outlier ejection, the Azure LB service map, and Polly v8 resilience.","abstract":"Algorithm matrix (round-robin, least-conn, EWMA, P2C, consistent hash), .NET 9 health checks, outlier ejection, the Azure LB service map, and Polly v8 resilience.","domain":"system-design","tags":["load-balancing","azure-front-door","health-checks","polly","system-design"],"datePublished":"2025-12-13","dateModified":"2026-09-25","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Helm Charts: Packaging K8s Applications","url":"https://www.aiwisdom.dev/articles/devops-cicd/helm","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/helm","summary":"Kubernetes's package manager — chart structure, values.yaml, Go templates, dependencies, and release management (install, upgrade, rollback) for real deployments.","abstract":"Kubernetes's package manager — chart structure, values.yaml, Go templates, dependencies, and release management (install, upgrade, rollback) for real deployments.","domain":"devops-cicd","tags":["Helm","charts","values","templates","release-management"],"datePublished":"2026-06-23","dateModified":"2026-09-24","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"GitHub Actions in Production: Workflows, OIDC, and Reusable Patterns","url":"https://www.aiwisdom.dev/articles/devops-cicd/github-actions","canonicalUrl":"https://www.aiwisdom.dev/articles/devops-cicd/github-actions","summary":"Triggers, matrix builds, reusable workflows, composite actions, OIDC cloud authentication, and the patterns that keep CI pipelines fast and secure.","abstract":"Triggers, matrix builds, reusable workflows, composite actions, OIDC cloud authentication, and the patterns that keep CI pipelines fast and secure.","domain":"devops-cicd","tags":["github-actions","ci-cd","OIDC","reusable-workflows","automation"],"datePublished":"2026-04-18","dateModified":"2026-09-24","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Zod: Schema-First Validation That Earns Its Type Safety","url":"https://www.aiwisdom.dev/articles/typescript/zod","canonicalUrl":"https://www.aiwisdom.dev/articles/typescript/zod","summary":"Parse API responses, form inputs, and env variables with Zod schemas that double as TypeScript types — no more manual type assertions at system boundaries.","abstract":"Parse API responses, form inputs, and env variables with Zod schemas that double as TypeScript types — no more manual type assertions at system boundaries.","domain":"typescript","tags":["typescript","zod","validation","schema","parsing","runtime-safety"],"datePublished":"2026-04-12","dateModified":"2026-09-24","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"React State Management in 2026: A Decision Tree, Not a Religion","url":"https://www.aiwisdom.dev/articles/frontend-react/state-management","canonicalUrl":"https://www.aiwisdom.dev/articles/frontend-react/state-management","summary":"Server data, URL state, local state, and global stores — when to use Zustand vs Jotai vs Context vs Redux, and why most state belongs nowhere near a global store.","abstract":"Server data, URL state, local state, and global stores — when to use Zustand vs Jotai vs Context vs Redux, and why most state belongs nowhere near a global store.","domain":"frontend-react","tags":["react","state-management","zustand","jotai","context","frontend"],"datePublished":"2026-05-04","dateModified":"2026-09-23","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LINQ in .NET 9: Deferred Execution, IQueryable, and the New Operators","url":"https://www.aiwisdom.dev/articles/backend-dotnet/linq","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/linq","summary":"Practical LINQ for backend engineers — IEnumerable vs IQueryable, the .NET 9 CountBy/AggregateBy/Index additions, and EF Core translation pitfalls.","abstract":"Practical LINQ for backend engineers — IEnumerable vs IQueryable, the .NET 9 CountBy/AggregateBy/Index additions, and EF Core translation pitfalls.","domain":"backend-dotnet","tags":["csharp","linq","dotnet-9","ef-core","performance"],"datePublished":"2026-04-04","dateModified":"2026-09-23","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Embeddings: From Theory to Production Choice","url":"https://www.aiwisdom.dev/articles/ai-engineering/embeddings","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-engineering/embeddings","summary":"Convert text, images, and code into dense vectors that capture semantic meaning — the foundational primitive of modern AI systems, and the choice that dominates RAG quality.","abstract":"Convert text, images, and code into dense vectors that capture semantic meaning — the foundational primitive of modern AI systems, and the choice that dominates RAG quality.","domain":"ai-engineering","tags":["embeddings","semantic-similarity","MTEB","bi-encoder","RAG"],"datePublished":"2026-05-26","dateModified":"2026-09-22","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Async/Await in .NET 9: ConfigureAwaitOptions, Task.WhenEach, and Bounded Concurrency","url":"https://www.aiwisdom.dev/articles/backend-dotnet/async-await","canonicalUrl":"https://www.aiwisdom.dev/articles/backend-dotnet/async-await","summary":"Modern async patterns for ASP.NET Core — context capture, the .NET 8 ConfigureAwaitOptions enum, .NET 9 Task.WhenEach, and the anti-patterns that cause production incidents.","abstract":"Modern async patterns for ASP.NET Core — context capture, the .NET 8 ConfigureAwaitOptions enum, .NET 9 Task.WhenEach, and the anti-patterns that cause production incidents.","domain":"backend-dotnet","tags":["csharp","async","concurrency","dotnet-9","performance"],"datePublished":"2026-04-06","dateModified":"2026-09-22","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Message Queues: Delivery Semantics, Idempotency, and the Outbox Pattern","url":"https://www.aiwisdom.dev/articles/system-design/message-queue","canonicalUrl":"https://www.aiwisdom.dev/articles/system-design/message-queue","summary":"Queue vs stream vs topic, why exactly-once is marketing, peek-lock + explicit complete, idempotency tables, the transactional outbox, and Service Bus sessions for FIFO.","abstract":"Queue vs stream vs topic, why exactly-once is marketing, peek-lock + explicit complete, idempotency tables, the transactional outbox, and Service Bus sessions for FIFO.","domain":"system-design","tags":["message-queue","service-bus","event-hubs","idempotency","system-design"],"datePublished":"2025-12-17","dateModified":"2026-09-22","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LangSmith: LLM Observability Platform","url":"https://www.aiwisdom.dev/articles/ai-observability/langsmith","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/langsmith","summary":"LangChain's observability platform — distributed tracing, dataset curation, evaluation suites, and the prompt playground, for LangChain and framework-agnostic apps alike.","abstract":"LangChain's observability platform — distributed tracing, dataset curation, evaluation suites, and the prompt playground, for LangChain and framework-agnostic apps alike.","domain":"ai-observability","tags":["LangSmith","tracing","LangChain","observability","evaluation"],"datePublished":"2026-06-03","dateModified":"2026-09-21","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Test Architecture Strategy: Pyramid, Trophy, and CI Optimization","url":"https://www.aiwisdom.dev/articles/testing-engineering/test-architecture-strategy","canonicalUrl":"https://www.aiwisdom.dev/articles/testing-engineering/test-architecture-strategy","summary":"Design a scalable test architecture — apply the test pyramid and testing trophy, set meaningful coverage thresholds, and optimise CI pipeline execution time.","abstract":"Design a scalable test architecture — apply the test pyramid and testing trophy, set meaningful coverage thresholds, and optimise CI pipeline execution time.","domain":"testing-engineering","tags":["test-architecture","test-pyramid","coverage","ci-optimization","testing-strategy"],"datePublished":"2026-04-02","dateModified":"2026-09-21","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Context Windows: Size, Quality, and Trade-offs","url":"https://www.aiwisdom.dev/articles/llm-landscape/context-windows","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/context-windows","summary":"Context length limits, the 'lost in the middle' effect, prompt caching, and when a huge context window is the wrong fix for a retrieval problem.","abstract":"Context length limits, the 'lost in the middle' effect, prompt caching, and when a huge context window is the wrong fix for a retrieval problem.","domain":"llm-landscape","tags":["context-window","token-limit","lost-in-the-middle","context-compression","chunking"],"datePublished":"2026-06-29","dateModified":"2026-09-20","readingTime":"14 min","difficulty":"foundational"},{"type":"TechArticle","title":"Prompt Engineering as Software Engineering","url":"https://www.aiwisdom.dev/articles/prompt-engineering/prompt-engineering-as-software-engineering","canonicalUrl":"https://www.aiwisdom.dev/articles/prompt-engineering/prompt-engineering-as-software-engineering","summary":"Version control, testing, parameterization, and CI pipelines for prompts — treating prompt engineering with the same rigor as application code.","abstract":"Version control, testing, parameterization, and CI pipelines for prompts — treating prompt engineering with the same rigor as application code.","domain":"prompt-engineering","tags":["prompt-engineering","CI","version-control","testing","best-practices"],"datePublished":"2026-02-07","dateModified":"2026-09-19","readingTime":"8 min","difficulty":null},{"type":"TechArticle","title":"Secrets Management: Keeping Credentials Out of Code","url":"https://www.aiwisdom.dev/articles/security-engineering/secrets-management-best-practices","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/secrets-management-best-practices","summary":"Vault patterns, dynamic secrets, automated rotation, git secret scanning, HashiCorp Vault, Azure Key Vault, envelope encryption, and incident response for leaked secrets.","abstract":"Vault patterns, dynamic secrets, automated rotation, git secret scanning, HashiCorp Vault, Azure Key Vault, envelope encryption, and incident response for leaked secrets.","domain":"security-engineering","tags":["secrets-management","vault","security","key-vault","devops"],"datePublished":"2026-03-17","dateModified":"2026-09-17","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Dependency Scanning: Securing Your Software Supply Chain","url":"https://www.aiwisdom.dev/articles/security-engineering/dependency-scanning-supply-chain","canonicalUrl":"https://www.aiwisdom.dev/articles/security-engineering/dependency-scanning-supply-chain","summary":"Supply chain attacks, CVE scoring, SBOMs, transitive vulnerabilities, lockfile integrity, dependency confusion, Sigstore, and tools like Snyk and Dependabot.","abstract":"Supply chain attacks, CVE scoring, SBOMs, transitive vulnerabilities, lockfile integrity, dependency confusion, Sigstore, and tools like Snyk and Dependabot.","domain":"security-engineering","tags":["dependency-scanning","supply-chain","sbom","cve","security"],"datePublished":"2026-03-15","dateModified":"2026-09-17","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Graph Traversal: BFS, DFS, Topological Sort, and the Visited Set","url":"https://www.aiwisdom.dev/articles/algorithms/graph-traversal","canonicalUrl":"https://www.aiwisdom.dev/articles/algorithms/graph-traversal","summary":"Adjacency list vs matrix, BFS for unweighted shortest path, DFS recursive vs iterative, Kahn's topological sort, three-colour cycle detection, and connected components.","abstract":"Adjacency list vs matrix, BFS for unweighted shortest path, DFS recursive vs iterative, Kahn's topological sort, three-colour cycle detection, and connected components.","domain":"algorithms","tags":["graph","bfs","dfs","topological-sort","algorithms","csharp"],"datePublished":"2025-12-31","dateModified":"2026-09-17","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Designing RAG Systems That Actually Scale","url":"https://www.aiwisdom.dev/articles/ai-engineering/designing-rag-systems-that-actually-scale","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-engineering/designing-rag-systems-that-actually-scale","summary":"Chunking strategies, embedding pipelines, retrieval patterns, and when RAG breaks down in production systems.","abstract":"Chunking strategies, embedding pipelines, retrieval patterns, and when RAG breaks down in production systems.","domain":"ai-engineering","tags":["RAG","vector-db","LLM","production","embeddings"],"datePublished":"2026-01-14","dateModified":"2026-09-16","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Binary Search: One Template That Solves Every Variant","url":"https://www.aiwisdom.dev/articles/algorithms/binary-search","canonicalUrl":"https://www.aiwisdom.dev/articles/algorithms/binary-search","summary":"Half-open [low, high) invariant, lower-bound and upper-bound, first/last occurrence, binary search on the answer, floating-point search, and the BCL helpers.","abstract":"Half-open [low, high) invariant, lower-bound and upper-bound, first/last occurrence, binary search on the answer, floating-point search, and the BCL helpers.","domain":"algorithms","tags":["binary-search","algorithms","lower-bound","csharp"],"datePublished":"2025-12-21","dateModified":"2026-09-16","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LLM Cost-Performance Analysis","url":"https://www.aiwisdom.dev/articles/llm-landscape/cost-performance","canonicalUrl":"https://www.aiwisdom.dev/articles/llm-landscape/cost-performance","summary":"Frontier vs mini-tier trade-offs, model routing and cascading architectures, batch pricing, and a worked cost model for a real production feature.","abstract":"Frontier vs mini-tier trade-offs, model routing and cascading architectures, batch pricing, and a worked cost model for a real production feature.","domain":"llm-landscape","tags":["cost-performance","pricing","model-routing","cascading","batch-API"],"datePublished":"2026-07-01","dateModified":"2026-09-15","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"React 19 Hooks: The Modern Mental Model in the Compiler Era","url":"https://www.aiwisdom.dev/articles/frontend-react/hooks","canonicalUrl":"https://www.aiwisdom.dev/articles/frontend-react/hooks","summary":"A 2026 hooks refresher under React 19 and the React Compiler — what to write, what to delete, and the use(), useActionState, and useFormStatus APIs that change everything.","abstract":"A 2026 hooks refresher under React 19 and the React Compiler — what to write, what to delete, and the use(), useActionState, and useFormStatus APIs that change everything.","domain":"frontend-react","tags":["react","hooks","react-19","react-compiler","frontend"],"datePublished":"2026-04-28","dateModified":"2026-09-15","readingTime":"13 min","difficulty":"foundational"},{"type":"TechArticle","title":"Guardrails: Input/Output Safety in Production","url":"https://www.aiwisdom.dev/articles/ai-engineering/guardrails","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-engineering/guardrails","summary":"Input, output, schema, tool, and cost guardrails — the layered defence system that catches LLM failures before they reach a user or downstream system.","abstract":"Input, output, schema, tool, and cost guardrails — the layered defence system that catches LLM failures before they reach a user or downstream system.","domain":"ai-engineering","tags":["guardrails","prompt-injection","content-safety","output-validation","PII"],"datePublished":"2026-05-28","dateModified":"2026-09-13","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Contract Testing with Pact: Consumer-Driven Contracts for Microservices","url":"https://www.aiwisdom.dev/articles/testing-engineering/contract-testing-pact","canonicalUrl":"https://www.aiwisdom.dev/articles/testing-engineering/contract-testing-pact","summary":"Implement consumer-driven contract testing with Pact and PactFlow — learn pact files, provider verification, can-i-deploy, and bidirectional contracts.","abstract":"Implement consumer-driven contract testing with Pact and PactFlow — learn pact files, provider verification, can-i-deploy, and bidirectional contracts.","domain":"testing-engineering","tags":["contract-testing","pact","microservices","consumer-driven","pactflow"],"datePublished":"2026-03-29","dateModified":"2026-09-12","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Validating LLM Outputs","url":"https://www.aiwisdom.dev/articles/ai-observability/output-validation","canonicalUrl":"https://www.aiwisdom.dev/articles/ai-observability/output-validation","summary":"Validate LLM outputs — schema conformance, factuality checks against source documents, toxicity detection, and structured output parsing before serving users.","abstract":"Validate LLM outputs — schema conformance, factuality checks against source documents, toxicity detection, and structured output parsing before serving users.","domain":"ai-observability","tags":["output-validation","schema-validation","factuality","toxicity","hallucination-detection"],"datePublished":"2026-06-13","dateModified":"2026-09-11","readingTime":"14 min","difficulty":"intermediate"}],"reference":{"glossary":[{"type":"DefinedTerm","name":"Agentic Workflow","url":"https://www.aiwisdom.dev/glossary/agentic-workflow","canonicalUrl":"https://www.aiwisdom.dev/glossary/agentic-workflow","definition":"A workflow where an LLM autonomously decides steps, uses tools, and iterates until it achieves a goal.","summary":"A workflow where an LLM autonomously decides steps, uses tools, and iterates until it achieves a goal.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","planning-loop","tool-use","multi-agent"]},{"type":"DefinedTerm","name":"AI Agent","url":"https://www.aiwisdom.dev/glossary/agent","canonicalUrl":"https://www.aiwisdom.dev/glossary/agent","definition":"An LLM-powered system that can plan, use tools, and take actions autonomously to achieve goals.","summary":"An LLM-powered system that can plan, use tools, and take actions autonomously to achieve goals.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["multi-agent","tool-use","planning"]},{"type":"DefinedTerm","name":"AI Gateway","url":"https://www.aiwisdom.dev/glossary/ai-gateway","canonicalUrl":"https://www.aiwisdom.dev/glossary/ai-gateway","definition":"An API management layer between your application and LLM providers for routing, caching, and cost control.","summary":"An API management layer between your application and LLM providers for routing, caching, and cost control.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["inference","model-serving","cost-control"]},{"type":"DefinedTerm","name":"Attention Mechanism","url":"https://www.aiwisdom.dev/glossary/attention","canonicalUrl":"https://www.aiwisdom.dev/glossary/attention","definition":"The core operation in transformers that computes relevance scores between all pairs of tokens.","summary":"The core operation in transformers that computes relevance scores between all pairs of tokens.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["transformer","flash-attention"]},{"type":"DefinedTerm","name":"AutoGen","url":"https://www.aiwisdom.dev/glossary/autogen","canonicalUrl":"https://www.aiwisdom.dev/glossary/autogen","definition":"Microsoft Research's original open-source multi-agent framework via conversational message passing — now in maintenance mode, superseded by Microsoft Agent Framework.","summary":"Microsoft Research's original open-source multi-agent framework via conversational message passing — now in maintenance mode, superseded by Microsoft Agent Framework.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["multi-agent","agent","langgraph","planning-loop"]},{"type":"DefinedTerm","name":"BM25","url":"https://www.aiwisdom.dev/glossary/bm25","canonicalUrl":"https://www.aiwisdom.dev/glossary/bm25","definition":"A keyword-based ranking function scoring documents by term frequency weighted by inverse document frequency.","summary":"A keyword-based ranking function scoring documents by term frequency weighted by inverse document frequency.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["hybrid-search","semantic-search","rag","rrf"]},{"type":"DefinedTerm","name":"Chain-of-Thought (CoT)","url":"https://www.aiwisdom.dev/glossary/chain-of-thought","canonicalUrl":"https://www.aiwisdom.dev/glossary/chain-of-thought","definition":"A prompting technique that encourages the model to reason step-by-step before giving a final answer.","summary":"A prompting technique that encourages the model to reason step-by-step before giving a final answer.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-engineering","few-shot-learning","reasoning"]},{"type":"DefinedTerm","name":"Chunking","url":"https://www.aiwisdom.dev/glossary/chunking","canonicalUrl":"https://www.aiwisdom.dev/glossary/chunking","definition":"Splitting documents into smaller segments for embedding and retrieval in RAG systems.","summary":"Splitting documents into smaller segments for embedding and retrieval in RAG systems.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["rag","embedding","semantic-search"]},{"type":"DefinedTerm","name":"Constrained Generation","url":"https://www.aiwisdom.dev/glossary/constrained-generation","canonicalUrl":"https://www.aiwisdom.dev/glossary/constrained-generation","definition":"Techniques that restrict LLM token generation to follow specific formats or formal grammars.","summary":"Techniques that restrict LLM token generation to follow specific formats or formal grammars.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["structured-output","json-mode","inference"]},{"type":"DefinedTerm","name":"Content Safety","url":"https://www.aiwisdom.dev/glossary/content-safety","canonicalUrl":"https://www.aiwisdom.dev/glossary/content-safety","definition":"AI-powered classification layers that detect and block harmful or policy-violating content in LLM inputs and outputs.","summary":"AI-powered classification layers that detect and block harmful or policy-violating content in LLM inputs and outputs.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["guardrails","prompt-injection","red-teaming"]},{"type":"DefinedTerm","name":"Context Window","url":"https://www.aiwisdom.dev/glossary/context-window","canonicalUrl":"https://www.aiwisdom.dev/glossary/context-window","definition":"The maximum number of tokens an LLM can process in a single request (input + output combined).","summary":"The maximum number of tokens an LLM can process in a single request (input + output combined).","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["token","rag","chunking"]},{"type":"DefinedTerm","name":"Cosine Similarity","url":"https://www.aiwisdom.dev/glossary/cosine-similarity","canonicalUrl":"https://www.aiwisdom.dev/glossary/cosine-similarity","definition":"A metric measuring the angle between two vectors, used to compare embedding similarity.","summary":"A metric measuring the angle between two vectors, used to compare embedding similarity.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["embedding","semantic-search","vector-database"]},{"type":"DefinedTerm","name":"Edge Models (SLMs)","url":"https://www.aiwisdom.dev/glossary/edge-models","canonicalUrl":"https://www.aiwisdom.dev/glossary/edge-models","definition":"Compact language models optimised to run on-device without cloud connectivity.","summary":"Compact language models optimised to run on-device without cloud connectivity.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["quantisation","inference","vllm","model-serving"]},{"type":"DefinedTerm","name":"Embedding","url":"https://www.aiwisdom.dev/glossary/embedding","canonicalUrl":"https://www.aiwisdom.dev/glossary/embedding","definition":"A dense vector representation of text, images, or other data in a continuous space.","summary":"A dense vector representation of text, images, or other data in a continuous space.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["vector-database","rag","semantic-search","cosine-similarity"]},{"type":"DefinedTerm","name":"Episodic Memory","url":"https://www.aiwisdom.dev/glossary/episodic-memory","canonicalUrl":"https://www.aiwisdom.dev/glossary/episodic-memory","definition":"Agent memory that stores records of past interactions, enabling recall of previous tasks or conversations.","summary":"Agent memory that stores records of past interactions, enabling recall of previous tasks or conversations.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","long-term-memory","short-term-memory","embedding"]},{"type":"DefinedTerm","name":"Few-Shot Learning","url":"https://www.aiwisdom.dev/glossary/few-shot-learning","canonicalUrl":"https://www.aiwisdom.dev/glossary/few-shot-learning","definition":"Providing a small number of examples in the prompt to teach the model a desired behaviour.","summary":"Providing a small number of examples in the prompt to teach the model a desired behaviour.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-engineering","chain-of-thought","in-context-learning"]},{"type":"DefinedTerm","name":"Fine-Tuning","url":"https://www.aiwisdom.dev/glossary/fine-tuning","canonicalUrl":"https://www.aiwisdom.dev/glossary/fine-tuning","definition":"Adapting a pre-trained model on domain-specific data to improve performance for a particular task.","summary":"Adapting a pre-trained model on domain-specific data to improve performance for a particular task.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["lora","qlora","foundation-model","transfer-learning"]},{"type":"DefinedTerm","name":"Foundation Model","url":"https://www.aiwisdom.dev/glossary/foundation-model","canonicalUrl":"https://www.aiwisdom.dev/glossary/foundation-model","definition":"A large model pre-trained on broad data that can be adapted to many downstream tasks.","summary":"A large model pre-trained on broad data that can be adapted to many downstream tasks.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["fine-tuning","transfer-learning","llm"]},{"type":"DefinedTerm","name":"Guardrails","url":"https://www.aiwisdom.dev/glossary/guardrails","canonicalUrl":"https://www.aiwisdom.dev/glossary/guardrails","definition":"Input/output validation layers that prevent LLMs from generating harmful, off-topic, or incorrect responses.","summary":"Input/output validation layers that prevent LLMs from generating harmful, off-topic, or incorrect responses.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-injection","content-moderation","hallucination"]},{"type":"DefinedTerm","name":"Hallucination","url":"https://www.aiwisdom.dev/glossary/hallucination","canonicalUrl":"https://www.aiwisdom.dev/glossary/hallucination","definition":"When an LLM generates plausible-sounding but factually incorrect or fabricated information.","summary":"When an LLM generates plausible-sounding but factually incorrect or fabricated information.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["rag","grounding","guardrails"]},{"type":"DefinedTerm","name":"Hallucination Detection","url":"https://www.aiwisdom.dev/glossary/hallucination-detection","canonicalUrl":"https://www.aiwisdom.dev/glossary/hallucination-detection","definition":"Techniques to identify when an LLM generates factually incorrect or unsupported claims.","summary":"Techniques to identify when an LLM generates factually incorrect or unsupported claims.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["hallucination","rag","llm-evaluation","guardrails"]},{"type":"DefinedTerm","name":"HNSW (Hierarchical Navigable Small World)","url":"https://www.aiwisdom.dev/glossary/hnsw","canonicalUrl":"https://www.aiwisdom.dev/glossary/hnsw","definition":"The most popular approximate nearest-neighbour algorithm used in vector databases.","summary":"The most popular approximate nearest-neighbour algorithm used in vector databases.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["vector-database","cosine-similarity","ann"]},{"type":"DefinedTerm","name":"Hybrid Search","url":"https://www.aiwisdom.dev/glossary/hybrid-search","canonicalUrl":"https://www.aiwisdom.dev/glossary/hybrid-search","definition":"Combining vector (semantic) search and keyword (BM25) search for superior retrieval quality.","summary":"Combining vector (semantic) search and keyword (BM25) search for superior retrieval quality.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["semantic-search","bm25","rag","rrf","reranking"]},{"type":"DefinedTerm","name":"Inference","url":"https://www.aiwisdom.dev/glossary/inference","canonicalUrl":"https://www.aiwisdom.dev/glossary/inference","definition":"Running a trained model to generate predictions or outputs from new inputs.","summary":"Running a trained model to generate predictions or outputs from new inputs.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["model-serving","quantisation","latency"]},{"type":"DefinedTerm","name":"JSON Mode","url":"https://www.aiwisdom.dev/glossary/json-mode","canonicalUrl":"https://www.aiwisdom.dev/glossary/json-mode","definition":"An LLM API feature that constrains the model to output syntactically valid JSON.","summary":"An LLM API feature that constrains the model to output syntactically valid JSON.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["structured-output","tool-use","function-calling"]},{"type":"DefinedTerm","name":"Knowledge Graph","url":"https://www.aiwisdom.dev/glossary/knowledge-graph","canonicalUrl":"https://www.aiwisdom.dev/glossary/knowledge-graph","definition":"A graph database representing entities and relationships for structured, multi-hop knowledge retrieval.","summary":"A graph database representing entities and relationships for structured, multi-hop knowledge retrieval.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["rag","semantic-search","vector-database"]},{"type":"DefinedTerm","name":"LangGraph","url":"https://www.aiwisdom.dev/glossary/langgraph","canonicalUrl":"https://www.aiwisdom.dev/glossary/langgraph","definition":"A library for building stateful, graph-based agent workflows with persistence and human-in-the-loop support.","summary":"A library for building stateful, graph-based agent workflows with persistence and human-in-the-loop support.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","planning-loop","multi-agent","react-prompting"]},{"type":"DefinedTerm","name":"LangSmith","url":"https://www.aiwisdom.dev/glossary/langsmith","canonicalUrl":"https://www.aiwisdom.dev/glossary/langsmith","definition":"LangChain's observability platform for tracing, evaluating, and managing LLM applications.","summary":"LangChain's observability platform for tracing, evaluating, and managing LLM applications.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["llm-evaluation","phoenix","opentelemetry-ai","rag"]},{"type":"DefinedTerm","name":"LLM Evaluation (Evals)","url":"https://www.aiwisdom.dev/glossary/llm-evaluation","canonicalUrl":"https://www.aiwisdom.dev/glossary/llm-evaluation","definition":"Systematic measurement of LLM output quality using metrics, benchmarks, and automated judges.","summary":"Systematic measurement of LLM output quality using metrics, benchmarks, and automated judges.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["hallucination","online-evaluation","offline-evaluation","rag"]},{"type":"DefinedTerm","name":"LLM Streaming","url":"https://www.aiwisdom.dev/glossary/llm-streaming","canonicalUrl":"https://www.aiwisdom.dev/glossary/llm-streaming","definition":"Returning LLM tokens incrementally as they are generated instead of waiting for the full response.","summary":"Returning LLM tokens incrementally as they are generated instead of waiting for the full response.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["inference","model-serving","token","guardrails"]},{"type":"DefinedTerm","name":"Long-term Memory","url":"https://www.aiwisdom.dev/glossary/long-term-memory","canonicalUrl":"https://www.aiwisdom.dev/glossary/long-term-memory","definition":"External persistent memory that agents can query and update across multiple sessions.","summary":"External persistent memory that agents can query and update across multiple sessions.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["episodic-memory","short-term-memory","vector-database","rag"]},{"type":"DefinedTerm","name":"LoRA (Low-Rank Adaptation)","url":"https://www.aiwisdom.dev/glossary/lora","canonicalUrl":"https://www.aiwisdom.dev/glossary/lora","definition":"A parameter-efficient fine-tuning technique that trains small adapter matrices instead of full model weights.","summary":"A parameter-efficient fine-tuning technique that trains small adapter matrices instead of full model weights.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["fine-tuning","qlora","adapter"]},{"type":"DefinedTerm","name":"MCP (Model Context Protocol)","url":"https://www.aiwisdom.dev/glossary/mcp","canonicalUrl":"https://www.aiwisdom.dev/glossary/mcp","definition":"A standard protocol enabling AI agents to connect with tools, resources, and prompts across any provider.","summary":"A standard protocol enabling AI agents to connect with tools, resources, and prompts across any provider.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","tool-use","tool-registry","agentic-workflow"]},{"type":"DefinedTerm","name":"Meta-Prompting","url":"https://www.aiwisdom.dev/glossary/meta-prompting","canonicalUrl":"https://www.aiwisdom.dev/glossary/meta-prompting","definition":"Using an LLM to generate, optimise, or select prompts for another LLM task.","summary":"Using an LLM to generate, optimise, or select prompts for another LLM task.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-engineering","few-shot-learning","chain-of-thought"]},{"type":"DefinedTerm","name":"Model Serving","url":"https://www.aiwisdom.dev/glossary/model-serving","canonicalUrl":"https://www.aiwisdom.dev/glossary/model-serving","definition":"Infrastructure for deploying and running ML models in production with APIs.","summary":"Infrastructure for deploying and running ML models in production with APIs.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["inference","quantisation","vllm"]},{"type":"DefinedTerm","name":"Multi-Agent System","url":"https://www.aiwisdom.dev/glossary/multi-agent","canonicalUrl":"https://www.aiwisdom.dev/glossary/multi-agent","definition":"An architecture where multiple specialised AI agents collaborate to solve complex tasks.","summary":"An architecture where multiple specialised AI agents collaborate to solve complex tasks.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","orchestration"]},{"type":"DefinedTerm","name":"Offline Evaluation","url":"https://www.aiwisdom.dev/glossary/offline-evaluation","canonicalUrl":"https://www.aiwisdom.dev/glossary/offline-evaluation","definition":"Systematic evaluation of model quality using curated datasets before or outside production.","summary":"Systematic evaluation of model quality using curated datasets before or outside production.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["llm-evaluation","online-evaluation","rag","hallucination"]},{"type":"DefinedTerm","name":"Online Evaluation","url":"https://www.aiwisdom.dev/glossary/online-evaluation","canonicalUrl":"https://www.aiwisdom.dev/glossary/online-evaluation","definition":"Real-time evaluation of LLM outputs in production using automated judges or user feedback signals.","summary":"Real-time evaluation of LLM outputs in production using automated judges or user feedback signals.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["llm-evaluation","offline-evaluation","langsmith","phoenix"]},{"type":"DefinedTerm","name":"OpenTelemetry for AI","url":"https://www.aiwisdom.dev/glossary/opentelemetry-ai","canonicalUrl":"https://www.aiwisdom.dev/glossary/opentelemetry-ai","definition":"Using OpenTelemetry semantic conventions to trace and instrument LLM systems for observability.","summary":"Using OpenTelemetry semantic conventions to trace and instrument LLM systems for observability.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["langsmith","phoenix","llm-evaluation"]},{"type":"DefinedTerm","name":"Phoenix (Arize)","url":"https://www.aiwisdom.dev/glossary/phoenix","canonicalUrl":"https://www.aiwisdom.dev/glossary/phoenix","definition":"An open-source LLM observability platform for trace analysis, RAG debugging, and embedding drift detection.","summary":"An open-source LLM observability platform for trace analysis, RAG debugging, and embedding drift detection.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["langsmith","opentelemetry-ai","llm-evaluation","rag"]},{"type":"DefinedTerm","name":"Planning Loop","url":"https://www.aiwisdom.dev/glossary/planning-loop","canonicalUrl":"https://www.aiwisdom.dev/glossary/planning-loop","definition":"The core agentic cycle where an LLM plans actions, executes them, observes results, and re-plans iteratively.","summary":"The core agentic cycle where an LLM plans actions, executes them, observes results, and re-plans iteratively.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","react-prompting","agentic-workflow","tool-use"]},{"type":"DefinedTerm","name":"Prompt Engineering","url":"https://www.aiwisdom.dev/glossary/prompt-engineering","canonicalUrl":"https://www.aiwisdom.dev/glossary/prompt-engineering","definition":"The practice of designing and optimising input prompts to elicit desired outputs from LLMs.","summary":"The practice of designing and optimising input prompts to elicit desired outputs from LLMs.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["chain-of-thought","few-shot-learning","system-prompt"]},{"type":"DefinedTerm","name":"Prompt Injection","url":"https://www.aiwisdom.dev/glossary/prompt-injection","canonicalUrl":"https://www.aiwisdom.dev/glossary/prompt-injection","definition":"An attack where malicious input manipulates an LLM into ignoring its instructions or leaking system prompts.","summary":"An attack where malicious input manipulates an LLM into ignoring its instructions or leaking system prompts.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["guardrails","system-prompt","llm-security"]},{"type":"DefinedTerm","name":"QLoRA (Quantised LoRA)","url":"https://www.aiwisdom.dev/glossary/qlora","canonicalUrl":"https://www.aiwisdom.dev/glossary/qlora","definition":"Combines 4-bit quantisation with LoRA to enable fine-tuning of large models on consumer GPUs.","summary":"Combines 4-bit quantisation with LoRA to enable fine-tuning of large models on consumer GPUs.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["lora","fine-tuning","quantisation"]},{"type":"DefinedTerm","name":"Quantisation","url":"https://www.aiwisdom.dev/glossary/quantisation","canonicalUrl":"https://www.aiwisdom.dev/glossary/quantisation","definition":"Reducing model precision (e.g., 32-bit to 4-bit) to decrease memory usage and increase inference speed.","summary":"Reducing model precision (e.g., 32-bit to 4-bit) to decrease memory usage and increase inference speed.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["qlora","inference","model-serving"]},{"type":"DefinedTerm","name":"RAG (Retrieval-Augmented Generation)","url":"https://www.aiwisdom.dev/glossary/rag","canonicalUrl":"https://www.aiwisdom.dev/glossary/rag","definition":"A pattern that grounds LLM responses in retrieved external documents to reduce hallucination.","summary":"A pattern that grounds LLM responses in retrieved external documents to reduce hallucination.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["vector-database","embedding","chunking","semantic-search"]},{"type":"DefinedTerm","name":"ReAct Prompting","url":"https://www.aiwisdom.dev/glossary/react-prompting","canonicalUrl":"https://www.aiwisdom.dev/glossary/react-prompting","definition":"A prompting paradigm that interleaves Reasoning and Acting steps, enabling LLMs to think before invoking tools.","summary":"A prompting paradigm that interleaves Reasoning and Acting steps, enabling LLMs to think before invoking tools.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["chain-of-thought","tool-use","agent","planning-loop"]},{"type":"DefinedTerm","name":"Reciprocal Rank Fusion (RRF)","url":"https://www.aiwisdom.dev/glossary/rrf","canonicalUrl":"https://www.aiwisdom.dev/glossary/rrf","definition":"A rank-fusion algorithm that merges multiple ranked result lists into a single reliable combined ranking.","summary":"A rank-fusion algorithm that merges multiple ranked result lists into a single reliable combined ranking.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["hybrid-search","bm25","semantic-search","rag"]},{"type":"DefinedTerm","name":"Red Teaming (LLMs)","url":"https://www.aiwisdom.dev/glossary/red-teaming","canonicalUrl":"https://www.aiwisdom.dev/glossary/red-teaming","definition":"Adversarial testing of LLM systems to systematically discover safety, security, and reliability vulnerabilities.","summary":"Adversarial testing of LLM systems to systematically discover safety, security, and reliability vulnerabilities.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-injection","guardrails","content-safety"]},{"type":"DefinedTerm","name":"Reranking","url":"https://www.aiwisdom.dev/glossary/reranking","canonicalUrl":"https://www.aiwisdom.dev/glossary/reranking","definition":"Applying a cross-encoder model to rescore retrieved documents, improving RAG retrieval precision.","summary":"Applying a cross-encoder model to rescore retrieved documents, improving RAG retrieval precision.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["rag","semantic-search","hybrid-search","tiered-retrieval"]},{"type":"DefinedTerm","name":"RLHF (Reinforcement Learning from Human Feedback)","url":"https://www.aiwisdom.dev/glossary/rlhf","canonicalUrl":"https://www.aiwisdom.dev/glossary/rlhf","definition":"A training technique that aligns LLM behaviour with human values using human preference annotations.","summary":"A training technique that aligns LLM behaviour with human values using human preference annotations.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["fine-tuning","lora","foundation-model"]},{"type":"DefinedTerm","name":"Semantic Kernel","url":"https://www.aiwisdom.dev/glossary/semantic-kernel","canonicalUrl":"https://www.aiwisdom.dev/glossary/semantic-kernel","definition":"Microsoft's plugin-based SDK for building AI-powered applications in C#, Python, and Java — now in maintenance mode, superseded by Microsoft Agent Framework.","summary":"Microsoft's plugin-based SDK for building AI-powered applications in C#, Python, and Java — now in maintenance mode, superseded by Microsoft Agent Framework.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","tool-use","rag","planning-loop"]},{"type":"DefinedTerm","name":"Semantic Search","url":"https://www.aiwisdom.dev/glossary/semantic-search","canonicalUrl":"https://www.aiwisdom.dev/glossary/semantic-search","definition":"Search based on meaning rather than keyword matching, using vector similarity of embeddings.","summary":"Search based on meaning rather than keyword matching, using vector similarity of embeddings.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["embedding","vector-database","cosine-similarity","hybrid-search"]},{"type":"DefinedTerm","name":"Short-term Memory (In-Context)","url":"https://www.aiwisdom.dev/glossary/short-term-memory","canonicalUrl":"https://www.aiwisdom.dev/glossary/short-term-memory","definition":"In-context information available to an agent within one session — limited by the model's context window.","summary":"In-context information available to an agent within one session — limited by the model's context window.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["context-window","long-term-memory","episodic-memory","chunking"]},{"type":"DefinedTerm","name":"Structured Output","url":"https://www.aiwisdom.dev/glossary/structured-output","canonicalUrl":"https://www.aiwisdom.dev/glossary/structured-output","definition":"Techniques for constraining LLM responses to follow a specific schema (JSON, XML, etc.).","summary":"Techniques for constraining LLM responses to follow a specific schema (JSON, XML, etc.).","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["function-calling","tool-use","json-mode"]},{"type":"DefinedTerm","name":"System Prompt","url":"https://www.aiwisdom.dev/glossary/system-prompt","canonicalUrl":"https://www.aiwisdom.dev/glossary/system-prompt","definition":"Instructions provided to an LLM that define its behaviour, personality, and constraints.","summary":"Instructions provided to an LLM that define its behaviour, personality, and constraints.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["prompt-engineering","prompt-injection","guardrails"]},{"type":"DefinedTerm","name":"Token","url":"https://www.aiwisdom.dev/glossary/token","canonicalUrl":"https://www.aiwisdom.dev/glossary/token","definition":"The smallest unit of text processed by an LLM — roughly 3/4 of a word in English.","summary":"The smallest unit of text processed by an LLM — roughly 3/4 of a word in English.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["context-window","tokeniser","bpe"]},{"type":"DefinedTerm","name":"Token Economics","url":"https://www.aiwisdom.dev/glossary/token-economics","canonicalUrl":"https://www.aiwisdom.dev/glossary/token-economics","definition":"The discipline of managing LLM token consumption to control costs and stay within context limits.","summary":"The discipline of managing LLM token consumption to control costs and stay within context limits.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["token","context-window","inference","ai-gateway","semantic-cache"]},{"type":"DefinedTerm","name":"Tool Registry","url":"https://www.aiwisdom.dev/glossary/tool-registry","canonicalUrl":"https://www.aiwisdom.dev/glossary/tool-registry","definition":"A catalog of tools an AI agent can discover and invoke, with metadata for selection and usage.","summary":"A catalog of tools an AI agent can discover and invoke, with metadata for selection and usage.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["tool-use","mcp","agent","agentic-workflow"]},{"type":"DefinedTerm","name":"Tool Use (Function Calling)","url":"https://www.aiwisdom.dev/glossary/tool-use","canonicalUrl":"https://www.aiwisdom.dev/glossary/tool-use","definition":"Enabling LLMs to invoke external functions, APIs, or tools based on user intent.","summary":"Enabling LLMs to invoke external functions, APIs, or tools based on user intent.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["agent","structured-output","function-calling"]},{"type":"DefinedTerm","name":"Transformer","url":"https://www.aiwisdom.dev/glossary/transformer","canonicalUrl":"https://www.aiwisdom.dev/glossary/transformer","definition":"The neural network architecture behind modern LLMs, based on self-attention mechanisms.","summary":"The neural network architecture behind modern LLMs, based on self-attention mechanisms.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["attention","llm","foundation-model"]},{"type":"DefinedTerm","name":"Tree of Thought (ToT)","url":"https://www.aiwisdom.dev/glossary/tree-of-thought","canonicalUrl":"https://www.aiwisdom.dev/glossary/tree-of-thought","definition":"A prompting strategy that explores multiple reasoning branches in parallel to find the best path to a solution.","summary":"A prompting strategy that explores multiple reasoning branches in parallel to find the best path to a solution.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["chain-of-thought","prompt-engineering","react-prompting"]},{"type":"DefinedTerm","name":"Vector Database","url":"https://www.aiwisdom.dev/glossary/vector-database","canonicalUrl":"https://www.aiwisdom.dev/glossary/vector-database","definition":"A database optimised for storing and querying high-dimensional embedding vectors.","summary":"A database optimised for storing and querying high-dimensional embedding vectors.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["embedding","rag","semantic-search","hnsw"]},{"type":"DefinedTerm","name":"vLLM","url":"https://www.aiwisdom.dev/glossary/vllm","canonicalUrl":"https://www.aiwisdom.dev/glossary/vllm","definition":"A high-throughput, memory-efficient LLM inference engine using PagedAttention for GPU KV-cache management.","summary":"A high-throughput, memory-efficient LLM inference engine using PagedAttention for GPU KV-cache management.","dateModified":"2026-10-15T00:00:00.000Z","relatedTerms":["model-serving","inference","quantisation"]}],"patterns":[{"type":"TechArticle","name":"Circuit Breaker for LLMs","url":"https://www.aiwisdom.dev/patterns/circuit-breaker-llm","canonicalUrl":"https://www.aiwisdom.dev/patterns/circuit-breaker-llm","summary":"Prevent cascading failures by temporarily stopping requests to a failing LLM provider and automatically recovering when it stabilises.","abstract":"Prevent cascading failures by temporarily stopping requests to a failing LLM provider and automatically recovering when it stabilises.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Context Compression","url":"https://www.aiwisdom.dev/patterns/context-compression","canonicalUrl":"https://www.aiwisdom.dev/patterns/context-compression","summary":"Compress conversation history or retrieved documents to fit within context window limits while preserving critical information.","abstract":"Compress conversation history or retrieved documents to fit within context window limits while preserving critical information.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Evaluation-Driven Development (EDD)","url":"https://www.aiwisdom.dev/patterns/evaluation-driven-development","canonicalUrl":"https://www.aiwisdom.dev/patterns/evaluation-driven-development","summary":"Build eval suites before building AI features, then measure quality continuously — the test-driven development of AI systems.","abstract":"Build eval suites before building AI features, then measure quality continuously — the test-driven development of AI systems.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Fallback Chain","url":"https://www.aiwisdom.dev/patterns/fallback-chain","canonicalUrl":"https://www.aiwisdom.dev/patterns/fallback-chain","summary":"Route LLM requests through a prioritised list of models/providers, falling back to alternatives on rate limits, errors, or latency SLO violations.","abstract":"Route LLM requests through a prioritised list of models/providers, falling back to alternatives on rate limits, errors, or latency SLO violations.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"GraphRAG","url":"https://www.aiwisdom.dev/patterns/graphrag","canonicalUrl":"https://www.aiwisdom.dev/patterns/graphrag","summary":"Augment vector search RAG with a knowledge graph layer to enable multi-hop reasoning over entity relationships.","abstract":"Augment vector search RAG with a knowledge graph layer to enable multi-hop reasoning over entity relationships.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Guardrail Sandwich","url":"https://www.aiwisdom.dev/patterns/guardrail-sandwich","canonicalUrl":"https://www.aiwisdom.dev/patterns/guardrail-sandwich","summary":"Wrap every LLM call with input validation and output validation layers to enforce safety, quality, and schema compliance.","abstract":"Wrap every LLM call with input validation and output validation layers to enforce safety, quality, and schema compliance.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Human-in-the-Loop (HITL)","url":"https://www.aiwisdom.dev/patterns/human-in-the-loop","canonicalUrl":"https://www.aiwisdom.dev/patterns/human-in-the-loop","summary":"Insert human approval checkpoints in agent workflows for high-stakes, irreversible, or high-uncertainty actions.","abstract":"Insert human approval checkpoints in agent workflows for high-stakes, irreversible, or high-uncertainty actions.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Intent Router","url":"https://www.aiwisdom.dev/patterns/intent-router","canonicalUrl":"https://www.aiwisdom.dev/patterns/intent-router","summary":"Classify user intent first, then route to specialised handlers — cheaper models for simple tasks, expensive models for complex ones.","abstract":"Classify user intent first, then route to specialised handlers — cheaper models for simple tasks, expensive models for complex ones.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Plan and Execute","url":"https://www.aiwisdom.dev/patterns/plan-and-execute","canonicalUrl":"https://www.aiwisdom.dev/patterns/plan-and-execute","summary":"Separate planning (powerful model) from execution (cheaper models) for complex multi-step tasks, reducing cost while maintaining quality.","abstract":"Separate planning (powerful model) from execution (cheaper models) for complex multi-step tasks, reducing cost while maintaining quality.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Prompt Versioning","url":"https://www.aiwisdom.dev/patterns/prompt-versioning","canonicalUrl":"https://www.aiwisdom.dev/patterns/prompt-versioning","summary":"Manage prompts as code artifacts with version control, review, and rollback — treating prompt changes with the same rigour as code changes.","abstract":"Manage prompts as code artifacts with version control, review, and rollback — treating prompt changes with the same rigour as code changes.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"ReAct Agent","url":"https://www.aiwisdom.dev/patterns/react-agent","canonicalUrl":"https://www.aiwisdom.dev/patterns/react-agent","summary":"Interleave Thought → Action → Observation cycles so the LLM reasons before invoking tools and adapts based on results.","abstract":"Interleave Thought → Action → Observation cycles so the LLM reasons before invoking tools and adapts based on results.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Reflection Pattern","url":"https://www.aiwisdom.dev/patterns/reflection-pattern","canonicalUrl":"https://www.aiwisdom.dev/patterns/reflection-pattern","summary":"Have the agent critique its own output and iteratively refine it before returning the final result.","abstract":"Have the agent critique its own output and iteratively refine it before returning the final result.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Semantic Cache","url":"https://www.aiwisdom.dev/patterns/semantic-cache","canonicalUrl":"https://www.aiwisdom.dev/patterns/semantic-cache","summary":"Cache LLM responses by semantic similarity of the prompt rather than exact string match, reducing cost and latency for similar queries.","abstract":"Cache LLM responses by semantic similarity of the prompt rather than exact string match, reducing cost and latency for similar queries.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Streaming Pipeline","url":"https://www.aiwisdom.dev/patterns/streaming-pipeline","canonicalUrl":"https://www.aiwisdom.dev/patterns/streaming-pipeline","summary":"Stream LLM tokens through a processing pipeline to the client, showing output progressively and enabling real-time safety checks.","abstract":"Stream LLM tokens through a processing pipeline to the client, showing output progressively and enabling real-time safety checks.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Tenant Isolator","url":"https://www.aiwisdom.dev/patterns/tenant-isolator","canonicalUrl":"https://www.aiwisdom.dev/patterns/tenant-isolator","summary":"Ensure strict data isolation between tenants in multi-tenant LLM applications through namespace partitioning and context boundaries.","abstract":"Ensure strict data isolation between tenants in multi-tenant LLM applications through namespace partitioning and context boundaries.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Tiered Retrieval","url":"https://www.aiwisdom.dev/patterns/tiered-retrieval","canonicalUrl":"https://www.aiwisdom.dev/patterns/tiered-retrieval","summary":"Combine keyword search (BM25), semantic search (vectors), and re-ranking in a multi-stage pipeline for optimal RAG quality.","abstract":"Combine keyword search (BM25), semantic search (vectors), and re-ranking in a multi-stage pipeline for optimal RAG quality.","dateModified":"2026-10-15T00:00:00.000Z"},{"type":"TechArticle","name":"Token Budget Gate","url":"https://www.aiwisdom.dev/patterns/token-budget-gate","canonicalUrl":"https://www.aiwisdom.dev/patterns/token-budget-gate","summary":"Enforce per-user, per-tenant, or per-request token limits to prevent runaway costs in multi-tenant LLM systems.","abstract":"Enforce per-user, per-tenant, or per-request token limits to prevent runaway costs in multi-tenant LLM systems.","dateModified":"2026-10-15T00:00:00.000Z"}],"decisions":[{"type":"DecisionRecord","title":"ADR-013: Multi-Tenant Data Isolation Strategy for RAG Pipelines","url":"https://www.aiwisdom.dev/case-studies/multi-tenant-data-isolation","canonicalUrl":"https://www.aiwisdom.dev/case-studies/multi-tenant-data-isolation","status":"proposed","datePublished":"2026-04-20","dateModified":"2026-04-20","summary":"As we expand from a single-tenant learning platform to supporting teams and organisations, we need to isolate content data between tenants in our RAG pipeline. A data leak where Tenant A's proprietary content appears in Tenant B's responses would be a critical trust and compliance failure.","abstract":"As we expand from a single-tenant learning platform to supporting teams and organisations, we need to isolate content data between tenants in our RAG pipeline. A data leak where Tenant A's proprietary content appears in Tenant B's responses would be a critical trust and compliance failure."},{"type":"DecisionRecord","title":"ADR-012: Content Database Migration — Legacy PostgreSQL to Neon","url":"https://www.aiwisdom.dev/case-studies/content-database-migration-neon","canonicalUrl":"https://www.aiwisdom.dev/case-studies/content-database-migration-neon","status":"accepted","datePublished":"2026-04-15","dateModified":"2026-04-15","summary":"Our platform content (topics, domains, glossary terms, patterns, decisions) had been stored in a legacy PostgreSQL setup. As our content grows and we add AI features requiring vector search and serverless edge deployments, we need to re-evaluate our database choice. Key drivers: better Vercel Edge compatibility, cost predictability, and branching support for content staging.","abstract":"Our platform content (topics, domains, glossary terms, patterns, decisions) had been stored in a legacy PostgreSQL setup. As our content grows and we add AI features requiring vector search and serverless edge deployments, we need to re-evaluate our database choice. Key drivers: better Vercel Edge compatibility, cost predictability, and branching support for content staging."},{"type":"DecisionRecord","title":"ADR-011: Testing Strategy for LLM-Powered Features","url":"https://www.aiwisdom.dev/case-studies/llm-testing-strategy","canonicalUrl":"https://www.aiwisdom.dev/case-studies/llm-testing-strategy","status":"accepted","datePublished":"2026-04-08","dateModified":"2026-04-08","summary":"Traditional unit and integration tests are insufficient for AI features because LLM outputs are non-deterministic. We need a testing strategy that gives us confidence in AI feature quality without requiring expensive human review of every change.","abstract":"Traditional unit and integration tests are insufficient for AI features because LLM outputs are non-deterministic. We need a testing strategy that gives us confidence in AI feature quality without requiring expensive human review of every change."},{"type":"DecisionRecord","title":"ADR-010: Tool Integration Protocol — MCP vs Custom Tool Calling","url":"https://www.aiwisdom.dev/case-studies/mcp-vs-custom-tools","canonicalUrl":"https://www.aiwisdom.dev/case-studies/mcp-vs-custom-tools","status":"accepted","datePublished":"2026-04-01","dateModified":"2026-04-01","summary":"Our AI agents need to call external tools — content search, user data lookup, web scraping, code execution. We must decide whether to build custom tool integrations using OpenAI function calling / Vercel AI SDK tools, or adopt the Model Context Protocol (MCP) as a standard integration layer.","abstract":"Our AI agents need to call external tools — content search, user data lookup, web scraping, code execution. We must decide whether to build custom tool integrations using OpenAI function calling / Vercel AI SDK tools, or adopt the Model Context Protocol (MCP) as a standard integration layer."},{"type":"DecisionRecord","title":"ADR-009: Agent Memory Architecture — In-Context vs External Memory","url":"https://www.aiwisdom.dev/case-studies/agent-memory-architecture","canonicalUrl":"https://www.aiwisdom.dev/case-studies/agent-memory-architecture","status":"accepted","datePublished":"2026-03-20","dateModified":"2026-03-20","summary":"Our AI agents need memory to maintain context across multi-step tasks and across user sessions. We need to decide how to implement short-term (within session) and long-term (cross-session) memory, balancing recall quality, cost, complexity, and privacy.","abstract":"Our AI agents need memory to maintain context across multi-step tasks and across user sessions. We need to decide how to implement short-term (within session) and long-term (cross-session) memory, balancing recall quality, cost, complexity, and privacy."},{"type":"DecisionRecord","title":"ADR-008: AI Observability Platform — LangSmith vs Phoenix vs Custom OpenTelemetry","url":"https://www.aiwisdom.dev/case-studies/ai-observability-platform","canonicalUrl":"https://www.aiwisdom.dev/case-studies/ai-observability-platform","status":"accepted","datePublished":"2026-03-12","dateModified":"2026-03-12","summary":"We need an observability platform to trace LLM calls, evaluate output quality, debug RAG retrieval, and monitor production AI quality over time. Without observability, we are flying blind on LLM quality, cost, and reliability.","abstract":"We need an observability platform to trace LLM calls, evaluate output quality, debug RAG retrieval, and monitor production AI quality over time. Without observability, we are flying blind on LLM quality, cost, and reliability."},{"type":"DecisionRecord","title":"ADR-007: LLM Streaming Architecture — SSE vs WebSocket vs Polling","url":"https://www.aiwisdom.dev/case-studies/llm-streaming-architecture","canonicalUrl":"https://www.aiwisdom.dev/case-studies/llm-streaming-architecture","status":"accepted","datePublished":"2026-03-05","dateModified":"2026-03-05","summary":"Our AI chat and content generation features need to stream LLM responses to users rather than waiting for full completion. We need to choose between Server-Sent Events (SSE), WebSockets, and polling for delivering streaming tokens from the LLM to the browser.","abstract":"Our AI chat and content generation features need to stream LLM responses to users rather than waiting for full completion. We need to choose between Server-Sent Events (SSE), WebSockets, and polling for delivering streaming tokens from the LLM to the browser."},{"type":"DecisionRecord","title":"ADR-006: Agentic Workflow Framework — LangGraph vs Direct Implementation","url":"https://www.aiwisdom.dev/case-studies/agentic-framework-selection","canonicalUrl":"https://www.aiwisdom.dev/case-studies/agentic-framework-selection","status":"accepted","datePublished":"2026-02-28","dateModified":"2026-02-28","summary":"We are building agentic features — multi-step AI workflows that plan, use tools, and iterate. We need to decide whether to use LangGraph (stateful graph-based orchestration), build directly on the model APIs with lightweight wrappers, or adopt another framework like AutoGen.","abstract":"We are building agentic features — multi-step AI workflows that plan, use tools, and iterate. We need to decide whether to use LangGraph (stateful graph-based orchestration), build directly on the model APIs with lightweight wrappers, or adopt another framework like AutoGen."},{"type":"DecisionRecord","title":"ADR-005: Embedding Model Selection","url":"https://www.aiwisdom.dev/case-studies/embedding-model-selection","canonicalUrl":"https://www.aiwisdom.dev/case-studies/embedding-model-selection","status":"accepted","datePublished":"2026-02-15","dateModified":"2026-02-15","summary":"We need an embedding model for our RAG pipeline. The model determines retrieval quality, vector dimensions (affects storage), and API cost.","abstract":"We need an embedding model for our RAG pipeline. The model determines retrieval quality, vector dimensions (affects storage), and API cost."},{"type":"DecisionRecord","title":"ADR-004: Orchestration Framework — LangChain vs Semantic Kernel","url":"https://www.aiwisdom.dev/case-studies/langchain-vs-semantic-kernel","canonicalUrl":"https://www.aiwisdom.dev/case-studies/langchain-vs-semantic-kernel","status":"accepted","datePublished":"2026-02-10","dateModified":"2026-02-10","summary":"We need an orchestration framework for building RAG pipelines, agent workflows, and tool-calling chains. The two leading options are LangChain (Python/JS) and Semantic Kernel (C#/.NET/Python).","abstract":"We need an orchestration framework for building RAG pipelines, agent workflows, and tool-calling chains. The two leading options are LangChain (Python/JS) and Semantic Kernel (C#/.NET/Python)."},{"type":"DecisionRecord","title":"ADR-003: Primary LLM Selection — GPT-4.1 vs Claude 3.5","url":"https://www.aiwisdom.dev/case-studies/gpt4-vs-claude-primary-model","canonicalUrl":"https://www.aiwisdom.dev/case-studies/gpt4-vs-claude-primary-model","status":"accepted","datePublished":"2026-02-01","dateModified":"2026-02-01","summary":"We need to select a primary LLM for our platform's AI features (article assistance, search, code generation). The choice affects cost, quality, and vendor dependency.","abstract":"We need to select a primary LLM for our platform's AI features (article assistance, search, code generation). The choice affects cost, quality, and vendor dependency."},{"type":"DecisionRecord","title":"ADR-002: Vector Database Selection","url":"https://www.aiwisdom.dev/case-studies/vector-database-selection","canonicalUrl":"https://www.aiwisdom.dev/case-studies/vector-database-selection","status":"accepted","datePublished":"2026-01-15","dateModified":"2026-01-15","summary":"We need a vector database for our RAG pipeline. Options range from managed services (Pinecone, Weaviate Cloud) to integrated solutions (pgvector in our existing PostgreSQL).","abstract":"We need a vector database for our RAG pipeline. Options range from managed services (Pinecone, Weaviate Cloud) to integrated solutions (pgvector in our existing PostgreSQL)."},{"type":"DecisionRecord","title":"ADR-001: RAG vs Fine-Tuning for Domain Knowledge","url":"https://www.aiwisdom.dev/case-studies/rag-vs-fine-tuning","canonicalUrl":"https://www.aiwisdom.dev/case-studies/rag-vs-fine-tuning","status":"accepted","datePublished":"2026-01-10","dateModified":"2026-01-10","summary":"We need to give our LLM domain-specific knowledge about AI engineering tools, patterns, and best practices. The model must provide accurate, up-to-date answers grounded in our curated content.","abstract":"We need to give our LLM domain-specific knowledge about AI engineering tools, patterns, and best practices. The model must provide accurate, up-to-date answers grounded in our curated content."}]}}