{"id":204,"date":"2025-08-12T20:23:40","date_gmt":"2025-08-12T20:23:40","guid":{"rendered":"https:\/\/aiinfrahub.com\/about-us\/?p=204"},"modified":"2025-08-12T20:40:26","modified_gmt":"2025-08-12T20:40:26","slug":"pipeline-companion-an-aws-strands-agent-for-data-pipeline-monitoring","status":"publish","type":"post","link":"https:\/\/aiinfrahub.com\/about-us\/pipeline-companion-an-aws-strands-agent-for-data-pipeline-monitoring\/","title":{"rendered":"Pipeline Companion &#8211; an AWS Strands Agent for Data Pipeline Monitoring"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Problem Statement<\/h2>\n\n\n\n<p>Modern data pipelines are built on AWS services such as Glue, Lambda, Step Functions. Testing these pipelines\u2014especially under schema change, scale, and integration demands\u2014is a major bottleneck.<\/p>\n\n\n\n<p>Manual testing is slow, prone to oversight, and unable to adapt to dynamic, distributed pipeline environments.<\/p>\n\n\n\n<p>Data pipeline failures in production environments cost organizations time, money and schedule.<\/p>\n\n\n\n<p><strong>More important<\/strong>, debugging and troubleshooting pipeline failures gives engineer a stressed and hectic time.<\/p>\n\n\n\n<p><strong>Survey Insights wrt Scale of the Problem:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>$3.1 trillion in annual losses globally due to poor data quality (IBM, 2023)\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hbr.org\/2016\/09\/bad-data-costs-the-u-s-3-trillion-per-year\"><u>https:\/\/hbr.org\/2016\/09\/bad-data-costs-the-u-s-3-trillion-per-year<\/u><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Average downtime cost of $5,600 per minute for data-dependent applications\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.the20.com\/blog\/the-cost-of-it-downtime\/\"><u>https:\/\/www.the20.com\/blog\/the-cost-of-it-downtime<\/u><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manual testing overhead&nbsp;consuming 40-60% of data engineering resources\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.rimo3.com\/blog\/the-hidden-cost-of-manual-testing-why-your-it-team-is-burning-out\"><u>https:\/\/www.rimo3.com\/blog\/the-hidden-cost-of-manual-testing-why-your-it-team-is-burning-out<\/u><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Core Challenges and Issues<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"509\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-26.png\" alt=\"\" class=\"wp-image-207\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-26.png 783w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-26-300x195.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-26-768x499.png 768w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Target User<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"807\" height=\"409\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-27.png\" alt=\"\" class=\"wp-image-208\" style=\"width:468px;height:auto\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-27.png 807w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-27-300x152.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-27-768x389.png 768w\" sizes=\"auto, (max-width: 807px) 100vw, 807px\" \/><\/figure><\/div>\n\n\n<div style=\"height:53px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Solution and Technical Components<\/strong><\/h2>\n\n\n\n<p>Pipeline Companion is an AI-powered autonomous testing framework that redesigns how organizations test and validate AWS data pipelines. Integrating Model Context Protocol with agents, it automatically understands pipeline logic, generates comprehensive test scenarios, executes tests in isolated environments, and provides diagnostics.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Features of Pipeline companion<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"416\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-28.png\" alt=\"\" class=\"wp-image-212\" style=\"width:517px;height:auto\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-28.png 837w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-28-300x149.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-28-768x382.png 768w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture <\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"532\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-29.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-29.png 1000w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-29-300x160.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-29-768x409.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"857\" height=\"756\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-31.png\" alt=\"\" class=\"wp-image-216\" style=\"width:414px;height:auto\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-31.png 857w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-31-300x265.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-31-768x677.png 768w\" sizes=\"auto, (max-width: 857px) 100vw, 857px\" \/><\/figure><\/div>\n\n\n<p class=\"has-text-align-left\"><strong>Flow of a typical event:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"337\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-32.png\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-32.png 920w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-32-300x110.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-32-768x281.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Agent Development<\/h2>\n\n\n\n<p><strong>Github<\/strong>: <a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\">https:\/\/github.com\/juggarnautss\/Pipeline_Agent<\/a><\/p>\n\n\n\n<p>Here\u2019s a code skeleton and explanation:<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/main.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/main.py\" target=\"_blank\" rel=\"noreferrer noopener\">main<\/a><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/main.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/main.py\">.<\/a><a href=\"vscode-file:\/\/vscode-app\/c:\/Users\/sshaikh1\/AppData\/Local\/Programs\/Microsoft%20VS%20Code\/resources\/app\/out\/vs\/code\/electron-browser\/workbench\/workbench.html\">py<\/a><\/strong>: Entry point. Initializes the orchestrator and starts CLI\/web\/demo modes.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># ...existing code...\nfrom agents.orchestrator import AgentOrchestrator\n\ndef main():\n    companion = AgentOrchestrator()\n    # CLI or web entry point\n    # Example: companion.chat(\"Analyze my Glue job called data-processor\")\n# ...existing code...\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/orchestrator.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/orchestrator.py\" target=\"_blank\" rel=\"noreferrer noopener\">orchestrator<\/a><a href=\"vscode-file:\/\/vscode-app\/c:\/Users\/sshaikh1\/AppData\/Local\/Programs\/Microsoft%20VS%20Code\/resources\/app\/out\/vs\/code\/electron-browser\/workbench\/workbench.html\">.py<\/a><\/strong>: Central router. Decides which specialized agent(s) handle each user request.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># ...existing code...\nclass AgentOrchestrator:\n    def __init__(self):\n        self.analyzer = AnalyzerAgent()\n        self.tester = TestAgent()\n        self.diagnostician = DiagnosticAgent()\n        self.reporter = ReportingAgent()\n        self.test_executor = TestExecutionAgent()\n    \n    def process_user_request(self, user_prompt: str) -&gt; str:\n        # Route request to appropriate agent(s)\n        pass\n\n    def chat(self, message: str) -&gt; str:\n        return self.process_user_request(message)\n# ...existing code...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/base_agent.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/base_agent.py\" target=\"_blank\" rel=\"noreferrer noopener\">base_agent.py<\/a><\/strong>: Abstract base for all agents. Handles model setup, MCP integration, and tool management.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># ...existing code...\nclass BaseAgent(ABC):\n    def __init__(self):\n        self.model = BedrockModel(...)\n        self.mcp_manager = get_unified_mcp_manager()\n        self.mcp_status = self.mcp_manager.get_server_status()\n    \n    @abstractmethod\n    def get_tools(self):\n        pass\n    \n    @abstractmethod\n    def get_system_prompt(self) -&gt; str:\n        pass\n    \n    def process(self, message: str) -&gt; str:\n        agent = Agent(\n            model=self.model,\n            tools=self.get_agent_tools(),\n            system_prompt=self.get_enhanced_system_prompt()\n        )\n        result = agent(message)\n        return result.message if hasattr(result, 'message') else str(result)\n# ...existing code...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/analyzer_agent.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/analyzer_agent.py\" target=\"_blank\" rel=\"noreferrer noopener\">analyzer_agent.py<\/a><\/strong>: Example specialized agent. Implements analysis tools and prompts.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># ...existing code...\nclass AnalyzerAgent(BaseAgent):\n    def get_tools(self):\n        # Return analysis tools and MCP tools\n        pass\n\n    def get_system_prompt(self) -&gt; str:\n        # Return prompt for analysis tasks\n        pass\n\n    @tool\n    def _analyze_pipeline_health(self, health_request: Dict&#91;str, Any]) -&gt; str:\n        # Health check logic\n        pass\n# ...existing code...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/mcp_server\/unified_mcp_manager.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/mcp_server\/unified_mcp_manager.py\" target=\"_blank\" rel=\"noreferrer noopener\">unified_mcp_manager.py<\/a><\/strong>: Manages connections to AWS MCP servers (Glue, Lambda, CloudWatch) for deep pipeline insights.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># ...existing code...\nclass UnifiedMCPManager:\n    def __init__(self):\n        self.cloudwatch = CloudWatchMCPServer()\n        self.glue = GlueMCPServer()\n        self.lambda_server = LambdaMCPServer()\n        self._initialize_servers()\n    \n    def get_server_status(self) -&gt; Dict&#91;str, Any]:\n        # Return status of MCP servers\n        pass\n# ...existing code...<\/code><\/pre>\n\n\n\n<p>Each agent (Analyzer, Tester, Diagnostic, Reporting, Test Execution) inherits from&nbsp;<a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/base_agent.py\" data-type=\"link\" data-id=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\/blob\/main\/agents\/base_agent.py\">BaseAgent&nbsp;<\/a>and provides domain-specific tools and prompts. The orchestrator coordinates single or multi-agent workflows based on user intent.<\/p>\n\n\n\n<div style=\"height:58px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">User Interface<\/h2>\n\n\n\n<p><strong>Command Line Interface:<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"201\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-34.png\" alt=\"\" class=\"wp-image-225\" style=\"width:540px;height:auto\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-34.png 422w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-34-300x143.png 300w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure><\/div>\n\n\n<p><strong>GUI:<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"269\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-35.png\" alt=\"\" class=\"wp-image-226\" style=\"width:523px;height:auto\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-35.png 448w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-35-300x180.png 300w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/figure><\/div>\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Local deployment<\/td><td>Using uv package manager we can install the all packages via requirement file. <br>Create a python virtual environment<br>Export the AWS configuration<br>Run the main using python3<\/td><\/tr><tr><td>Amazon EC2<\/td><td>Use &nbsp;TypeScript CDK to deploy the agent to EC2.<br>Once deployed, you can test your agent using the public IP address and port.<\/td><\/tr><tr><td>Amazon EKS<\/td><td>Prerequisite is to containerized the Pipeline companion agent using docker.<br>The deploy the pipeline companion suing helm charts in EKS<br>Use &nbsp;ALB to route the traffic to EKSAccess the pipeline companion using ALB DNS name<\/td><\/tr><tr><td>Lambda and Fargate<\/td><td>As per AWS strands documentation<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"603\" src=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-33-1024x603.png\" alt=\"\" class=\"wp-image-223\" srcset=\"https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-33-1024x603.png 1024w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-33-300x177.png 300w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-33-768x453.png 768w, https:\/\/aiinfrahub.com\/wp-content\/uploads\/2025\/08\/image-33.png 1069w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Pipeline Companion demonstrates the power of agentic AI in automating and enhancing AWS data pipeline testing. By leveraging specialized agents and deep AWS integration, it delivers rapid, reliable analysis, intelligent test generation, and actionable diagnostics. <\/p>\n\n\n\n<p>This approach not only accelerates development cycles but also improves pipeline resilience and data quality. As agentic frameworks evolve, solutions like Pipeline Companion will become essential tools for modern data engineering teams seeking scalable, autonomous pipeline validation.<\/p>\n\n\n\n<div style=\"height:49px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/juggarnautss\/Pipeline_Agent\" target=\"_blank\" rel=\"noreferrer noopener\">Pipeline Companion<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/strandsagents.com\/latest\" target=\"_blank\" rel=\"noreferrer noopener\">AWS Strands SDK<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/streamlit.io\" target=\"_blank\" rel=\"noreferrer noopener\">streamlit<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem Statement Modern data pipelines are built on AWS services such as Glue, Lambda, Step Functions. Testing these pipelines\u2014especially under schema change, scale, and integration demands\u2014is a major bottleneck. Manual testing is slow, prone to oversight, and unable to adapt to dynamic, distributed pipeline environments. Data pipeline failures in production environments cost organizations time, money &#8230; <a title=\"Pipeline Companion &#8211; an AWS Strands Agent for Data Pipeline Monitoring\" class=\"read-more\" href=\"https:\/\/aiinfrahub.com\/about-us\/pipeline-companion-an-aws-strands-agent-for-data-pipeline-monitoring\/\" aria-label=\"Read more about Pipeline Companion &#8211; an AWS Strands Agent for Data Pipeline Monitoring\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":206,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[15],"class_list":["post-204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agenticai","tag-aws-strandssdk-strandagents-awsbedrock-agenticai-aiagents-autonomousagents-modelcontextprotocol-mcp"],"_links":{"self":[{"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/posts\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":17,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/posts\/204\/revisions\/233"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/media\/206"}],"wp:attachment":[{"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aiinfrahub.com\/about-us\/wp-json\/wp\/v2\/tags?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}