CINXE.COM

Finance Research Agent - Agent Contracts

<!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="apple-touch-icon" type="image/png" sizes="180x180" href="https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/apple-touch-icon.png?v=3"/><link rel="icon" type="image/png" sizes="32x32" href="https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon-32x32.png?v=3"/><link rel="icon" type="image/png" sizes="16x16" href="https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon-16x16.png?v=3"/><link rel="shortcut icon" type="image/x-icon" href="https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon.ico?v=3"/><meta name="msapplication-config" content="https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/browserconfig.xml?v=3"/><meta name="apple-mobile-web-app-title" content="Agent Contracts"/><meta name="application-name" content="Agent Contracts"/><meta name="msapplication-TileColor" content="#335BED"/><meta name="theme-color" content="#ffffff"/><meta name="generator" content="Mintlify"/><link rel="sitemap" type="application/xml" href="/sitemap.xml"/><meta name="charset" content="utf-8"/><meta name="og:type" content="website"/><meta name="og:site_name" content="Agent Contracts"/><meta name="twitter:card" content="summary_large_image"/><meta name="og:title" content="Finance Research Agent - Agent Contracts"/><meta name="twitter:title" content="Finance Research Agent - Agent Contracts"/><meta name="og:description" content="Finance Research Agent"/><meta name="description" content="Finance Research Agent"/><meta property="og:image" content="https://relari-4243c669.mintlify.app/_next/image?url=%2Fapi%2Fog%3Fdivision%3DDocumentation%26title%3DFinance%2BResearch%2BAgent%26description%3DFinance%2BResearch%2BAgent%26logoLight%3Dhttps%253A%252F%252Fmintlify.s3.us-west-1.amazonaws.com%252Frelari-4243c669%252Flogo%252Flight.svg%26logoDark%3Dhttps%253A%252F%252Fmintlify.s3.us-west-1.amazonaws.com%252Frelari-4243c669%252Flogo%252Fdark.svg%26primaryColor%3D%2523335BED%26lightColor%3D%2523A3D0FF%26darkColor%3D%25231E3A9F&amp;w=1200&amp;q=100"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="twitter:image" content="https://relari-4243c669.mintlify.app/_next/image?url=%2Fapi%2Fog%3Fdivision%3DDocumentation%26title%3DFinance%2BResearch%2BAgent%26description%3DFinance%2BResearch%2BAgent%26logoLight%3Dhttps%253A%252F%252Fmintlify.s3.us-west-1.amazonaws.com%252Frelari-4243c669%252Flogo%252Flight.svg%26logoDark%3Dhttps%253A%252F%252Fmintlify.s3.us-west-1.amazonaws.com%252Frelari-4243c669%252Flogo%252Fdark.svg%26primaryColor%3D%2523335BED%26lightColor%3D%2523A3D0FF%26darkColor%3D%25231E3A9F&amp;w=1200&amp;q=100"/><meta property="twitter:image:width" content="1200"/><meta property="twitter:image:height" content="630"/><title>Finance Research Agent - Agent Contracts</title><meta name="og:url" content="/examples/finance-agent"/><link rel="canonical" href="/examples/finance-agent"/><meta name="next-head-count" content="30"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous"/><link rel="preload" href="/_next/static/media/a34f9d1faa5f3315-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/bb3ef058b751a6ad-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><script id="mode-toggle" data-nscript="beforeInteractive"> try { if (localStorage.isDarkMode === 'true') { document.documentElement.classList.add('dark'); } else if (localStorage.isDarkMode === 'false') { document.documentElement.classList.remove('dark'); } else if ((true && !('isDarkMode' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches) || false) { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } } catch (_) {}</script><link rel="preload" href="/_next/static/css/d9ae9cc1deeb510c.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d9ae9cc1deeb510c.css" data-n-g=""/><link rel="preload" href="/_next/static/css/8c76fb7d3768dfe7.css" as="style"/><link rel="stylesheet" href="/_next/static/css/8c76fb7d3768dfe7.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-ac680463e3e63367.js" defer=""></script><script src="/_next/static/chunks/framework-9ae01a5f4ade81f5.js" defer=""></script><script src="/_next/static/chunks/main-2103a0a044dd2f7a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-0c6d7bf774f8ae67.js" defer=""></script><script src="/_next/static/chunks/2edb282b-a83f7ffd007bccf0.js" defer=""></script><script src="/_next/static/chunks/e893f787-f6a1094a35763a0d.js" defer=""></script><script src="/_next/static/chunks/086d643d-6f7196a364073d16.js" defer=""></script><script src="/_next/static/chunks/9097-53b32b020063004a.js" defer=""></script><script src="/_next/static/chunks/2198-79ee0785216712f0.js" defer=""></script><script src="/_next/static/chunks/1301-173d3ce1037cd5c5.js" defer=""></script><script src="/_next/static/chunks/9099-f7ac6bb0a908034d.js" defer=""></script><script src="/_next/static/chunks/7437-2bc0ca8f533d228a.js" defer=""></script><script src="/_next/static/chunks/pages/_sites/%5Bsubdomain%5D/%5B%5B...slug%5D%5D-ebaaad4c0caea18f.js" defer=""></script><script src="/_next/static/gjnLtp2YZHsj8gjcSlAnS/_buildManifest.js" defer=""></script><script src="/_next/static/gjnLtp2YZHsj8gjcSlAnS/_ssgManifest.js" defer=""></script><style id="__jsx-4145347147">:root{--font-inter:'__Inter_e5ab12', '__Inter_Fallback_e5ab12';--font-jetbrains-mono:'__JetBrains_Mono_3c557b', '__JetBrains_Mono_Fallback_3c557b'}</style></head><div id="__next"><main class="jsx-4145347147"><style>:root { --primary: 51 91 237; --primary-light: 163 208 255; --primary-dark: 30 58 159; --background-light: 255 255 255; --background-dark: 12 13 16; --gray-50: 244 245 250; --gray-100: 239 240 245; --gray-200: 224 225 229; --gray-300: 207 208 213; --gray-400: 160 161 165; --gray-500: 113 114 119; --gray-600: 81 82 87; --gray-700: 64 65 69; --gray-800: 38 40 44; --gray-900: 24 25 30; --gray-950: 11 12 17; }</style><span class="fixed inset-0 bg-background-light dark:bg-background-dark -z-10"></span><div class="relative antialiased text-gray-500 dark:text-gray-400"><div id="navbar" class="z-30 fixed lg:sticky top-0 w-full"><div id="navbar-transition" class="absolute w-full h-full backdrop-blur flex-none transition-colors duration-500 border-b border-gray-500/5 dark:border-gray-300/[0.06] supports-backdrop-blur:bg-background-light/60 dark:bg-transparent"></div><div class="max-w-8xl mx-auto relative"><div class=""><div class="relative"><div class="flex items-center lg:px-12 h-16 min-w-0 mx-4 lg:mx-0"><div class="h-full relative flex-1 flex items-center gap-x-4 min-w-0 border-b border-gray-500/5 dark:border-gray-300/[0.06]"><div class="flex-1 flex items-center gap-x-4"><a href="/"><span class="sr-only">Agent Contracts<!-- --> home page</span><img class="w-auto h-7 relative object-contain block dark:hidden" src="https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/light.svg" alt="light logo"/><img class="w-auto h-7 relative object-contain hidden dark:block" src="https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/dark.svg" alt="dark logo"/></a><div class="flex items-center gap-x-2"></div></div><button type="button" class="hidden lg:flex relative flex-1 pointer-events-auto rounded-xl w-full items-center text-sm leading-6 py-1.5 pl-3.5 pr-3 shadow-sm text-gray-400 dark:text-white/50 bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/20 hover:ring-gray-600/25 dark:ring-gray-600/30 dark:hover:ring-gray-500/30 focus:outline-primary justify-between truncate gap-2 min-w-[43px]" id="search-bar-entry"><div class="flex items-center gap-3 min-w-[42px]"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search min-w-4 flex-none text-gray-700 hover:text-gray-800 dark:text-gray-300 hover:dark:text-gray-200"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><div class="truncate min-w-0">Search...</div></div></button><div class="flex-1 relative hidden lg:flex items-center ml-auto justify-end space-x-4"><nav class="text-sm"><ul class="flex space-x-6 items-center"><li><a href="https://relari.ai" class="whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" target="_blank">Home</a></li><li><a href="https://github.com/relari-ai/agent-contracts" class="whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" target="_blank">Github</a></li><li><a href="https://cdn.prod.website-files.com/669f7329c898141d69e16698/67cf788d56ca9dcf0b88e8d0_1859d1de14107778dccb73c5291f1d5d_Agent%20Contracts%20Whitepaper.pdf" class="whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" target="_blank">Whitepaper</a></li><li class="block lg:hidden"><a class="whitespace-nowrap font-medium text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" href="https://discord.gg/GJnM8SRsHr">Join Discord</a></li><li class="whitespace-nowrap hidden lg:flex" id="topbar-cta-button"><a target="_blank" class="group px-4 py-1.5 relative inline-flex items-center text-sm font-medium" href="https://discord.gg/GJnM8SRsHr"><span class="absolute inset-0 bg-primary-dark rounded-full group-hover:opacity-[0.9]"></span><div class="mr-0.5 space-x-2.5 flex items-center"><span class="z-10 text-white">Join Discord</span><svg width="3" height="24" viewBox="0 -9 3 24" class="h-5 rotate-0 overflow-visible text-white/90"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></div></a></li></ul></nav><div class="flex items-center"><button class="group p-2 flex items-center justify-center" aria-label="Toggle dark mode"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 block text-gray-400 dark:hidden group-hover:text-gray-600"><g clip-path="url(#clip0_2880_7340)"><path d="M8 1.11133V2.00022" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12.8711 3.12891L12.2427 3.75735" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M14.8889 8H14" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12.8711 12.8711L12.2427 12.2427" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8 14.8889V14" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3.12891 12.8711L3.75735 12.2427" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M1.11133 8H2.00022" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3.12891 3.12891L3.75735 3.75735" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8.00043 11.7782C10.0868 11.7782 11.7782 10.0868 11.7782 8.00043C11.7782 5.91402 10.0868 4.22266 8.00043 4.22266C5.91402 4.22266 4.22266 5.91402 4.22266 8.00043C4.22266 10.0868 5.91402 11.7782 8.00043 11.7782Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g><defs><clipPath id="clip0_2880_7340"><rect width="16" height="16" fill="white"></rect></clipPath></defs></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-4 w-4 hidden dark:block text-gray-500 dark:group-hover:text-gray-300"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div></div><div class="flex lg:hidden items-center gap-2"><button type="button" class="text-gray-500 w-8 h-8 flex items-center justify-center hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300" id="search-bar-entry-mobile"><span class="sr-only">Search...</span><svg class="h-4 w-4 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/solid/magnifying-glass.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/solid/magnifying-glass.svg);mask-repeat:no-repeat;mask-position:center"></svg></button><button aria-label="More actions" class="h-7 w-5 flex items-center justify-end"><svg class="h-4 w-4 bg-gray-500 dark:bg-gray-400 hover:bg-gray-600 dark:hover:bg-gray-300" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/solid/ellipsis-vertical.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/solid/ellipsis-vertical.svg);mask-repeat:no-repeat;mask-position:center"></svg></button></div></div></div><div class="flex items-center h-14 py-4 px-5 lg:hidden"><button type="button" class="text-gray-500 hover:text-gray-600 dark:text-gray-400 dark:hover:text-gray-300"><span class="sr-only">Navigation</span><svg class="h-4" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"></path></svg></button><div class="ml-4 flex text-sm leading-6 whitespace-nowrap min-w-0 space-x-3"><div class="flex items-center space-x-3"><span>Contracts in Action</span><svg width="3" height="24" viewBox="0 -9 3 24" class="h-5 rotate-0 overflow-visible fill-gray-400"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></div><div class="font-semibold text-gray-900 truncate dark:text-gray-200">Finance Research Agent</div></div></div></div><div class="hidden lg:flex px-12 h-12"><div class="h-full flex text-sm space-x-6"><a class="group relative h-full flex items-center font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-300" href="/introduction">Documentation<div class="absolute bottom-0 h-[1.5px] w-full group-hover:bg-gray-200 dark:group-hover:bg-gray-700"></div></a><a class="group relative h-full flex items-center text-gray-800 dark:text-gray-200 font-semibold" href="/examples/finance-agent">Examples<div class="absolute bottom-0 h-[1.5px] w-full bg-primary dark:bg-primary-light"></div></a></div></div></div></div></div><div class="max-w-8xl px-4 mx-auto lg:px-8"><div class="z-20 hidden lg:block fixed bottom-0 right-auto w-[18rem]" id="sidebar" style="top:7rem"><div class="absolute inset-0 z-10 stable-scrollbar-gutter overflow-auto pr-8 pb-10" id="sidebar-content"><div class="relative lg:text-sm lg:leading-6"><div class="sticky top-0 h-8 bg-gradient-to-b from-background-light dark:from-background-dark"></div><div id="navigation-items"><div class=""><h5 class="pl-4 mb-3.5 lg:mb-2.5 font-semibold text-gray-900 dark:text-gray-200">Contracts in Action</h5><ul><li id="/examples/finance-agent" class="relative scroll-m-4 first:scroll-m-20"><a class="group mt-2 lg:mt-0 flex items-center pr-3 py-1.5 cursor-pointer focus:outline-primary dark:focus:outline-primary-light gap-x-3 rounded-xl bg-primary/10 text-primary font-semibold dark:text-primary-light dark:bg-primary-light/10" style="padding-left:1rem" href="/examples/finance-agent"><svg class="h-4 w-4 bg-primary dark:bg-primary-light" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/dollar-sign.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/dollar-sign.svg);mask-repeat:no-repeat;mask-position:center"></svg><div class="flex-1 flex items-center space-x-2.5"><div>Finance Research Agent</div></div></a></li><li id="/examples/customer-support-agent" class="relative scroll-m-4 first:scroll-m-20"><a class="group mt-2 lg:mt-0 flex items-center pr-3 py-1.5 cursor-pointer focus:outline-primary dark:focus:outline-primary-light gap-x-3 rounded-xl hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/examples/customer-support-agent"><svg class="h-4 w-4 bg-gray-400 dark:bg-gray-500" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/user.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/user.svg);mask-repeat:no-repeat;mask-position:center"></svg><div class="flex-1 flex items-center space-x-2.5"><div>Customer Support Agent</div></div></a></li><li id="/examples/browser-agent" class="relative scroll-m-4 first:scroll-m-20"><a class="group mt-2 lg:mt-0 flex items-center pr-3 py-1.5 cursor-pointer focus:outline-primary dark:focus:outline-primary-light gap-x-3 rounded-xl hover:bg-gray-600/5 dark:hover:bg-gray-200/5 text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300" style="padding-left:1rem" href="/examples/browser-agent"><svg class="h-4 w-4 bg-gray-400 dark:bg-gray-500" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/browser.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/regular/browser.svg);mask-repeat:no-repeat;mask-position:center"></svg><div class="flex-1 flex items-center space-x-2.5"><div>Browser Agent</div></div></a></li></ul></div></div></div></div></div><div class="" id="content-container"><div class="flex flex-row gap-12 box-border w-full pt-40 lg:pt-10"><div class="relative grow box-border flex-col w-full mx-auto px-1 lg:pl-[23.7rem] lg:-ml-12 xl:w-[calc(100%-28rem)]" id="content-area"><header id="header" class="relative"><div class="mt-0.5 space-y-2.5"><div class="eyebrow h-5 text-primary dark:text-primary-light text-sm font-semibold">Contracts in Action</div><div class="flex items-center relative"><h1 id="page-title" class="inline-block text-2xl sm:text-3xl font-bold text-gray-900 tracking-tight dark:text-gray-200">Finance Research Agent</h1></div></div><div class="mt-2 text-lg prose prose-gray dark:prose-invert"><p>Finance Research Agent</p></div></header><div class="flex flex-col gap-8"></div><div class="relative mt-8 prose prose-gray dark:prose-invert"><h2 class="flex whitespace-pre-wrap group font-semibold" id="agent-implementation"><div class="absolute"><a href="#agent-implementation" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100" aria-label="Navigate to header">​<div class="w-6 h-6 rounded-md flex items-center justify-center shadow-sm text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20"><svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512"><path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path></svg></div></a></div><span class="cursor-pointer">Agent Implementation</span></h2> <p>The finance research agent was implemented using LangGraph with the following multi-agent architecture. <a href="https://github.com/relari-ai/agent-examples" target="_blank" rel="noreferrer">Try for yourself</a>.</p> <!-- --> <h2 class="flex whitespace-pre-wrap group font-semibold" id="contract-specification"><div class="absolute"><a href="#contract-specification" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100" aria-label="Navigate to header">​<div class="w-6 h-6 rounded-md flex items-center justify-center shadow-sm text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20"><svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512"><path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path></svg></div></a></div><span class="cursor-pointer">Contract Specification</span></h2> <p>We can now define the scenarios and corresponding contract in a <code>Specification</code>.</p> <!-- --> <div class="mt-5 mb-8 not-prose rounded-2xl relative group text-gray-50 bg-[#0F1117] dark:bg-codeblock ring-1 ring-transparent dark:ring-gray-800/50 codeblock-dark"><div class="flex rounded-t-2xl text-gray-400 text-xs leading-6 border-b font-medium bg-black/40 border-gray-900/80"><div class="flex-none border-b px-4 pt-2.5 pb-2 flex items-center text-primary-light border-primary-light">define.py</div><div class="flex-1 mr-4 flex items-center justify-end"></div></div><div class="min-w-full relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out" style="font-variant-ligatures:none;height:auto"><div class="overflow-x-auto h-full p-5 [&amp;&gt;pre&gt;code]:pr-[3rem] [&amp;&gt;pre&gt;code&gt;span.line-highlight]:min-w-[calc(100%+3rem)] overflow-y-hidden scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-white/20 dark:scrollbar-thumb-white/20 hover:scrollbar-thumb-white/25 dark:hover:scrollbar-thumb-white/25 active:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25"><pre class="language-python"><code class="language-python"><span class=""><span class="token keyword">from</span> relari_otel<span class="token punctuation">.</span>specifications <span class="token keyword">import</span> Specifications<span class="token punctuation">,</span> Scenario<span class="token punctuation">,</span> Contract<span class="token punctuation">,</span> Precondition<span class="token punctuation">,</span> Pathcondition<span class="token punctuation">,</span> Postcondition<span class="token punctuation">,</span> Level</span> <!-- --> <span class=""><span class="token comment"># Tesla Income Scenario</span></span> <span class="">tesla_income_scenario <span class="token operator">=</span> Scenario<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;tesla_income&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Tesla Income&quot;</span><span class="token punctuation">,</span></span> <span class=""> data<span class="token operator">=</span><span class="token string">&quot;How has Tesla&#x27;s net income changed over the last five years?&quot;</span><span class="token punctuation">,</span></span> <span class=""> contracts<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Contract<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;ctr-tsla-income&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Right Tickers&quot;</span><span class="token punctuation">,</span></span> <span class=""> requirements<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Precondition<span class="token punctuation">(</span><span class="token string">&quot;Question about Tesla&#x27;s net income&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Pathcondition<span class="token punctuation">(</span><span class="token string">&quot;Retrieve Tesla&#x27;s net income with the ticker TSLA&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Postcondition<span class="token punctuation">(</span><span class="token string">&quot;A numeric value for net income expressed in dollars&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>SHOULD<span class="token punctuation">,</span> on<span class="token operator">=</span><span class="token string">&quot;output&quot;</span><span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""> <span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""><span class="token punctuation">)</span></span> <!-- --> <span class=""><span class="token comment"># Nike vs Adidas Scenario</span></span> <span class="">nike_adidas_scenario <span class="token operator">=</span> Scenario<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;nike_vs_adidas&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Nike vs Adidas&quot;</span><span class="token punctuation">,</span></span> <span class=""> data<span class="token operator">=</span><span class="token string">&quot;Between Nike and Adidas, which company has stronger operating margins?&quot;</span><span class="token punctuation">,</span></span> <span class=""> contracts<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Contract<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;ctr-nike-vs-adidas&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Right Tickers&quot;</span><span class="token punctuation">,</span></span> <span class=""> requirements<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Precondition<span class="token punctuation">(</span><span class="token string">&quot;Comparison between Nike and Adidas&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Pathcondition<span class="token punctuation">(</span><span class="token string">&quot;Retrieve Nike financials with the ticker NKE&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Pathcondition<span class="token punctuation">(</span><span class="token string">&quot;Retrieve Adidas financials with the ticker ADDYY&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Postcondition<span class="token punctuation">(</span><span class="token string">&quot;A numeric value for operating margins expressed in percentage&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>SHOULD<span class="token punctuation">,</span> on<span class="token operator">=</span><span class="token string">&quot;output&quot;</span><span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""> <span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""><span class="token punctuation">)</span></span> <!-- --> <span class=""><span class="token comment"># Debt-to-Equity Ratio Scenario</span></span> <span class="">de_ratio_scenario <span class="token operator">=</span> Scenario<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;de_ratio&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Debt-to-Equity Ratio&quot;</span><span class="token punctuation">,</span></span> <span class=""> data<span class="token operator">=</span><span class="token string">&quot;Which car manufacturer has the highest debt-to-equity ratio right now?&quot;</span><span class="token punctuation">,</span></span> <span class=""> contracts<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Contract<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;ctr-de-ratio&quot;</span><span class="token punctuation">,</span></span> <span class=""> name<span class="token operator">=</span><span class="token string">&quot;Right Tickers&quot;</span><span class="token punctuation">,</span></span> <span class=""> requirements<span class="token operator">=</span><span class="token punctuation">[</span></span> <span class=""> Precondition<span class="token punctuation">(</span><span class="token string">&quot;Question about the debt-to-equity ratio&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Pathcondition<span class="token punctuation">(</span><span class="token string">&quot;Retrieve the financials of at least 3 car manufacturers&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Postcondition<span class="token punctuation">(</span><span class="token string">&quot;Output a table&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>MUST<span class="token punctuation">,</span> on<span class="token operator">=</span><span class="token string">&quot;output&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span> <span class=""> Postcondition<span class="token punctuation">(</span><span class="token string">&quot;Include at least Tesla, Ford, and General Motors&quot;</span><span class="token punctuation">,</span> level<span class="token operator">=</span>Level<span class="token punctuation">.</span>SHOULD<span class="token punctuation">,</span> on<span class="token operator">=</span><span class="token string">&quot;output&quot;</span><span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""> <span class="token punctuation">)</span></span> <span class=""> <span class="token punctuation">]</span></span> <span class=""><span class="token punctuation">)</span></span> <!-- --> <span class=""><span class="token comment"># Save a collection of scenarios in a Specification to be used for verification</span></span> <span class="">spec <span class="token operator">=</span> Specifications<span class="token punctuation">(</span></span> <span class=""> uuid<span class="token operator">=</span><span class="token string">&quot;yw936jmp&quot;</span><span class="token punctuation">,</span></span> <span class=""> scenarios<span class="token operator">=</span><span class="token punctuation">[</span>tesla_income_scenario<span class="token punctuation">,</span> nike_adidas_scenario<span class="token punctuation">,</span> de_ratio_scenario<span class="token punctuation">]</span></span> <span class=""><span class="token punctuation">)</span></span> <span class="">spec<span class="token punctuation">.</span>save<span class="token punctuation">(</span><span class="token string">&quot;specification.json&quot;</span><span class="token punctuation">)</span></span> </code></pre></div></div></div> <p>Check out the outputed json file: <a href="https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json" target="_blank" rel="noreferrer"><code>specification.json</code></a>.</p> <h2 class="flex whitespace-pre-wrap group font-semibold" id="running-the-agent"><div class="absolute"><a href="#running-the-agent" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100" aria-label="Navigate to header">​<div class="w-6 h-6 rounded-md flex items-center justify-center shadow-sm text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20"><svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512"><path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path></svg></div></a></div><span class="cursor-pointer">Running the Agent</span></h2> <p>Start the verification server from the <code>agent-contracts</code> directory (make sure you’ve downloaded and installed <code>agent-contracts</code> repo <a href="/installation">installation</a>). The verification server includes the telemetry collector necessary to receive the traces from the agent instrumented with <code>relari-otel</code>.</p> <div class="mt-5 mb-8 not-prose rounded-2xl relative group text-gray-50 bg-[#0F1117] dark:bg-codeblock ring-1 ring-transparent dark:ring-gray-800/50 codeblock-dark"><div class="min-w-full relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out" style="font-variant-ligatures:none;height:auto"><div class="overflow-x-auto h-full p-5 [&amp;&gt;pre&gt;code]:pr-[3rem] [&amp;&gt;pre&gt;code&gt;span.line-highlight]:min-w-[calc(100%+3rem)] overflow-y-hidden scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-white/20 dark:scrollbar-thumb-white/20 hover:scrollbar-thumb-white/25 dark:hover:scrollbar-thumb-white/25 active:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25"><pre class="language-plaintext"><code><span class="">cd agent-contracts</span> <span class="">make docker-verification</span> </code></pre></div></div></div> <p>Now run the app (the default command will run the scenarios defined in <a href="https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json" target="_blank" rel="noreferrer"><code>specification.json</code></a>). Make sure you’ve installed the langgraph-fin-agent <a href="https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/README.md" target="_blank" rel="noreferrer">README</a>.</p> <div class="mt-5 mb-8 not-prose rounded-2xl relative group text-gray-50 bg-[#0F1117] dark:bg-codeblock ring-1 ring-transparent dark:ring-gray-800/50 codeblock-dark"><div class="min-w-full relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out" style="font-variant-ligatures:none;height:auto"><div class="overflow-x-auto h-full p-5 [&amp;&gt;pre&gt;code]:pr-[3rem] [&amp;&gt;pre&gt;code&gt;span.line-highlight]:min-w-[calc(100%+3rem)] overflow-y-hidden scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-white/20 dark:scrollbar-thumb-white/20 hover:scrollbar-thumb-white/25 dark:hover:scrollbar-thumb-white/25 active:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25"><pre class="language-plaintext"><code><span class="">cd agent-examples/apps/langgraph-fin-agent</span> <span class="">poetry run finchat --eval</span> </code></pre></div></div></div> <p>You can now viwe the traces in the Jaeger UI at <code>http://localhost:16686</code>. Or you can fetch the traces via the Agent Contracts CLI.</p> <pre style="font-family:&quot;Space Mono&quot;, monospace;line-height:1.2em"><p>$ poetry run cli ls run —timespan 1h Listing runs from 2025-03-11 04:27:05.937162+00:00 to 2025-03-11 05:27:05.937158+00:00… ┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓ ┃ Run ID ┃ Project Name ┃ Specifications ID ┃ Start Time ┃ End Time ┃ ┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩ │ 187a8d09 │ langgraph-fin-agent │ yw936jmp │ 2025-03-10 21:56:20 │ 2025-03-10 21:56:20 │ └──────────┴─────────────────────┴───────────────────┴─────────────────────┴─────────────────────┘</p></pre> <h2 class="flex whitespace-pre-wrap group font-semibold" id="verification-results"><div class="absolute"><a href="#verification-results" class="-ml-10 flex items-center opacity-0 border-0 group-hover:opacity-100" aria-label="Navigate to header">​<div class="w-6 h-6 rounded-md flex items-center justify-center shadow-sm text-gray-400 dark:text-white/50 dark:bg-background-dark dark:brightness-[1.35] dark:ring-1 dark:hover:brightness-150 bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20"><svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512"><path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path></svg></div></a></div><span class="cursor-pointer">Verification Results</span></h2> <p>The following is the verification results post-execution. We can see that the <code>con-comparison</code> and <code>con-analysis</code> contracts are satisfied while the <code>con-liquidity-analysis</code> contract is not.</p> <pre style="font-family:&quot;Space Mono&quot;, monospace;line-height:1.2em"><p>$ poetry run cli verify run 187a8d09 /Users/yisz/code/Relari/agent-examples/apps/langgraph-fin-agent/specifications.json —timespan 1d Verifying run 187a8d09 with specifications from agent-examples/apps/langgraph-fin-agent/specifications.json… Output will be saved to output/verify_187a8d09.json Contract Right Tickers: 100%|████████████████████████████████████████████████████████████| 3/3 [00:06 &lt; 00:00, 2.06s/it] Contract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:08 &lt; 00:00, 2.22s/it] Contract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:10 &lt; 00:00, 2.64s/it] ─────────────────────────────────────── Trace 6f644c2e191daa723fcd7effac3de3e0 ──────────────────────────────────────── Right Tickers (UNSATISFIED)<br/> <!-- -->┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓ ┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃ ┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩ │ PRE │ MUST │ Question about the debt-to-equity ratio │ Yes │ │ PATH │ MUST │ Retrieve the financials of at least 3 car manufacturers │ No │ │ POST │ MUST │ Output a table │ No │ │ POST │ SHOULD │ Include at least Tesla, Ford, and General Motors │ No │ └──────┴───────────┴─────────────────────────────────────────────────────────┴───────────┘ ─────────────────────────────────────── Trace 0cbce717cb265f18e45f6047c3f6060d ──────────────────────────────────────── Right Tickers (SATISFIED)<br/> <!-- -->┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓ ┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃ ┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩ │ PRE │ MUST │ Comparison between Nike and Adidas │ Yes │ │ PATH │ MUST │ Retrieve Nike financials with the ticker NKE │ Yes │ │ PATH │ MUST │ Retrieve Adidas financials with the ticker ADDYY │ Yes │ │ POST │ SHOULD │ A numeric value for operating margins expressed in percentage │ Yes │ └──────┴───────────┴───────────────────────────────────────────────────────────────┴───────────┘ ─────────────────────────────────────── Trace 7d01b56e279cc75e44a3b2e57890b9bd ──────────────────────────────────────── Right Tickers (SATISFIED)<br/> <!-- -->┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓ ┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃ ┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩ │ PRE │ MUST │ Question about Tesla’s net income │ Yes │ │ PATH │ MUST │ Retrieve Tesla’s net income with the ticker TSLA │ Yes │ │ POST │ SHOULD │ A numeric value for net income expressed in dollars │ No │ └──────┴───────────┴─────────────────────────────────────────────────────┴───────────┘</p></pre> <p>You can further inspect the detailed verification results with reasoning in the <code>output/verify_187a8d09.json</code> file.</p> <div class="mt-5 mb-8 not-prose rounded-2xl relative group text-gray-50 bg-[#0F1117] dark:bg-codeblock ring-1 ring-transparent dark:ring-gray-800/50 codeblock-dark"><div class="min-w-full relative text-sm leading-6 children:!my-0 children:!shadow-none children:!bg-transparent transition-[height] duration-300 ease-in-out" style="font-variant-ligatures:none;height:auto"><div class="overflow-x-auto h-full p-5 [&amp;&gt;pre&gt;code]:pr-[3rem] [&amp;&gt;pre&gt;code&gt;span.line-highlight]:min-w-[calc(100%+3rem)] overflow-y-hidden scrollbar-thin scrollbar-thumb-rounded scrollbar-thumb-white/20 dark:scrollbar-thumb-white/20 hover:scrollbar-thumb-white/25 dark:hover:scrollbar-thumb-white/25 active:scrollbar-thumb-white/25 dark:active:scrollbar-thumb-white/25"><pre class="language-json"><code class="language-json"><span class=""><span class="token punctuation">[</span></span> <span class=""> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;trace_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;6f644c2e191daa723fcd7effac3de3e0&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;specifications_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;yw936jmp&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;scenario_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;de_ratio&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;contracts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;ctr-de-ratio&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;status&quot;</span><span class="token operator">:</span> <span class="token string">&quot;UNSATISFIED&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;info&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;req-1o9d2re5&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The input consists of a question that asks about which car manufacturer currently has the highest debt-to-equity ratio. This directly pertains to the debt-to-equity ratio, aligning perfectly with the specified property of asking about this financial metric.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-mpxqjtp9&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The trace shows that the system attempted to retrieve stock and financial data. Although a stock screener call returned multiple companies, only two car manufacturers (Toyota Motor Corporation and Tesla, Inc.) had their financial ratios retrieved successfully. The requirement was to retrieve financials for at least three car manufacturers, but only two were processed.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-0b8a77rw&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The system output does contain a table summarizing the debt-to-equity ratios for car manufacturers in the text format. However, it does not produce a proper table formatted in a structured manner, such as Markdown or HTML table formats as usually expected when the requirement is specifically to &#x27;output a table&#x27;. The final result includes a list of messages and some formatted text, but it does not fulfill the specific property of presenting the data in a true table format. Therefore, the output does not fully satisfy the requirement of &#x27;Output a table&#x27;.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-gmftn5r4&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The system output only includes information about Toyota and Tesla, specifically their debt-to-equity ratios. The requirement explicitly states that the output must include at least Tesla, Ford, and General Motors. Since Ford and General Motors are not mentioned in the system output, the requirement is not satisfied.&quot;</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;trace_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;0cbce717cb265f18e45f6047c3f6060d&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;specifications_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;yw936jmp&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;scenario_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;nike_vs_adidas&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;contracts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;ctr-nike-vs-adidas&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;status&quot;</span><span class="token operator">:</span> <span class="token string">&quot;SATISFIED&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;info&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;req-1tqgsovv&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The input consists of a question that explicitly asks for a comparison between two companies, Nike and Adidas, specifically regarding their operating margins. Since it directly requests a comparison, the requirement is clearly satisfied.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-3yz4o802&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The execution trace shows that the Financial_Data_Agent successfully called the &#x27;get_financial_ratios&#x27; function with the symbol &#x27;NKE&#x27; and retrieved several financial records for Nike, which include operating profit margins among other ratios. Additionally, the final summary clearly distinguishes Nike&#x27;s financial data (with a ticker of NKE) from Adidas, confirming that the requirement to retrieve Nike financials with the ticker NKE was fulfilled.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-4bbi6llo&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The trace shows that after routing the request through multiple agents, the Financial_Data_Agent executed a get_financial_ratios call with the symbol ADDYY to retrieve Adidas financials. The retrieved data was then used in the final summary, which clearly displays Adidas&#x27;s operating profit margin. Thus, the requirement to retrieve Adidas financials with ticker ADDYY has been satisfied.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-a50bzp2j&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The system output provides the operating profit margins for both Nike and Adidas, specifically stating them as 13.03% for Nike and 5.65% for Adidas. This information directly presents numeric values for operating margins, clearly expressed in percentage form. Therefore, the output satisfies the requirement of including a numeric value for operating margins expressed as a percentage.&quot;</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;trace_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;7d01b56e279cc75e44a3b2e57890b9bd&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;specifications_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;yw936jmp&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;scenario_id&quot;</span><span class="token operator">:</span> <span class="token string">&quot;tesla_income&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;contracts&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;ctr-tsla-income&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;status&quot;</span><span class="token operator">:</span> <span class="token string">&quot;SATISFIED&quot;</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;info&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;req-j3n61sid&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The input contains a question specifically asking about the changes in Tesla&#x27;s net income over a period of five years. This directly relates to the requirement of asking about Tesla&#x27;s net income.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-ghs1pr6x&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The trace successfully retrieved Tesla&#x27;s net income data for TSLA. Both key metric and line item queries were made and the final summary provided a table of net income for 2020-2024, thus satisfying the requirement.&quot;</span></span> <span class=""> <span class="token punctuation">}</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;req-sc0xkkxx&quot;</span><span class="token operator">:</span> <span class="token punctuation">{</span></span> <span class=""> <span class="token property">&quot;satisfied&quot;</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></span> <span class=""> <span class="token property">&quot;explanation&quot;</span><span class="token operator">:</span> <span class="token string">&quot;The provided system output includes a summary of Tesla&#x27;s net income in a tabular format, with values expressed in billions rather than dollars. For example, it states that in 2020, Tesla&#x27;s net income was 0.721 billion, which translates to 721 million dollars. Although the output discusses and presents net income changes, it does not provide any numeric value expressed directly in dollars, which was the requirement. Therefore, it does not satisfy the specified property.&quot;</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""> <span class="token punctuation">}</span></span> <span class=""><span class="token punctuation">]</span></span> </code></pre></div></div></div></div><div class="leading-6 mt-14"><div id="pagination" class="mb-12 px-0.5 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-200"><a class="flex items-center ml-auto space-x-3 group" href="/examples/customer-support-agent"><span class="group-hover:text-gray-900 dark:group-hover:text-white">Customer Support Agent</span><svg viewBox="0 0 3 6" class="rotate-180 h-1.5 stroke-gray-400 overflow-visible group-hover:stroke-gray-600 dark:group-hover:stroke-gray-300"><path d="M3 0L0 3L3 6" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></div><footer id="footer" class="flex gap-12 justify-between pt-10 border-t border-gray-100 sm:flex dark:border-gray-800/50 pb-28"><div class="flex gap-6 flex-wrap"><a href="https://x.com/relariai" target="_blank"><span class="sr-only">x</span><svg class="w-5 h-5 bg-gray-400 dark:bg-gray-500 hover:bg-gray-500 dark:hover:bg-gray-400" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/x-twitter.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/x-twitter.svg);mask-repeat:no-repeat;mask-position:center"></svg></a><a href="https://github.com/relari-ai" target="_blank"><span class="sr-only">github</span><svg class="w-5 h-5 bg-gray-400 dark:bg-gray-500 hover:bg-gray-500 dark:hover:bg-gray-400" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/github.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/github.svg);mask-repeat:no-repeat;mask-position:center"></svg></a><a href="https://linkedin.com/company/relari" target="_blank"><span class="sr-only">linkedin</span><svg class="w-5 h-5 bg-gray-400 dark:bg-gray-500 hover:bg-gray-500 dark:hover:bg-gray-400" style="-webkit-mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/linkedin.svg);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;mask-image:url(https://mintlify.b-cdn.net/v6.6.0/brands/linkedin.svg);mask-repeat:no-repeat;mask-position:center"></svg></a></div><div class="flex items-center justify-between"><div class="sm:flex"><a href="https://mintlify.com/preview-request?utm_campaign=poweredBy&amp;utm_medium=docs&amp;utm_source=agent-contracts.relari.ai" target="_blank" rel="noreferrer" class="text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 text-nowrap">Powered by Mintlify</a></div></div></footer></div></div><div class="hidden xl:flex self-start sticky xl:flex-col h-[calc(100vh-11rem)] top-[9.5rem]" id="content-side-layout"><div class="z-10 hidden xl:flex pl-10 box-border w-[19rem]" id="table-of-contents"><div id="table-of-contents-content" class="text-gray-600 text-sm leading-6 w-[16.5rem] overflow-y-auto space-y-2"><div class="text-gray-700 dark:text-gray-300 font-medium flex items-center space-x-2"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" xmlns="http://www.w3.org/2000/svg" class="h-3 w-3"><path d="M2.44434 12.6665H13.5554" stroke-linecap="round" stroke-linejoin="round"></path><path d="M2.44434 3.3335H13.5554" stroke-linecap="round" stroke-linejoin="round"></path><path d="M2.44434 8H7.33323" stroke-linecap="round" stroke-linejoin="round"></path></svg><span>On this page</span></div><ul><li class="relative"><a href="#agent-implementation" class="py-1 block hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300">Agent Implementation</a></li><li class="relative"><a href="#contract-specification" class="py-1 block hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300">Contract Specification</a></li><li class="relative"><a href="#running-the-agent" class="py-1 block hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300">Running the Agent</a></li><li class="relative"><a href="#verification-results" class="py-1 block hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-300">Verification Results</a></li></ul></div></div></div></div></div></div></div></main></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"mdxSource":{"compiledSource":"/*Component note does not exist.*/\n\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n br: \"br\",\n code: \"code\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock, Heading, ZoomImage} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n if (!Heading) _missingMdxReference(\"Heading\", true);\n if (!ZoomImage) _missingMdxReference(\"ZoomImage\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(Heading, {\n level: \"2\",\n id: \"agent-implementation\",\n children: \"Agent Implementation\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The finance research agent was implemented using LangGraph with the following multi-agent architecture. \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples\",\n children: \"Try for yourself\"\n }), \".\"]\n }), \"\\n\", _jsx(ZoomImage, {\n children: _jsx(\"img\", {\n alt: \"Financial Research Agent\",\n src: \"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/images/fin-agent.png\"\n })\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"contract-specification\",\n children: \"Contract Specification\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"We can now define the scenarios and corresponding contract in a \", _jsx(_components.code, {\n children: \"Specification\"\n }), \".\"]\n }), \"\\n\", \"\\n\", _jsx(CodeBlock, {\n filename: \"define.py\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-python\",\n children: _jsxs(_components.code, {\n className: \"language-python\",\n children: [_jsxs(_components.span, {\n className: \"\",\n children: [_jsx(_components.span, {\n className: \"token keyword\",\n children: \"from\"\n }), \" relari_otel\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"specifications \", _jsx(_components.span, {\n className: \"token keyword\",\n children: \"import\"\n }), \" Specifications\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Level\"]\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Tesla Income Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"tesla_income_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"tesla_income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Tesla Income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"How has Tesla's net income changed over the last five years?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-tsla-income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Question about Tesla's net income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Tesla's net income with the ticker TSLA\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"A numeric value for net income expressed in dollars\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Nike vs Adidas Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"nike_adidas_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"nike_vs_adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Nike vs Adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Between Nike and Adidas, which company has stronger operating margins?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-nike-vs-adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Comparison between Nike and Adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Nike financials with the ticker NKE\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Adidas financials with the ticker ADDYY\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"A numeric value for operating margins expressed in percentage\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Debt-to-Equity Ratio Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"de_ratio_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"de_ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Debt-to-Equity Ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Which car manufacturer has the highest debt-to-equity ratio right now?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-de-ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Question about the debt-to-equity ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve the financials of at least 3 car manufacturers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Output a table\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Include at least Tesla, Ford, and General Motors\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Save a collection of scenarios in a Specification to be used for verification\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"spec \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Specifications\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" scenarios\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n }), \"tesla_income_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" nike_adidas_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" de_ratio_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"spec\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"save\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"specification.json\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Check out the outputed json file: \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json\",\n children: _jsx(_components.code, {\n children: \"specification.json\"\n })\n }), \".\"]\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"running-the-agent\",\n children: \"Running the Agent\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Start the verification server from the \", _jsx(_components.code, {\n children: \"agent-contracts\"\n }), \" directory (make sure you’ve downloaded and installed \", _jsx(_components.code, {\n children: \"agent-contracts\"\n }), \" repo \", _jsx(_components.a, {\n href: \"/installation\",\n children: \"installation\"\n }), \"). The verification server includes the telemetry collector necessary to receive the traces from the agent instrumented with \", _jsx(_components.code, {\n children: \"relari-otel\"\n }), \".\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-plaintext\",\n children: _jsxs(_components.code, {\n children: [_jsx(_components.span, {\n className: \"\",\n children: \"cd agent-contracts\"\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: \"make docker-verification\"\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Now run the app (the default command will run the scenarios defined in \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json\",\n children: _jsx(_components.code, {\n children: \"specification.json\"\n })\n }), \"). Make sure you’ve installed the langgraph-fin-agent \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/README.md\",\n children: \"README\"\n }), \".\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-plaintext\",\n children: _jsxs(_components.code, {\n children: [_jsx(_components.span, {\n className: \"\",\n children: \"cd agent-examples/apps/langgraph-fin-agent\"\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: \"poetry run finchat --eval\"\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can now viwe the traces in the Jaeger UI at \", _jsx(_components.code, {\n children: \"http://localhost:16686\"\n }), \". Or you can fetch the traces via the Agent Contracts CLI.\"]\n }), \"\\n\", _jsx(\"pre\", {\n style: {\n fontFamily: '\"Space Mono\", monospace',\n lineHeight: '1.2em'\n },\n children: _jsx(_components.p, {\n children: \"$ poetry run cli ls run —timespan 1h\\nListing runs from 2025-03-11 04:27:05.937162+00:00 to 2025-03-11 05:27:05.937158+00:00…\\n┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓\\n┃ Run ID ┃ Project Name ┃ Specifications ID ┃ Start Time ┃ End Time ┃\\n┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩\\n│ 187a8d09 │ langgraph-fin-agent │ yw936jmp │ 2025-03-10 21:56:20 │ 2025-03-10 21:56:20 │\\n└──────────┴─────────────────────┴───────────────────┴─────────────────────┴─────────────────────┘\"\n })\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"verification-results\",\n children: \"Verification Results\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The following is the verification results post-execution. We can see that the \", _jsx(_components.code, {\n children: \"con-comparison\"\n }), \" and \", _jsx(_components.code, {\n children: \"con-analysis\"\n }), \" contracts are satisfied while the \", _jsx(_components.code, {\n children: \"con-liquidity-analysis\"\n }), \" contract is not.\"]\n }), \"\\n\", _jsx(\"pre\", {\n style: {\n fontFamily: '\"Space Mono\", monospace',\n lineHeight: '1.2em'\n },\n children: _jsxs(_components.p, {\n children: [\"$ poetry run cli verify run 187a8d09 /Users/yisz/code/Relari/agent-examples/apps/langgraph-fin-agent/specifications.json —timespan 1d\\nVerifying run 187a8d09 with specifications from agent-examples/apps/langgraph-fin-agent/specifications.json…\\nOutput will be saved to output/verify_187a8d09.json\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 3/3 [00:06 \u003c 00:00, 2.06s/it]\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:08 \u003c 00:00, 2.22s/it]\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:10 \u003c 00:00, 2.64s/it]\\n─────────────────────────────────────── Trace 6f644c2e191daa723fcd7effac3de3e0 ────────────────────────────────────────\\nRight Tickers (UNSATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Question about the debt-to-equity ratio │ Yes │\\n│ PATH │ MUST │ Retrieve the financials of at least 3 car manufacturers │ No │\\n│ POST │ MUST │ Output a table │ No │\\n│ POST │ SHOULD │ Include at least Tesla, Ford, and General Motors │ No │\\n└──────┴───────────┴─────────────────────────────────────────────────────────┴───────────┘\\n─────────────────────────────────────── Trace 0cbce717cb265f18e45f6047c3f6060d ────────────────────────────────────────\\nRight Tickers (SATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Comparison between Nike and Adidas │ Yes │\\n│ PATH │ MUST │ Retrieve Nike financials with the ticker NKE │ Yes │\\n│ PATH │ MUST │ Retrieve Adidas financials with the ticker ADDYY │ Yes │\\n│ POST │ SHOULD │ A numeric value for operating margins expressed in percentage │ Yes │\\n└──────┴───────────┴───────────────────────────────────────────────────────────────┴───────────┘\\n─────────────────────────────────────── Trace 7d01b56e279cc75e44a3b2e57890b9bd ────────────────────────────────────────\\nRight Tickers (SATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Question about Tesla’s net income │ Yes │\\n│ PATH │ MUST │ Retrieve Tesla’s net income with the ticker TSLA │ Yes │\\n│ POST │ SHOULD │ A numeric value for net income expressed in dollars │ No │\\n└──────┴───────────┴─────────────────────────────────────────────────────┴───────────┘\"]\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can further inspect the detailed verification results with reasoning in the \", _jsx(_components.code, {\n children: \"output/verify_187a8d09.json\"\n }), \" file.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-json\",\n children: _jsxs(_components.code, {\n className: \"language-json\",\n children: [_jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"6f644c2e191daa723fcd7effac3de3e0\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"de_ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-de-ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"UNSATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-1o9d2re5\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input consists of a question that asks about which car manufacturer currently has the highest debt-to-equity ratio. This directly pertains to the debt-to-equity ratio, aligning perfectly with the specified property of asking about this financial metric.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-mpxqjtp9\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace shows that the system attempted to retrieve stock and financial data. Although a stock screener call returned multiple companies, only two car manufacturers (Toyota Motor Corporation and Tesla, Inc.) had their financial ratios retrieved successfully. The requirement was to retrieve financials for at least three car manufacturers, but only two were processed.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-0b8a77rw\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output does contain a table summarizing the debt-to-equity ratios for car manufacturers in the text format. However, it does not produce a proper table formatted in a structured manner, such as Markdown or HTML table formats as usually expected when the requirement is specifically to 'output a table'. The final result includes a list of messages and some formatted text, but it does not fulfill the specific property of presenting the data in a true table format. Therefore, the output does not fully satisfy the requirement of 'Output a table'.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-gmftn5r4\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output only includes information about Toyota and Tesla, specifically their debt-to-equity ratios. The requirement explicitly states that the output must include at least Tesla, Ford, and General Motors. Since Ford and General Motors are not mentioned in the system output, the requirement is not satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"0cbce717cb265f18e45f6047c3f6060d\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"nike_vs_adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-nike-vs-adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"SATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-1tqgsovv\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input consists of a question that explicitly asks for a comparison between two companies, Nike and Adidas, specifically regarding their operating margins. Since it directly requests a comparison, the requirement is clearly satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-3yz4o802\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The execution trace shows that the Financial_Data_Agent successfully called the 'get_financial_ratios' function with the symbol 'NKE' and retrieved several financial records for Nike, which include operating profit margins among other ratios. Additionally, the final summary clearly distinguishes Nike's financial data (with a ticker of NKE) from Adidas, confirming that the requirement to retrieve Nike financials with the ticker NKE was fulfilled.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-4bbi6llo\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace shows that after routing the request through multiple agents, the Financial_Data_Agent executed a get_financial_ratios call with the symbol ADDYY to retrieve Adidas financials. The retrieved data was then used in the final summary, which clearly displays Adidas's operating profit margin. Thus, the requirement to retrieve Adidas financials with ticker ADDYY has been satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-a50bzp2j\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output provides the operating profit margins for both Nike and Adidas, specifically stating them as 13.03% for Nike and 5.65% for Adidas. This information directly presents numeric values for operating margins, clearly expressed in percentage form. Therefore, the output satisfies the requirement of including a numeric value for operating margins expressed as a percentage.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"7d01b56e279cc75e44a3b2e57890b9bd\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"tesla_income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-tsla-income\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"SATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-j3n61sid\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input contains a question specifically asking about the changes in Tesla's net income over a period of five years. This directly relates to the requirement of asking about Tesla's net income.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-ghs1pr6x\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace successfully retrieved Tesla's net income data for TSLA. Both key metric and line item queries were made and the final summary provided a table of net income for 2020-2024, thus satisfying the requirement.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-sc0xkkxx\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The provided system output includes a summary of Tesla's net income in a tabular format, with values expressed in billions rather than dollars. For example, it states that in 2020, Tesla's net income was 0.721 billion, which translates to 721 million dollars. Although the output discusses and presents net income changes, it does not provide any numeric value expressed directly in dollars, which was the requirement. Therefore, it does not satisfy the specified property.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })\n }), \"\\n\"]\n })\n })\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{"config":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Agent Contracts","colors":{"primary":"#335BED","light":"#A3D0FF","dark":"#1E3A9F"},"logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/light.svg","dark":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/dark.svg"},"favicon":"/favicon.svg","navbar":{"links":[{"label":"Home","href":"https://relari.ai"},{"label":"Github","href":"https://github.com/relari-ai/agent-contracts"},{"label":"Whitepaper","href":"https://cdn.prod.website-files.com/669f7329c898141d69e16698/67cf788d56ca9dcf0b88e8d0_1859d1de14107778dccb73c5291f1d5d_Agent%20Contracts%20Whitepaper.pdf"}],"primary":{"type":"button","label":"Join Discord","href":"https://discord.gg/GJnM8SRsHr"}},"navigation":{"global":{"anchors":[]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":["introduction","why","core-concepts","installation"]},{"group":"Contracts","pages":["contracts/contracts","contracts/specifications"]},{"group":"Verification","pages":["verification/verification","verification/simulation"]},{"group":"Certification","pages":["certification/certification"]}]},{"tab":"Examples","groups":[{"group":"Contracts in Action","pages":["examples/finance-agent","examples/customer-support-agent","examples/browser-agent"]}]}]},"footer":{"socials":{"x":"https://x.com/relariai","github":"https://github.com/relari-ai","linkedin":"https://linkedin.com/company/relari"}}},"pageMetadata":{"title":"Finance Research Agent","description":"Finance Research Agent","icon":"dollar-sign","href":"/examples/finance-agent"}}},"mdxExtracts":{"tableOfContents":[{"title":"Agent Implementation","slug":"agent-implementation","depth":2,"children":[]},{"title":"Contract Specification","slug":"contract-specification","depth":2,"children":[]},{"title":"Running the Agent","slug":"running-the-agent","depth":2,"children":[]},{"title":"Verification Results","slug":"verification-results","depth":2,"children":[]}],"codeExamples":{}},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Finance Research Agent\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageData":{"navWithMetadata":[],"docsNavWithMetadata":{"global":{"anchors":[]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Introduction","description":"Welcome to Agent Contracts - created by Relari","href":"/introduction"},{"title":"Why Use Agent Contracts?","description":"Understanding why Agent Contracts are essential for building reliable AI agents","href":"/why"},{"title":"Core Concepts","description":"Understanding the key concepts of Agent Contracts","href":"/core-concepts"},{"title":"Installation","description":"Set up Agent Contracts in minutes","href":"/installation"}]},{"group":"Contracts","pages":[{"title":"Define Contracts","description":"Learn how to define contracts and requirements for AI agents","icon":"code","href":"/contracts/contracts"},{"title":"Scenarios \u0026 Specifications","description":"Learn how to organize test cases for offline evaluation of AI agents","icon":"folder-tree","href":"/contracts/specifications"}]},{"group":"Verification","pages":[{"title":"Offline Verification","description":"Evaluate your agent against contracts","icon":"chart-line","href":"/verification/verification"},{"title":"Simulation","description":"Test your agents with simulation","icon":"robot","href":"/verification/simulation"}]},{"group":"Certification","pages":[{"title":"Runtime Certification","description":"Certify your agent against contracts","icon":"shield-check","href":"/certification/certification"}]}]},{"tab":"Examples","groups":[{"group":"Contracts in Action","pages":[{"title":"Finance Research Agent","description":"Finance Research Agent","icon":"dollar-sign","href":"/examples/finance-agent"},{"title":"Customer Support Agent","description":"Running Verification on a Customer Support Agent","icon":"user","href":"/examples/customer-support-agent"},{"title":"Browser Agent","description":"Browser Agent","icon":"browser","href":"/examples/browser-agent"}]}]}]},"pageMetadata":{"title":"Finance Research Agent","description":"Finance Research Agent","icon":"dollar-sign","href":"/examples/finance-agent"},"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Agent Contracts","colors":{"primary":"#335BED","light":"#A3D0FF","dark":"#1E3A9F"},"logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/light.svg","dark":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/dark.svg"},"favicon":"/favicon.svg","navbar":{"links":[{"label":"Home","href":"https://relari.ai"},{"label":"Github","href":"https://github.com/relari-ai/agent-contracts"},{"label":"Whitepaper","href":"https://cdn.prod.website-files.com/669f7329c898141d69e16698/67cf788d56ca9dcf0b88e8d0_1859d1de14107778dccb73c5291f1d5d_Agent%20Contracts%20Whitepaper.pdf"}],"primary":{"type":"button","label":"Join Discord","href":"https://discord.gg/GJnM8SRsHr"}},"navigation":{"global":{"anchors":[]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":["introduction","why","core-concepts","installation"]},{"group":"Contracts","pages":["contracts/contracts","contracts/specifications"]},{"group":"Verification","pages":["verification/verification","verification/simulation"]},{"group":"Certification","pages":["certification/certification"]}]},{"tab":"Examples","groups":[{"group":"Contracts in Action","pages":["examples/finance-agent","examples/customer-support-agent","examples/browser-agent"]}]}]},"footer":{"socials":{"x":"https://x.com/relariai","github":"https://github.com/relari-ai","linkedin":"https://linkedin.com/company/relari"}}},"apiReferenceData":{}},"favicons":{"icons":[{"rel":"apple-touch-icon","sizes":"180x180","href":"https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/apple-touch-icon.png?v=3","type":"image/png"},{"rel":"icon","sizes":"32x32","href":"https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon-32x32.png?v=3","type":"image/png"},{"rel":"icon","sizes":"16x16","href":"https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon-16x16.png?v=3","type":"image/png"},{"rel":"shortcut icon","href":"https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/favicon.ico?v=3","type":"image/x-icon"}],"browserconfig":"https://mintlify.s3-us-west-1.amazonaws.com/relari-4243c669/_generated/favicon/browserconfig.xml?v=3"},"subdomain":"agent-contracts.relari.ai","actualSubdomain":"relari-4243c669","internalAnalyticsWriteKey":"phc_TXdpocbGVeZVm5VJmAsHTMrCofBQu3e0kN8HGMNGTVW","trieve":{"datasetId":"1097a677-ed38-4df7-8e55-fce83040c2f6"},"shouldIndex":true,"org":{"createdAt":"2024-07-22T04:54:15.545Z"},"cssFiles":[],"jsFiles":[],"mdxSourceWithNoJs":{"compiledSource":"/*Component note does not exist.*/\n\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n br: \"br\",\n code: \"code\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock, Heading, ZoomImage} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n if (!Heading) _missingMdxReference(\"Heading\", true);\n if (!ZoomImage) _missingMdxReference(\"ZoomImage\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(Heading, {\n level: \"2\",\n id: \"agent-implementation\",\n children: \"Agent Implementation\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The finance research agent was implemented using LangGraph with the following multi-agent architecture. \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples\",\n children: \"Try for yourself\"\n }), \".\"]\n }), \"\\n\", _jsx(ZoomImage, {\n children: _jsx(\"img\", {\n alt: \"Financial Research Agent\",\n src: \"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/images/fin-agent.png\"\n })\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"contract-specification\",\n children: \"Contract Specification\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"We can now define the scenarios and corresponding contract in a \", _jsx(_components.code, {\n children: \"Specification\"\n }), \".\"]\n }), \"\\n\", \"\\n\", _jsx(CodeBlock, {\n filename: \"define.py\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-python\",\n children: _jsxs(_components.code, {\n className: \"language-python\",\n children: [_jsxs(_components.span, {\n className: \"\",\n children: [_jsx(_components.span, {\n className: \"token keyword\",\n children: \"from\"\n }), \" relari_otel\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"specifications \", _jsx(_components.span, {\n className: \"token keyword\",\n children: \"import\"\n }), \" Specifications\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" Level\"]\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Tesla Income Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"tesla_income_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"tesla_income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Tesla Income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"How has Tesla's net income changed over the last five years?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-tsla-income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Question about Tesla's net income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Tesla's net income with the ticker TSLA\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"A numeric value for net income expressed in dollars\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Nike vs Adidas Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"nike_adidas_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"nike_vs_adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Nike vs Adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Between Nike and Adidas, which company has stronger operating margins?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-nike-vs-adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Comparison between Nike and Adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Nike financials with the ticker NKE\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve Adidas financials with the ticker ADDYY\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"A numeric value for operating margins expressed in percentage\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Debt-to-Equity Ratio Scenario\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"de_ratio_scenario \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"de_ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Debt-to-Equity Ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" data\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Which car manufacturer has the highest debt-to-equity ratio right now?\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" contracts\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Contract\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"ctr-de-ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" name\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Right Tickers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" requirements\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Precondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Question about the debt-to-equity ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Pathcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Retrieve the financials of at least 3 car manufacturers\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Output a table\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"MUST\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" Postcondition\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"Include at least Tesla, Ford, and General Motors\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" level\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \"Level\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"SHOULD\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" on\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"output\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token comment\",\n children: \"# Save a collection of scenarios in a Specification to be used for verification\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"spec \", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), \" Specifications\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" uuid\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" scenarios\", _jsx(_components.span, {\n className: \"token operator\",\n children: \"=\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n }), \"tesla_income_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" nike_adidas_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n }), \" de_ratio_scenario\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\"spec\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \".\"\n }), \"save\", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"(\"\n }), _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"specification.json\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \")\"\n })]\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Check out the outputed json file: \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json\",\n children: _jsx(_components.code, {\n children: \"specification.json\"\n })\n }), \".\"]\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"running-the-agent\",\n children: \"Running the Agent\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Start the verification server from the \", _jsx(_components.code, {\n children: \"agent-contracts\"\n }), \" directory (make sure you’ve downloaded and installed \", _jsx(_components.code, {\n children: \"agent-contracts\"\n }), \" repo \", _jsx(_components.a, {\n href: \"/installation\",\n children: \"installation\"\n }), \"). The verification server includes the telemetry collector necessary to receive the traces from the agent instrumented with \", _jsx(_components.code, {\n children: \"relari-otel\"\n }), \".\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-plaintext\",\n children: _jsxs(_components.code, {\n children: [_jsx(_components.span, {\n className: \"\",\n children: \"cd agent-contracts\"\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: \"make docker-verification\"\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Now run the app (the default command will run the scenarios defined in \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/specifications.json\",\n children: _jsx(_components.code, {\n children: \"specification.json\"\n })\n }), \"). Make sure you’ve installed the langgraph-fin-agent \", _jsx(_components.a, {\n href: \"https://github.com/relari-ai/agent-examples/blob/main/apps/langgraph-fin-agent/README.md\",\n children: \"README\"\n }), \".\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-plaintext\",\n children: _jsxs(_components.code, {\n children: [_jsx(_components.span, {\n className: \"\",\n children: \"cd agent-examples/apps/langgraph-fin-agent\"\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: \"poetry run finchat --eval\"\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can now viwe the traces in the Jaeger UI at \", _jsx(_components.code, {\n children: \"http://localhost:16686\"\n }), \". Or you can fetch the traces via the Agent Contracts CLI.\"]\n }), \"\\n\", _jsx(\"pre\", {\n style: {\n fontFamily: '\"Space Mono\", monospace',\n lineHeight: '1.2em'\n },\n children: _jsx(_components.p, {\n children: \"$ poetry run cli ls run —timespan 1h\\nListing runs from 2025-03-11 04:27:05.937162+00:00 to 2025-03-11 05:27:05.937158+00:00…\\n┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓\\n┃ Run ID ┃ Project Name ┃ Specifications ID ┃ Start Time ┃ End Time ┃\\n┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩\\n│ 187a8d09 │ langgraph-fin-agent │ yw936jmp │ 2025-03-10 21:56:20 │ 2025-03-10 21:56:20 │\\n└──────────┴─────────────────────┴───────────────────┴─────────────────────┴─────────────────────┘\"\n })\n }), \"\\n\", _jsx(Heading, {\n level: \"2\",\n id: \"verification-results\",\n children: \"Verification Results\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The following is the verification results post-execution. We can see that the \", _jsx(_components.code, {\n children: \"con-comparison\"\n }), \" and \", _jsx(_components.code, {\n children: \"con-analysis\"\n }), \" contracts are satisfied while the \", _jsx(_components.code, {\n children: \"con-liquidity-analysis\"\n }), \" contract is not.\"]\n }), \"\\n\", _jsx(\"pre\", {\n style: {\n fontFamily: '\"Space Mono\", monospace',\n lineHeight: '1.2em'\n },\n children: _jsxs(_components.p, {\n children: [\"$ poetry run cli verify run 187a8d09 /Users/yisz/code/Relari/agent-examples/apps/langgraph-fin-agent/specifications.json —timespan 1d\\nVerifying run 187a8d09 with specifications from agent-examples/apps/langgraph-fin-agent/specifications.json…\\nOutput will be saved to output/verify_187a8d09.json\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 3/3 [00:06 \u003c 00:00, 2.06s/it]\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:08 \u003c 00:00, 2.22s/it]\\nContract Right Tickers: 100%|████████████████████████████████████████████████████████████| 4/4 [00:10 \u003c 00:00, 2.64s/it]\\n─────────────────────────────────────── Trace 6f644c2e191daa723fcd7effac3de3e0 ────────────────────────────────────────\\nRight Tickers (UNSATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Question about the debt-to-equity ratio │ Yes │\\n│ PATH │ MUST │ Retrieve the financials of at least 3 car manufacturers │ No │\\n│ POST │ MUST │ Output a table │ No │\\n│ POST │ SHOULD │ Include at least Tesla, Ford, and General Motors │ No │\\n└──────┴───────────┴─────────────────────────────────────────────────────────┴───────────┘\\n─────────────────────────────────────── Trace 0cbce717cb265f18e45f6047c3f6060d ────────────────────────────────────────\\nRight Tickers (SATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Comparison between Nike and Adidas │ Yes │\\n│ PATH │ MUST │ Retrieve Nike financials with the ticker NKE │ Yes │\\n│ PATH │ MUST │ Retrieve Adidas financials with the ticker ADDYY │ Yes │\\n│ POST │ SHOULD │ A numeric value for operating margins expressed in percentage │ Yes │\\n└──────┴───────────┴───────────────────────────────────────────────────────────────┴───────────┘\\n─────────────────────────────────────── Trace 7d01b56e279cc75e44a3b2e57890b9bd ────────────────────────────────────────\\nRight Tickers (SATISFIED)\", _jsx(_components.br, {}), \"\\n\", \"┏━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓\\n┃ Type ┃ Qualifier ┃ Requirement ┃ Satisfied ┃\\n┡━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩\\n│ PRE │ MUST │ Question about Tesla’s net income │ Yes │\\n│ PATH │ MUST │ Retrieve Tesla’s net income with the ticker TSLA │ Yes │\\n│ POST │ SHOULD │ A numeric value for net income expressed in dollars │ No │\\n└──────┴───────────┴─────────────────────────────────────────────────────┴───────────┘\"]\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"You can further inspect the detailed verification results with reasoning in the \", _jsx(_components.code, {\n children: \"output/verify_187a8d09.json\"\n }), \" file.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n filename: \"\",\n expandable: \"false\",\n children: _jsx(_components.pre, {\n className: \"language-json\",\n children: _jsxs(_components.code, {\n className: \"language-json\",\n children: [_jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"[\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"6f644c2e191daa723fcd7effac3de3e0\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"de_ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-de-ratio\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"UNSATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-1o9d2re5\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input consists of a question that asks about which car manufacturer currently has the highest debt-to-equity ratio. This directly pertains to the debt-to-equity ratio, aligning perfectly with the specified property of asking about this financial metric.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-mpxqjtp9\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace shows that the system attempted to retrieve stock and financial data. Although a stock screener call returned multiple companies, only two car manufacturers (Toyota Motor Corporation and Tesla, Inc.) had their financial ratios retrieved successfully. The requirement was to retrieve financials for at least three car manufacturers, but only two were processed.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-0b8a77rw\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output does contain a table summarizing the debt-to-equity ratios for car manufacturers in the text format. However, it does not produce a proper table formatted in a structured manner, such as Markdown or HTML table formats as usually expected when the requirement is specifically to 'output a table'. The final result includes a list of messages and some formatted text, but it does not fulfill the specific property of presenting the data in a true table format. Therefore, the output does not fully satisfy the requirement of 'Output a table'.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-gmftn5r4\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output only includes information about Toyota and Tesla, specifically their debt-to-equity ratios. The requirement explicitly states that the output must include at least Tesla, Ford, and General Motors. Since Ford and General Motors are not mentioned in the system output, the requirement is not satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"0cbce717cb265f18e45f6047c3f6060d\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"nike_vs_adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-nike-vs-adidas\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"SATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-1tqgsovv\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input consists of a question that explicitly asks for a comparison between two companies, Nike and Adidas, specifically regarding their operating margins. Since it directly requests a comparison, the requirement is clearly satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-3yz4o802\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The execution trace shows that the Financial_Data_Agent successfully called the 'get_financial_ratios' function with the symbol 'NKE' and retrieved several financial records for Nike, which include operating profit margins among other ratios. Additionally, the final summary clearly distinguishes Nike's financial data (with a ticker of NKE) from Adidas, confirming that the requirement to retrieve Nike financials with the ticker NKE was fulfilled.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-4bbi6llo\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace shows that after routing the request through multiple agents, the Financial_Data_Agent executed a get_financial_ratios call with the symbol ADDYY to retrieve Adidas financials. The retrieved data was then used in the final summary, which clearly displays Adidas's operating profit margin. Thus, the requirement to retrieve Adidas financials with ticker ADDYY has been satisfied.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-a50bzp2j\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The system output provides the operating profit margins for both Nike and Adidas, specifically stating them as 13.03% for Nike and 5.65% for Adidas. This information directly presents numeric values for operating margins, clearly expressed in percentage form. Therefore, the output satisfies the requirement of including a numeric value for operating margins expressed as a percentage.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"trace_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"7d01b56e279cc75e44a3b2e57890b9bd\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"specifications_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"yw936jmp\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"scenario_id\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"tesla_income\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"contracts\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"ctr-tsla-income\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"status\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"SATISFIED\\\"\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"info\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-j3n61sid\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The input contains a question specifically asking about the changes in Tesla's net income over a period of five years. This directly relates to the requirement of asking about Tesla's net income.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-ghs1pr6x\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"true\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The trace successfully retrieved Tesla's net income data for TSLA. Both key metric and line item queries were made and the final summary provided a table of net income for 2020-2024, thus satisfying the requirement.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"req-sc0xkkxx\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"{\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"satisfied\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token boolean\",\n children: \"false\"\n }), _jsx(_components.span, {\n className: \"token punctuation\",\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token property\",\n children: \"\\\"explanation\\\"\"\n }), _jsx(_components.span, {\n className: \"token operator\",\n children: \":\"\n }), \" \", _jsx(_components.span, {\n className: \"token string\",\n children: \"\\\"The provided system output includes a summary of Tesla's net income in a tabular format, with values expressed in billions rather than dollars. For example, it states that in 2020, Tesla's net income was 0.721 billion, which translates to 721 million dollars. Although the output discusses and presents net income changes, it does not provide any numeric value expressed directly in dollars, which was the requirement. Therefore, it does not satisfy the specified property.\\\"\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"\",\n children: [\" \", _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"}\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"\",\n children: _jsx(_components.span, {\n className: \"token punctuation\",\n children: \"]\"\n })\n }), \"\\n\"]\n })\n })\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{"config":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Agent Contracts","colors":{"primary":"#335BED","light":"#A3D0FF","dark":"#1E3A9F"},"logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/light.svg","dark":"https://mintlify.s3.us-west-1.amazonaws.com/relari-4243c669/logo/dark.svg"},"favicon":"/favicon.svg","navbar":{"links":[{"label":"Home","href":"https://relari.ai"},{"label":"Github","href":"https://github.com/relari-ai/agent-contracts"},{"label":"Whitepaper","href":"https://cdn.prod.website-files.com/669f7329c898141d69e16698/67cf788d56ca9dcf0b88e8d0_1859d1de14107778dccb73c5291f1d5d_Agent%20Contracts%20Whitepaper.pdf"}],"primary":{"type":"button","label":"Join Discord","href":"https://discord.gg/GJnM8SRsHr"}},"navigation":{"global":{"anchors":[]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":["introduction","why","core-concepts","installation"]},{"group":"Contracts","pages":["contracts/contracts","contracts/specifications"]},{"group":"Verification","pages":["verification/verification","verification/simulation"]},{"group":"Certification","pages":["certification/certification"]}]},{"tab":"Examples","groups":[{"group":"Contracts in Action","pages":["examples/finance-agent","examples/customer-support-agent","examples/browser-agent"]}]}]},"footer":{"socials":{"x":"https://x.com/relariai","github":"https://github.com/relari-ai","linkedin":"https://linkedin.com/company/relari"}}},"pageMetadata":{"title":"Finance Research Agent","description":"Finance Research Agent","icon":"dollar-sign","href":"/examples/finance-agent"}}},"gitSource":{"type":"github","owner":"relari-ai","repo":"agent-contract-docs","deployBranch":"main","contentDirectory":"","isPrivate":true},"banner":null},"__N_SSG":true},"page":"/_sites/[subdomain]/[[...slug]]","query":{"subdomain":"agent-contracts.relari.ai","slug":["examples","finance-agent"]},"buildId":"gjnLtp2YZHsj8gjcSlAnS","isFallback":false,"isExperimentalCompile":false,"gsp":true,"scriptLoader":[]}</script></html></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10