|
108 | 108 | animation-delay: 3s; |
109 | 109 | border-radius: 5px; |
110 | 110 | } |
| 111 | + |
| 112 | + @keyframes titleCaretBlink { |
| 113 | + 0%, 49% { opacity: 1; } |
| 114 | + 50%, 100% { opacity: 0; } |
| 115 | + } |
| 116 | + |
| 117 | + [data-typing-title] { |
| 118 | + display: inline-block; |
| 119 | + } |
| 120 | + |
| 121 | + [data-typing-title].typing-pending { |
| 122 | + visibility: hidden; |
| 123 | + } |
| 124 | + |
| 125 | + [data-typing-title].typing-active, |
| 126 | + [data-typing-title].typing-done { |
| 127 | + visibility: visible; |
| 128 | + } |
| 129 | + |
| 130 | + [data-typing-title].typing-active::after { |
| 131 | + content: ""; |
| 132 | + display: inline-block; |
| 133 | + width: 0.08em; |
| 134 | + height: 0.9em; |
| 135 | + margin-left: 0.08em; |
| 136 | + background: currentColor; |
| 137 | + vertical-align: -0.08em; |
| 138 | + animation: titleCaretBlink 0.9s steps(1, end) infinite; |
| 139 | + } |
| 140 | + |
| 141 | + @media (prefers-reduced-motion: reduce) { |
| 142 | + [data-typing-title].typing-pending { |
| 143 | + visibility: visible; |
| 144 | + } |
| 145 | + |
| 146 | + [data-typing-title].typing-active::after { |
| 147 | + animation: none; |
| 148 | + } |
| 149 | + } |
111 | 150 | </style> |
112 | 151 | </head> |
113 | 152 | <body class="font-sans text-stone-600 antialiased selection:bg-nature-light selection:text-white bg-nature-page"> |
@@ -260,7 +299,7 @@ <h1 class="text-4xl tracking-tight font-extrabold text-nature-dark sm:text-5xl m |
260 | 299 | <section id="adl-studio" class="py-16 bg-gradient-to-br from-nature-page to-white border-t border-nature-border"> |
261 | 300 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
262 | 301 | <div class="text-center mb-16"> |
263 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">The Face</h2> |
| 302 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">The Face</h2> |
264 | 303 | <p class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
265 | 304 | ADL Studio |
266 | 305 | </p> |
@@ -369,7 +408,7 @@ <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase"> |
369 | 408 | <section id="run-adl-server" class="py-16 bg-nature-page border-t border-nature-border"> |
370 | 409 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
371 | 410 | <div class="text-center mb-12"> |
372 | | - <h2 class="text-3xl font-extrabold text-nature-dark tracking-tight">Run ADL Server + Studio</h2> |
| 411 | + <h2 data-typing-title class="text-3xl font-extrabold text-nature-dark tracking-tight">Run ADL Server + Studio</h2> |
373 | 412 | <p class="mt-4 text-xl text-stone-600 lg:mx-auto"> |
374 | 413 | Get up and running quickly with Docker. |
375 | 414 | </p> |
@@ -442,7 +481,7 @@ <h2 class="text-3xl font-extrabold text-nature-dark tracking-tight">Run ADL Serv |
442 | 481 | <section id="philosophy" class="py-16 bg-white border-t border-nature-border"> |
443 | 482 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
444 | 483 | <div class="text-center"> |
445 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">Core Philosophy</h2> |
| 484 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">Core Philosophy</h2> |
446 | 485 | <p class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
447 | 486 | Why Agent Programming? |
448 | 487 | </p> |
@@ -508,7 +547,7 @@ <h3 class="mt-8 text-xl font-bold text-nature-dark text-center group-hover:text- |
508 | 547 | <section id="adl-example" class="py-16 bg-white border-t border-nature-border"> |
509 | 548 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
510 | 549 | <div class="text-center mb-12"> |
511 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">In Action</h2> |
| 550 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">In Action</h2> |
512 | 551 | <p class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
513 | 552 | ADL Examples |
514 | 553 | </p> |
@@ -684,7 +723,7 @@ <h4 class="font-bold text-xs text-stone-500 uppercase tracking-wide mb-2">Scenar |
684 | 723 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
685 | 724 | <div class="lg:grid lg:grid-cols-12 lg:gap-16 items-center"> |
686 | 725 | <div class="lg:col-span-7"> |
687 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">The Paradigm Shift</h2> |
| 726 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">The Paradigm Shift</h2> |
688 | 727 | <h3 class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
689 | 728 | ADL Skills |
690 | 729 | </h3> |
@@ -766,7 +805,7 @@ <h4 class="text-sm font-bold text-nature-primary mb-2 flex items-center gap-2"> |
766 | 805 | <section id="technical-spec" class="py-16 bg-nature-page border-t border-nature-border"> |
767 | 806 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
768 | 807 | <div class="text-center mb-12"> |
769 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">Technical Specification</h2> |
| 808 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">Technical Specification</h2> |
770 | 809 | <p class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
771 | 810 | ADL Skill Format & Capabilities |
772 | 811 | </p> |
@@ -811,6 +850,18 @@ <h3 class="text-2xl font-bold text-nature-dark">ADL Skill Structure</h3> |
811 | 850 | <span class="font-semibold text-nature-primary min-w-[7rem]">Goal</span> |
812 | 851 | <span>(Optional) The objective of the skill, useful for evals and tracking business objectives.</span> |
813 | 852 | </li> |
| 853 | + <li class="flex gap-3 items-start p-3 rounded-lg bg-white border border-nature-border/70"> |
| 854 | + <span class="font-semibold text-nature-primary min-w-[7rem]">Examples</span> |
| 855 | + <span> |
| 856 | + (Optional) Defines a list of utterances that trigger the skill. |
| 857 | + <span class="block mt-1 text-stone-500">For example:</span> |
| 858 | + <ul class="list-disc list-inside mt-1 space-y-1 text-stone-500"> |
| 859 | + <li>i would like to know the weather</li> |
| 860 | + <li>weather?</li> |
| 861 | + <li>what is the weather forecast for my area?</li> |
| 862 | + </ul> |
| 863 | + </span> |
| 864 | + </li> |
814 | 865 | <li class="flex gap-3 items-start p-3 rounded-lg bg-white border border-nature-border/70"> |
815 | 866 | <span class="font-semibold text-nature-primary min-w-[7rem]">Context</span> |
816 | 867 | <span>(Optional) Extra information LLM may need to answer any questions the customer may have.</span> |
@@ -1298,7 +1349,7 @@ <h4 id="comments" class="font-bold text-nature-dark mb-2">Comments</h4> |
1298 | 1349 | <section id="architecture" class="py-20 bg-white border-t border-nature-border"> |
1299 | 1350 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
1300 | 1351 | <div class="text-center mb-16"> |
1301 | | - <h2 class="text-base text-nature-primary font-semibold tracking-wide uppercase">Integration</h2> |
| 1352 | + <h2 data-typing-title class="text-base text-nature-primary font-semibold tracking-wide uppercase">Integration</h2> |
1302 | 1353 | <p class="mt-2 text-3xl leading-8 font-extrabold tracking-tight text-nature-dark sm:text-4xl"> |
1303 | 1354 | Connect Anywhere |
1304 | 1355 | </p> |
@@ -1427,7 +1478,7 @@ <h3 class="font-bold text-white text-xl">ADL Engine</h3> |
1427 | 1478 | <div class="overflow-x-auto pb-2"> |
1428 | 1479 | <div class="flex items-start gap-16 min-w-[1240px]"> |
1429 | 1480 | <div class="w-[520px] shrink-0"> |
1430 | | - <h2 class="text-3xl font-extrabold text-nature-dark tracking-tight">OpenAI Compatible Endpoint</h2> |
| 1481 | + <h2 data-typing-title class="text-3xl font-extrabold text-nature-dark tracking-tight">OpenAI Compatible Endpoint</h2> |
1431 | 1482 | <p class="mt-4 text-lg text-stone-600"> |
1432 | 1483 | Integration is effortless. ADL Server exposes a standard <code class="text-nature-primary">/v1/chat/completions</code> |
1433 | 1484 | endpoint. |
@@ -1540,7 +1591,7 @@ <h2 class="text-3xl font-extrabold text-nature-dark tracking-tight">OpenAI Compa |
1540 | 1591 | <section id="graphql-api" class="py-16 bg-white border-t border-nature-border"> |
1541 | 1592 | <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
1542 | 1593 | <div class="text-center mb-12"> |
1543 | | - <h2 class="text-3xl font-extrabold text-nature-dark tracking-tight">GraphQL API</h2> |
| 1594 | + <h2 data-typing-title class="text-3xl font-extrabold text-nature-dark tracking-tight">GraphQL API</h2> |
1544 | 1595 | <p class="mt-4 text-xl text-stone-600 lg:mx-auto"> |
1545 | 1596 | Comprehensive API for managing, compiling, testing, and evaluating your ADLs. |
1546 | 1597 | </p> |
@@ -1697,6 +1748,82 @@ <h3 class="text-sm font-semibold text-stone-200 tracking-wider uppercase mb-4">E |
1697 | 1748 | </div> |
1698 | 1749 | </footer> |
1699 | 1750 |
|
| 1751 | +<script> |
| 1752 | + (function () { |
| 1753 | + const titles = Array.from(document.querySelectorAll('[data-typing-title]')); |
| 1754 | + if (!titles.length) return; |
| 1755 | + |
| 1756 | + const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; |
| 1757 | + |
| 1758 | + const showFinalTitle = (el) => { |
| 1759 | + const fullText = el.dataset.fullText || el.textContent || ''; |
| 1760 | + el.textContent = fullText; |
| 1761 | + el.classList.remove('typing-pending', 'typing-active'); |
| 1762 | + el.classList.add('typing-done'); |
| 1763 | + }; |
| 1764 | + |
| 1765 | + const typeTitle = (el) => { |
| 1766 | + if (el.dataset.typed === 'true') return; |
| 1767 | + const fullText = el.dataset.fullText || ''; |
| 1768 | + const speed = Number(el.dataset.typingSpeed || 28); |
| 1769 | + |
| 1770 | + el.dataset.typed = 'true'; |
| 1771 | + el.textContent = ''; |
| 1772 | + el.classList.remove('typing-pending'); |
| 1773 | + el.classList.add('typing-active'); |
| 1774 | + |
| 1775 | + let index = 0; |
| 1776 | + const step = () => { |
| 1777 | + index += 1; |
| 1778 | + el.textContent = fullText.slice(0, index); |
| 1779 | + |
| 1780 | + if (index < fullText.length) { |
| 1781 | + window.setTimeout(step, speed); |
| 1782 | + return; |
| 1783 | + } |
| 1784 | + |
| 1785 | + el.classList.remove('typing-active'); |
| 1786 | + el.classList.add('typing-done'); |
| 1787 | + }; |
| 1788 | + |
| 1789 | + step(); |
| 1790 | + }; |
| 1791 | + |
| 1792 | + titles.forEach((el) => { |
| 1793 | + el.dataset.fullText = (el.textContent || '').trim(); |
| 1794 | + |
| 1795 | + if (reducedMotion) { |
| 1796 | + showFinalTitle(el); |
| 1797 | + } else { |
| 1798 | + el.classList.add('typing-pending'); |
| 1799 | + } |
| 1800 | + }); |
| 1801 | + |
| 1802 | + if (reducedMotion) return; |
| 1803 | + |
| 1804 | + if (!('IntersectionObserver' in window)) { |
| 1805 | + titles.forEach(showFinalTitle); |
| 1806 | + return; |
| 1807 | + } |
| 1808 | + |
| 1809 | + const observer = new IntersectionObserver( |
| 1810 | + (entries) => { |
| 1811 | + entries.forEach((entry) => { |
| 1812 | + if (!entry.isIntersecting) return; |
| 1813 | + typeTitle(entry.target); |
| 1814 | + observer.unobserve(entry.target); |
| 1815 | + }); |
| 1816 | + }, |
| 1817 | + { |
| 1818 | + threshold: 0.35, |
| 1819 | + rootMargin: '0px 0px -10% 0px' |
| 1820 | + } |
| 1821 | + ); |
| 1822 | + |
| 1823 | + titles.forEach((title) => observer.observe(title)); |
| 1824 | + })(); |
| 1825 | +</script> |
| 1826 | + |
1700 | 1827 | <script src="/lmos/arc2/assets/js/cookieconsent.min.js"></script> |
1701 | 1828 |
|
1702 | 1829 | </body> |
|
0 commit comments