<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Helicone]]></title><description><![CDATA[The easiest way to monitor your LLM-applications at scale. With only two lines of code, thousands of developers and companies have streamlined their LLM-powered application infrastructure with Helicone's solutions. ]]></description><link>https://blog.helicone.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!Zztb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c326d87-04f1-4cd7-8021-4eb61bf4270d_766x766.png</url><title>Helicone</title><link>https://blog.helicone.ai</link></image><generator>Substack</generator><lastBuildDate>Sat, 04 Apr 2026 23:57:16 GMT</lastBuildDate><atom:link href="https://blog.helicone.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Helicone]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[helicone@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[helicone@substack.com]]></itunes:email><itunes:name><![CDATA[Scott Nguyen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Scott Nguyen]]></itunes:author><googleplay:owner><![CDATA[helicone@substack.com]]></googleplay:owner><googleplay:email><![CDATA[helicone@substack.com]]></googleplay:email><googleplay:author><![CDATA[Scott Nguyen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Easily Share LLM Analytics with your Customers]]></title><description><![CDATA[How to leverage Helicone's Customer Portal to manage your customers, share analytics, provide authentication and billing.]]></description><link>https://blog.helicone.ai/p/easily-share-llm-analytics-with-your</link><guid isPermaLink="false">https://blog.helicone.ai/p/easily-share-llm-analytics-with-your</guid><dc:creator><![CDATA[Cole Gottdank]]></dc:creator><pubDate>Wed, 24 Jan 2024 22:34:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/15d80847-32a1-4e9e-9837-4057a833ab59_1100x220.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>What is it?</h1><p>With <a href="https://docs.helicone.ai/features/customer_portal/intro">Helicone&#8217;s Customer Portal</a>, you and your team can easily manage your customers and their usage. No need to handle authentication, build customer usage dashboards, implement billing systems, or keep track of your customer&#8217;s usage.</p><p>Helicone&#8217;s integration is quick and easy to set up and you can start collecting your customer&#8217;s usage and provide them with rich dashboards in minutes.</p><h1>How does it work?</h1><p>Helicone&#8217;s Customer Portal is a proxy that sits between your model and your customers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BcQD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BcQD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 424w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 848w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 1272w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BcQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png" width="707" height="402.40805604203155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:571,&quot;resizeWidth&quot;:707,&quot;bytes&quot;:33840,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BcQD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 424w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 848w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 1272w, https://substackcdn.com/image/fetch/$s_!BcQD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0c9637-9670-4c33-9042-307e4e005fef_571x325.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Example:</h3><p><strong>Acme&#8217;s Integration of Helicone</strong></p><p><strong>Background:</strong> Acme offers an LLM chatbot and faces challenges with API management, billing, usage monitoring, authentication, rate limiting, and more.</p><p><strong>Solution: Helicone</strong></p><ul><li><p><strong>Helicone Proxy:</strong> Serves as a secure gateway, authenticating client requests, enforcing rate limits, caching for performance, and logging for audit trails.</p></li><li><p><strong>Dashboard and Playground:</strong> Clients now access a Helicone-powered dashboard to monitor usage statistics, LLM logging, and experiment in a sandbox environment.</p></li><li><p><strong>Usage and Billing:</strong> Real-time API usage data is displayed via Helicone, ensuring accurate and transparent billing.</p></li><li><p><strong>CRM Integration:</strong> Client management is improved through a CRM system connected within Helicone, fostering better client relationships.</p></li></ul><h2>Take a tour</h2><ol><li><p><strong>Getting started</strong></p></li></ol><p>Acme fills out our <a href="https://www.helicone.ai/sales?customer-portal=true">customer portal form</a>. After being approved, they receive a top-level domain &#8216;acme.hconeai.com&#8217; and a &#8216;customer portal&#8217; button on their Helicone.ai dashboard. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Re-s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Re-s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 424w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 848w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 1272w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Re-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png" width="450" height="389.9436090225564" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:1064,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:100048,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Re-s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 424w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 848w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 1272w, https://substackcdn.com/image/fetch/$s_!Re-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffce9a8a5-762f-4731-a392-ad0d73353cf9_1064x922.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="2"><li><p><strong>Adding customers!</strong></p></li></ol><p>Once in the portal, Acme can add customers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eZIf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eZIf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 424w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 848w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 1272w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eZIf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png" width="512" height="288" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37517166-6af3-4154-80fe-e655ebae998f_1610x906.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:133618,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eZIf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 424w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 848w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 1272w, https://substackcdn.com/image/fetch/$s_!eZIf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37517166-6af3-4154-80fe-e655ebae998f_1610x906.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="3"><li><p><strong>Authenticate the customer</strong></p></li></ol><p>Acme is providing its chatbot to customers. So, they create a new customer profile, with LLM usage limits and their &#8216;Provider Key&#8217;.</p><p>The &#8216;Provider Key&#8217; can be anything you want, it is just a way to authenticate with the LLM provider (or your own model). Customers will <strong>never</strong> see the &#8216;Provider Key&#8217; they will only see the &#8216;Helicone Keys&#8217; they generate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IsqD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IsqD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 424w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 848w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 1272w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IsqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png" width="322" height="494.1290322580645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1332,&quot;width&quot;:868,&quot;resizeWidth&quot;:322,&quot;bytes&quot;:97606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IsqD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 424w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 848w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 1272w, https://substackcdn.com/image/fetch/$s_!IsqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58b5097c-ff6b-4883-9929-3ec3d18242d5_868x1332.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="4"><li><p><strong>Manage customers</strong></p></li></ol><p>Acme can now manage all of its customers from the customer portal.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rjfK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rjfK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 424w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 848w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 1272w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rjfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png" width="490" height="179.375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:533,&quot;width&quot;:1456,&quot;resizeWidth&quot;:490,&quot;bytes&quot;:107912,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rjfK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 424w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 848w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 1272w, https://substackcdn.com/image/fetch/$s_!rjfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b26d2a-ebcc-4044-864b-a873f6c88611_1930x706.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Acme then gives their customers access to Helicone by adding them as a member!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sd4Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sd4Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 424w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 848w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sd4Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png" width="528" height="282.85714285714283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1456,&quot;resizeWidth&quot;:528,&quot;bytes&quot;:174779,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sd4Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 424w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 848w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 1272w, https://substackcdn.com/image/fetch/$s_!sd4Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd34704-cff3-4845-8b72-c3c66f6cadb8_1970x1056.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="5"><li><p><strong>Customer&#8217;s Experience</strong></p></li></ol><p>Once their customers log in, they get access to the full Helicone feature set! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kILy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kILy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 424w, https://substackcdn.com/image/fetch/$s_!kILy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 848w, https://substackcdn.com/image/fetch/$s_!kILy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!kILy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kILy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png" width="460" height="372.22381635581064" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1128,&quot;width&quot;:1394,&quot;resizeWidth&quot;:460,&quot;bytes&quot;:109589,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kILy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 424w, https://substackcdn.com/image/fetch/$s_!kILy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 848w, https://substackcdn.com/image/fetch/$s_!kILy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!kILy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a51e040-cc62-4269-bbf6-f2b5f8ea839c_1394x1128.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The customers can create &#8216;Helicone Keys&#8217; which will be used as a Bearer token when making requests. They will map to the provided &#8216;Provider Key&#8217; to authenticate with Acme&#8217;s model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JCox!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JCox!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 424w, https://substackcdn.com/image/fetch/$s_!JCox!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 848w, https://substackcdn.com/image/fetch/$s_!JCox!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 1272w, https://substackcdn.com/image/fetch/$s_!JCox!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JCox!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png" width="482" height="324.4230769230769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:980,&quot;width&quot;:1456,&quot;resizeWidth&quot;:482,&quot;bytes&quot;:161667,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JCox!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 424w, https://substackcdn.com/image/fetch/$s_!JCox!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 848w, https://substackcdn.com/image/fetch/$s_!JCox!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 1272w, https://substackcdn.com/image/fetch/$s_!JCox!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd781325f-1731-4442-b26f-8248e42ba75a_1598x1076.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol start="6"><li><p><strong>How customers will use your model</strong></p></li></ol><p>The customer can now make a request using the newly generated &#8216;Helicone Key&#8217;. They will be authenticated in Helicone and proxied to the Acme model endpoint. </p><pre><code> curl --request POST \
     --url https://acme.hconeai.com/v1 \
     --header 'Authorization: Bearer &lt;&lt;HELICONE_CUSTOMER_PORTAL_KEY&gt;&gt; \
     --data '{...}'</code></pre><p></p><p>That&#8217;s it! Now your customers can use your model and you can charge them for it! Selling models has just become 10x easier.</p><p></p><p>If you are interested in getting started, please fill out our <a href="https://www.helicone.ai/sales?customer-portal=true">customer portal form</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.helicone.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading our blog post! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Building Alerts w/ Clickhouse. The MVP Approach.]]></title><description><![CDATA[Follow my journey as I design and build near real-time, pull-based alerts using Clickhouse. The anti-over engineered approach.]]></description><link>https://blog.helicone.ai/p/building-a-simple-near-real-time</link><guid isPermaLink="false">https://blog.helicone.ai/p/building-a-simple-near-real-time</guid><dc:creator><![CDATA[Cole Gottdank]]></dc:creator><pubDate>Mon, 18 Dec 2023 19:00:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uOIO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p>"Clickhouse, like celestial beacons in the cosmic expanse, illuminate the path, signaling alerts in the vast ocean of real-time data." - Galileo Galilei</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uOIO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uOIO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 424w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 848w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uOIO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1622907,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uOIO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 424w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 848w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!uOIO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a76dec0-d42e-4d20-9e0e-15fe340c8838_1792x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h2>The Context</h2><p><a href="https://helicone.ai/">Helicone</a> is an at-scale LLM monitoring platform (with tons of amazing features). Recently, we&#8217;ve been receiving a surge of requests for alerting, especially for cost, error rate, and latency. In this blog, we delve into the details of our design and build process with the rationale behind our approach.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.helicone.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading this post by Helicone! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Requirements</h2><p>Approaching requirements at a startup requires a different mindset than you might be used to at larger, more established companies. It is critical to prioritize rapid development to find product-market fit. Perfection can wait. Below is a demonstration of the process we go through to determine the MVP.</p><ol><li><p><strong><s>Versatile Alerts: </s></strong><s>Support different alert types</s></p><ol><li><p>Let's begin with error rate alerts and determine if there's user demand for them before we branch out into more types.</p></li></ol></li><li><p><strong><s>Real-time push-based: </s></strong><s>Instant notification</s></p><ol><li><p>Near real-time pull-based works</p></li></ol></li><li><p><strong><s>Efficient Data Management: </s></strong><s>Store logs in minute blocks</s></p><ol><li><p>All in Clickhouse &lt;3</p></li></ol></li><li><p><strong>Smart Alert Resolution: </strong>Avoid constant re-triggering</p><ol><li><p>Necessary for MVP or alerts could become useless. 5-minute cooldown before an alert can be resolved after it goes below the threshold.</p></li></ol></li><li><p><strong><s>Easy Integration: </s></strong><s>Easily add new types</s></p><ol><li><p>Meh, figure this out later</p></li></ol></li><li><p><strong><s>Scalable: </s></strong><s>Handle all the scale!</s></p><ol><li><p>As long as it can handle a few months of scale we&#8217;re good. If alerts become a hit, then it&#8217;s time to scale it up! We can always throw money at this problem and scale vertically</p></li></ol></li><li><p><strong>Customizable Thresholds: </strong>Threshold to signal alert</p><ol><li><p>Custom thresholds are enabled as some users expect a certain % of errors, which is a necessity.</p></li></ol></li><li><p><strong>Customizable Time Windows: </strong>Timespan to check the alert threshold</p><ol><li><p>Custom time windows are not a necessity, but easy to implement&#8230;</p></li></ol></li><li><p><strong>Customizable Minimum Request Threshold:</strong> Minimum requests that are required before an alert can be triggered</p><ol><li><p>Necessary to prevent low-traffic errors from triggering alerts, avoiding the need for higher threshold adjustments in high-traffic periods.</p></li></ol></li><li><p><strong><s>Multi-channel Notifications: </s></strong><s>SMS, email, webhooks, etc</s></p><ol><li><p>Email works</p></li></ol></li><li><p><strong><s>Real-Time Dashboards: </s></strong><s>Instantly be aware of the alert</s></p><ol><li><p>Near real-time seems to do the trick</p></li></ol></li></ol><div class="pullquote"><p>&#8220;The most effective startup engineers are those who know the right way to do a thing, but actively choose not to do it&#8221; - Justin Torre</p></div><h2>Implementation Details</h2><p>Configured alerts will simply be stored in Postgres, however, we need a solution for checking the alert state (triggered, resolved, cooldown). We compared the following 3 options:</p><h3>Postgres</h3><p>Postgres, while reliable, falls short in scaling, especially for time-sensitive metric aggregation.</p><h3>Durable Objects</h3><p>A good fit with our Cloudflare Workers stack but adds complexity in managing alerts across both Postgres and Durable Objects.</p><h3>Clickhouse</h3><p><strong>Our choice.</strong> We currently log requests/responses to Clickhouse to support aggregations. We can leverage Clickhouse by adding a cron job that runs every minute to check the alert state. The max time window is 1 hour, so it will be quite efficient. If we hit a scaling bottleneck? We&#8217;re ready to scale financially (vertically) and technically as needed. Cue the all-nighters with Red Bull and coffee (not sponsored).  </p><h3>Postgres Table Definitions For Alerts &amp; Alert History</h3><p>Some denormalization takes place for faster querying.</p><pre><code>CREATE TABLE alert (
    id uuid not null default gen_random_uuid() primary key,
    org_id UUID NOT NULL REFERENCES public.organization(id),
    metric TEXT NOT NULL,
    threshold DECIMAL NOT NULL,
    time_window BIGINT NOT NULL,
    time_block_duration BIGINT NOT NULL DEFAULT 60000,
    emails TEXT [] NOT NULL,
    status TEXT NOT NULL DEFAULT 'resolved',
    name TEXT NOT NULL,
    soft_delete boolean not null default false,
    created_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NOW()
);

CREATE TABLE alert_history (
    id uuid not null default gen_random_uuid() primary key,
    org_id UUID NOT NULL REFERENCES public.organization(id),
    alert_id UUID REFERENCES alert(id) NOT NULL,
    alert_start_time TIMESTAMP WITH TIME ZONE NOT NULL,
    alert_end_time TIMESTAMP WITH TIME ZONE,
    alert_metric TEXT NOT NULL,
    alert_name TEXT NOT NULL,
    triggered_value TEXT NOT NULL,
    status TEXT NOT NULL,
    soft_delete boolean not null default false,
    created_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE NULL DEFAULT NOW()
);</code></pre><blockquote><p>Yes, RLS is enabled.</p></blockquote><h3><strong>Initialization: </strong><code>AlertManager</code> Class</h3><pre><code>export class AlertManager {
  COOLDOWN_PERIOD_MS = 5 * 60 * 1000;
  private utilityKv: Env["UTILITY_KV"];
  private resendApiKey: Env["RESEND_API_KEY"];

  constructor(private alertStore: AlertStore, private env: Env) {
    this.utilityKv = env.UTILITY_KV;
    this.resendApiKey = env.RESEND_API_KEY;
  }
  // ...</code></pre><p>This class is the heart of our alerting logic. It initializes with essential configurations, such as cooldown periods KV, and API keys.</p><h3><strong>The Core Function: </strong><code>checkAlerts</code></h3><ol><li><p>Fetch alerts from Postgres</p></li></ol><pre><code>const { data: alerts, error: alertsErr } = await this.supabaseClient
      .from("alert")
      .select("*")
      .eq("soft_delete", false);</code></pre><ol start="2"><li><p>Retrieve the alert&#8217;s current state from Clickhouse (error count, total count, etc)</p></li></ol><pre><code>SELECT
    COUNT() AS totalCount,
    COUNTIf(status BETWEEN 400 AND 599) AS errorCount
  FROM response_copy_v3
  WHERE 
    organization_id = {val_0: UUID} AND
    request_created_at &gt;= toDateTime64(now(), 3) - INTERVAL {val_1: Int64} MILLISECOND</code></pre><p>This query calculates the total count of events and counts the number of error events (status between 400 and 599) for a specific organization within a given time window.</p><h3><strong>Alert States</strong></h3><p>The <code>AlertState</code> object obtained from the Clickhouse query is pivotal for our alerting logic. It looks like this:</p><pre><code>type AlertState = {
  totalCount: number;
  errorCount: number;
};</code></pre><h3><strong>Check For Alert State Updates</strong></h3><p>For each AlertState, we need to calculate if there is an update.</p><pre><code>const rate = alertState.totalCount &gt; 0 ? (alertState.errorCount / alertState.totalCount) * 100 : 0;</code></pre><p>Based on the rate and the alert state, the system marks alerts as 'triggered', 'resolved', or 'unchanged'. Here is the logic:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oxMf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oxMf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 424w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 848w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 1272w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oxMf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png" width="1230" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1230,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127602,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oxMf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 424w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 848w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 1272w, https://substackcdn.com/image/fetch/$s_!oxMf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e88c5b-eded-4341-972a-bcbc820eee92_1230x638.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Check For Alert State Updates Code:</p><pre><code>// Function to determine the update needed for an alert's state
async getAlertStateUpdate(alert, alertState, timestamp) {
  // Calculate the error rate
  const rate = alertState.totalCount &gt; 0 ? (alertState.errorCount / alertState.totalCount) * 100 : 0;

  // Check if the error rate is below the threshold
  if (rate &lt; alert.threshold) {
    // Handle scenario when the error rate is below the threshold
    return this.handleRateBelowThreshold(alert, timestamp);
  } else {
    // Handle scenario when the error rate is above or equal to the threshold
    return this.handleRateAboveThreshold(alert, rate, timestamp);
  }
}

// Handle alerts when the error rate is below the threshold
async handleRateBelowThreshold(alert, timestamp) {
  // If alert is already resolved, no change is needed
  if (alert.status === "resolved") {
    return { status: "unchanged", timestamp, alert };
  }

  // Get the start time of the cooldown period
  const cooldownStart = await this.getCooldownStart(alert.id);

  // If cooldown hasn't started, begin the cooldown period
  if (!cooldownStart) {
    await this.setCooldownStart(alert.id, timestamp);
    return { status: "unchanged", timestamp, alert };
  }

  // If cooldown has elapsed, mark the alert as resolved
  if (timestamp - cooldownStart &gt;= this.COOLDOWN_PERIOD_MS) {
    await this.deleteCooldown(alert.id);
    return { status: "resolved", timestamp, alert };
  }

  // If cooldown is still active, no change is needed
  return { status: "unchanged", timestamp, alert };
}

// Handle alerts when the error rate is above or equal to the threshold
async handleRateAboveThreshold(alert, rate, timestamp) {
  // If alert was previously resolved, trigger a new alert
  if (alert.status === "resolved") {
    await this.deleteCooldown(alert.id);
    return { status: "triggered", timestamp, triggeredThreshold: rate, alert };
  }

  // If alert is already active, no change is needed
  return { status: "unchanged", timestamp, alert };
}
</code></pre><h3><strong>Handling Alert State Updates </strong></h3><h4>If an alert is triggered</h4><ol><li><p>Update the alert records to be triggered</p></li></ol><pre><code>const { error: alertUpdateErr } = await this.supabaseClient
      .from("alert")
      .update({
        status: status,
        updated_at: new Date().toISOString(),
      })
      .in("id", alertIds);</code></pre><ol start="2"><li><p>Insert alert history records</p></li></ol><pre><code> const { error: alertHistoryInsErr } = await this.supabaseClient
      .from("alert_history")
      .insert(alertHistories);</code></pre><h4>If an alert is resolved</h4><ol><li><p>Update the alert records to be resolved</p></li></ol><pre><code>const { error: alertUpdateErr } = await this.supabaseClient
      .from("alert")
      .update({
        status: status,
        updated_at: new Date().toISOString(),
      })
      .in("id", alertIds);</code></pre><ol start="2"><li><p>Update the alert history records, changing the status to resolved and adding the alert_end_time</p></li></ol><pre><code>const { error: alertHistoryUpdateErr } = await this.supabaseClient
      .from("alert_history")
      .update({
        status: status,
        alert_end_time: alertEndTime,
        updated_at: new Date().toISOString(),
      })
      .in("alert_id", alertIds)
      .eq("status", "triggered");</code></pre><h3>Send Emails</h3><p>Send alert update emails to all users subscribed to the alert. For this, we use <a href="https://resend.com">Resend</a>.</p><p><a href="https://github.com/Helicone/helicone">The code is available here&#8230;</a></p><h2>Conclusion</h2><p>That&#8217;s it! Simple implementation and surprisingly scalable. These Clickhouse aggregation queries are incredibly quick. Consistently &lt;0.05s to execute the query over the past 5/10 minutes. Running all alert checks asynchronously should not be an issue for a while.</p><h2>What would I have done differently?</h2><p>My first attempt at this was over-engineered. I went for push-based real-time alerts using Cloudflare Durable Objects. After realizing the extra complexity was unnecessary and would beget more complexity, I scrapped it and rewrote it in a day using Clickhouse. It was a painful lesson, but useful as I will now approach future projects with a different mindset. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dmJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dmJ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 424w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 848w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 1272w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dmJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png" width="1172" height="294" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:294,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78561,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dmJ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 424w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 848w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 1272w, https://substackcdn.com/image/fetch/$s_!dmJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18cd70c2-beca-4c04-a5ce-8b9665a93578_1172x294.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/gdb/status/1736514635191250952?s=20">link&#8230;</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.helicone.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading this post by Helicone! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[We support every LLM, here's how we did it]]></title><description><![CDATA[Rosetta: Helicone's Solution to Universal LLM Support]]></description><link>https://blog.helicone.ai/p/every-llm-one-platform-introducing</link><guid isPermaLink="false">https://blog.helicone.ai/p/every-llm-one-platform-introducing</guid><dc:creator><![CDATA[Cole Gottdank]]></dc:creator><pubDate>Thu, 30 Nov 2023 23:42:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fY5L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p>&#8220;The diverse architectures and protocols of today's LLMs present unprecedented integration challenges, setting the stage for innovative solutions in AI observability.&#8221; - Nietzsche</p></div><h3>The Problem: Fragmented LLM Ecosystem</h3><p>In the AI industry, the explosion of large language models (LLMs) has led to a fragmented ecosystem. Different LLMs operate on distinct schemas and protocols, posing integration challenges for businesses seeking a unified AI observability solution. This fragmentation hinders seamless monitoring, analytics, and scalability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fY5L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fY5L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fY5L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:758346,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fY5L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!fY5L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F144afe92-5688-46b4-a3d6-e94744645648_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Introducing Rosetta: Helicone's Solution</h3><p>Helicone&#8217;s response to this challenge is Rosetta - an LLM-powered mapper generator. These mappers translate the diverse outputs and functionalities of various LLMs into a consistent schema that integrates seamlessly with Helicone's platform.</p><h4>Core Components</h4><p>Constructing this solution requires five key components:</p><ul><li><p><strong>Unified and Executable Mapper Format</strong></p></li><li><p><strong>Mapper Identification</strong></p></li><li><p><strong>Intelligent Mapper Versioning</strong></p></li><li><p><strong>Scalability &amp; Speed</strong></p></li><li><p><strong>Executable Code Security</strong></p></li></ul><h4>Unified and Executable Mapper Format</h4><p>Create a standard, versatile format to translate and execute mappings across diverse LLM data structures.</p><ol><li><p><strong>Sandbox Environment</strong>: Offers high security and isolation but is complex to implement.</p></li><li><p><strong>JFilters</strong>: Simplifies processing but may struggle with complex JSON structures.</p></li><li><p><strong>Pure JavaScript with Eval</strong>: Provides flexibility and adaptability; chosen for its ability to handle diverse data formats despite potential security concerns, mitigated by a strict approval process.</p></li></ol><h4>Mapper Identification</h4><p>For identifying the appropriate mapper, we considered two main approaches:</p><ol><li><p><strong>Key-Based Identification</strong>: This straightforward method involves assigning unique keys, such as '/chat/completions', to each mapper. </p></li><li><p><strong>Similarity Comparisons on JSON Bodies</strong>: A more advanced method that involves analyzing the JSON bodies for similarities to determine the appropriate mapper.</p></li></ol><p>Ultimately, the decision to use key-based identification was driven by the need for a <strong>simple</strong>, efficient, and reliable system that can be easily managed and scaled as we grow.</p><h4>Intelligent Versioning</h4><p>Implement a robust versioning system to manage updates in mappers, accommodating new fields in either the output or input schema.</p><p><strong>Key Extraction</strong>: Starts with extracting keys and JSON structure from the input.</p><p><strong>Key Analysis</strong>: Identifies unmapped or 'ignored' keys (present in input but not in output schema).</p><p><strong>Mapper Update</strong>: Updates existing mapper when new keys are detected, adding or ignoring them as needed.</p><p><strong>Schema Monitoring</strong>: Continuously checks for changes in output schema through hash comparisons, triggering new mapper versions as required.</p><h4>Scalability &amp; Speed</h4><p>With Helicone mapping the LLM outputs on read due to the rapidly evolving LLM schemas, both scalability and speed are crucial.</p><p>Design the architecture to be scalable, and capable of handling varying loads and complexities efficiently. To support scalability, it&#8217;s extremely important to not have to call an API to map, but instead to have the mapper in code or executed in code and retrieved from a cache system.</p><h4>Executable Code Security</h4><p>In Rosetta, each new mapper faces an approval process, crucial for two reasons. First, it addresses the inherent security risks associated with using <code>eval</code> for executing mappers. Second, it verifies the mapper's functionality, ensuring it operates as intended. If a mapper fails or encounters issues, our system automatically reverts to a previous, stable version, providing a reliable fallback mechanism. </p><h4>Rosetta Mapper Lifecycle</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v40y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v40y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 424w, https://substackcdn.com/image/fetch/$s_!v40y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 848w, https://substackcdn.com/image/fetch/$s_!v40y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 1272w, https://substackcdn.com/image/fetch/$s_!v40y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v40y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png" width="1456" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11199b6b-b580-408b-8b86-f115267672de_1730x1035.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93377,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v40y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 424w, https://substackcdn.com/image/fetch/$s_!v40y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 848w, https://substackcdn.com/image/fetch/$s_!v40y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 1272w, https://substackcdn.com/image/fetch/$s_!v40y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11199b6b-b580-408b-8b86-f115267672de_1730x1035.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Conclusion</strong></h4><p>Rosetta is Helicone's answer to the fast-changing world of large language models - a smart, secure bridge across the fragmented LLM landscape. So, what do you think - could Rosetta, as a standalone product, be the missing piece in your AI strategy? We'd love to hear if you're as excited about its potential as we are.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.helicone.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A letter to YC Hopefuls]]></title><description><![CDATA[A debrief on everything we've learned throughout our founder journey and answers to common questions that YC hopefuls ask us all the time - without the help of ChatGPT.]]></description><link>https://blog.helicone.ai/p/a-letter-to-yc-hopefuls</link><guid isPermaLink="false">https://blog.helicone.ai/p/a-letter-to-yc-hopefuls</guid><dc:creator><![CDATA[Scott Nguyen]]></dc:creator><pubDate>Tue, 10 Oct 2023 07:19:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FPWT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FPWT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 424w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 848w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 1272w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FPWT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png" width="1456" height="792" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:792,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:412660,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FPWT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 424w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 848w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 1272w, https://substackcdn.com/image/fetch/$s_!FPWT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F696d3a41-59ef-4dc9-b4b1-1fb9e37e1bf7_1920x1045.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>Introduction</h3><p>The purpose of this article is to share some of the experiences and learnings that my cofounder, Justin Torre, and I have accumulated throughout our journey together working on Helicone.ai. Building any business is difficult, never mind a venture-backed startup with lofty expectations often placed on young individuals, and comes with inevitable challenges and bumps in the road. There will be days where you question your strategies, your product (very normal) and your yourself (even more normal). But at the end of the day, if you can answer the three questions below succinctly and clearly, then I genuinely believe that you&#8217;re well on your way. </p><ul><li><p><strong>Do you care about the problem you&#8217;re solving?</strong></p></li><li><p><strong>Do you care about the team you&#8217;re building with?</strong></p></li><li><p><strong>Do you know your non-negotiables in life?</strong></p></li></ul><p>These questions align with your MISSION, VISION, VALUES and act as a compass whenever you are making critical decisions throughout your founder journey. Lets jump into it.</p><p></p><h3>Do you actually care about the problem you&#8217;re solving? </h3><p>Save the Total Adjustable Market (TAM) stuff for your investors and your future TechCrunch Disrupt presentation. It&#8217;s very easy to <em>say</em> you care about the problem or to say you <em>know people</em> who have this problem, but those aren&#8217;t answering the question - do you care about this problem? Have you personally experienced the pain-points? Do you have an emotional connection to the problem that goes deeper such as a female-founder deciding to change a part of the women&#8217;s health industry due to being let down in the past? Although founder-market fit isn&#8217;t the end all be all, its incredibly important and critical to be able to tell the story about why you&#8217;re working on the problem at hand to customers, investors, and other founders. </p><p>At Helicone, we sought out to build the best observability platform for Large-Language Models with the easiest integration on the market. We are a team of all developers creating a developer-tool that started out as a tool for ourselves. With the rise of LLM&#8217;s in web applications, we built out projects such as Valyr Chat, CourseGen, AIRapBattles, etc. and we needed a monitoring and logging tool for ourselves to debug, identify key cost areas, and segment requests. Our earliest customers were ourselves and close friends also building in the LLM-space, so the depth of caring for the problem we were addressing - there not being an easy, out-of-the-box monitoring tool - was extremely clear and strong for us. <br></p><h3><br><strong>Do you care about the team you&#8217;re building with?</strong></h3><p>One of the most common pieces of advice from Y Combinator was that founder relationships mattered a lot more than you think. And to absolutely no one&#8217;s surprise, founders (including ourselves) ignore this as we believe that over time a person&#8217;s merit and ability will trump all problems. Yes, it is good to index heavily on someone&#8217;s skill and ability regarding product, sales, or engineering. But during the early-stages of your company, you will quite literally be spending more than half of your day with your team. I&#8217;m not trying to discourage anyone from doing &#8220;Founder Dating&#8221; or YC&#8217;s own &#8220;Co-Founder matching&#8221;, but there needs to be a deeper connection besides &#8220;they are qualified to help me build my product&#8221;. Do they share similar values to you? Do they share a similar mission? And most importantly, do you enjoy working with them? </p><p>I met my co-founder, Justin, at Northeastern University where he was a Computer Science major and I had a Computer Science minor. We were partners in a class together junior year and we became best friends during and after the class. A builder at heart, Justin was a major driver for my own development in software engineering and over time we would hack on projects that eventually led us to getting into YC. I&#8217;m by no means saying that you have to be best friends with your co-founder, but there <em>has</em> to be a strong semblance of trust within your relationship with your co-founders. As YC always says, the most common reason why startups die is because of co-founder disputes and founders giving up. </p><p></p><h3><strong>Do you know your non-negotiables in life?</strong></h3><p>As hard as it is to get into Y Combinator (&lt;1% acceptance rate for the W23 batch), it is even harder to build a successful, long-standing company. There are inevitably going to be days where you doubt and question every decision you and your team make and there are going to be even more days where you are slugging through hours upon hours of engineering work to get a feature out to a customer yesterday. To avoid founder burnout and to avoid resenting the path you&#8217;ve chosen, its extremely important to know what your non-negotiables in life are. These will help you stay sane as well as guide you through difficult decisions as a company. </p><p>Theres two sides to this question, one being what are things that you will make time for no matter what. Personally, I dedicate time in my week to playing and watching sports because it is a big part of who I am. Others in the Helicone team spend time building side-projects, going out to eat often, or exercising. Whatever it is that brings you genuine joy, you need to make time for it and nurture that part of who you are. </p><p>The other side of this question revolves around what you stand for as a company. For example, within the dev-tools space, there is quite a large variance in how much founders actually care about individual developers and hackers. Is your plan to go up market as soon as possible to secure sizable enterprise contracts? Or does being open-source and working closely with indie-hackers and builders sound enticing to you? These things aren&#8217;t mutually exclusive, but it&#8217;s important to know what your company and team are building towards and what are the things that you refuse to budge on. </p><p></p><h3>Conclusion</h3><p>We get asked question about Y Combinator all the time that are often something along the lines of: </p><ul><li><p>how do I get in?</p></li><li><p>what should we say to the group partners during our interview?</p></li><li><p>do you think this idea is good? </p></li><li><p>is YC worth it? <br></p></li></ul><p>Although its annoying, the answers to these questions are often not as clear as a one-word answer. I always end up asking the 3 questions I outlined above in response to better understand if the founder that I&#8217;m talking to has their heart and mind in the right place. There is an endless supply of ideas and a large supply of engineers/designers/sales people to work on those ideas. At the end of the day, it comes down to execution which involves having the right people to build, the right relationships to get buy-in, the right solution to a problem, and the right convictions to be able to be unwavering when confronted with a problem. Easier said than done, but if you can answer the 3 questions above clearly, you&#8217;ll be in a much better place than many other early-stage founders. </p><p>If you would like to talk about YC, Helicone, AI, or anything related to the startup space, please don&#8217;t hesitate to reach out to me at scott@helicone.ai. I&#8217;d love to help in any way that I can and I hope this letter helps you in your early founder journey! </p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item></channel></rss>