<?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"><channel><title><![CDATA[JigsawStack | Blog - Learn about the APIs you need to ship 10x faster]]></title><description><![CDATA[JigsawStack provides all the APIs you need in one ecosystem, with high reliability, simple pricing and blazing fast APIs built to be DX friendly from the ground up]]></description><link>https://blogdata.jigsawstack.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1705989547965/K1CO57Cls.png</url><title>JigsawStack | Blog - Learn about the APIs you need to ship 10x faster</title><link>https://blogdata.jigsawstack.com</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 13:06:54 GMT</lastBuildDate><atom:link href="https://blogdata.jigsawstack.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Interfaze <> JigsawStack: Branding change & Improvements]]></title><description><![CDATA[Four months ago, we launched Interfaze. It's a new model architecture that outperforms both closed and open-source models on deterministic tasks like OCR, data extraction, web scraping, and classifica]]></description><link>https://blogdata.jigsawstack.com/interfaze-jigsawstack-branding-change-improvements</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/interfaze-jigsawstack-branding-change-improvements</guid><dc:creator><![CDATA[Yoeven D Khemlani]]></dc:creator><pubDate>Thu, 26 Mar 2026 22:25:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/60a9f87b5379f65d10b608a1/316db560-90d9-4cc1-915c-418f4f43c0b3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Four months ago, we launched Interfaze. It's a new model architecture that outperforms both closed and open-source models on deterministic tasks like OCR, data extraction, web scraping, and classification. These are tasks where developers expect high accuracy, structured output, and reliable automated backend processing.</p>
<p>We initially tackled this by training SLMs for specialized use cases. This approach gave birth to JigsawStack: one model for per hyper-focused task, bundled with the necessary infrastructure.</p>
<p><strong>JigsawStack Feedback</strong></p>
<p>Speaking with customers, we identified three main challenges with JigsawStack:</p>
<ul>
<li><p><strong>Flexibility:</strong> Developers expect fully flexible, unstructured inputs via prompts, alongside structured, developer-defined outputs. Currently, multi-step processes require manual setup. For example, extracting and translating text requires two separate API calls and models.</p>
</li>
<li><p><strong>Integrability:</strong> Because JigsawStack uses custom API schemas, integrating and maintaining it with existing AI SDKs (like LangChain) is difficult.</p>
</li>
<li><p><strong>Research and Cost:</strong> Each model requires its own training pipeline, infrastructure, and research efforts.</p>
</li>
</ul>
<p>We spent over 8 months researching and building Interfaze to solve these exact problems. You can read our paper here: <a href="https://arxiv.org/abs/2602.04101">https://arxiv.org/abs/2602.04101</a></p>
<p><strong>The solution: Interfaze</strong></p>
<p>Interfaze outperforms JigsawStack and generalized LLMs in deterministic developer across all modalities: text, vision, audio, and multilingual tasks. Check out our landing page for benchmarks. Beyond better results, Interfaze offers:</p>
<ul>
<li><p><strong>Flexibility:</strong> We support the OpenAI schema out of the box. You can prompt it like any LLM, but you get higher-quality output and additional structured metadata standard LLMs can't provide. Also works with any AI SDK like LangChain.</p>
</li>
<li><p><strong>Multi-turn calls in one request:</strong> You can now extract and translate a document in a single prompt while defining your desired output structure.</p>
</li>
<li><p><strong>More metadata:</strong> Additional metadata produced for tasks like OCR, scraping and more. Check out pre-context to learn more.</p>
</li>
<li><p><strong>Shared Architecture:</strong> Research improvements are shared across tasks. For example, enhancing language support for diarization in STT also improves OCR.</p>
</li>
<li><p><strong>Backward Compatibility:</strong> You can get the exact same outputs as JigsawStack directly within Interfaze using Run task.</p>
</li>
</ul>
<p><strong>JigsawStack &amp; Interfaze Updates</strong></p>
<p>JigsawStack isn't going anywhere. Much of the Interfaze infrastructure is built on top of it. For those needing smaller models running on-premise on a single H100, JigsawStack will continue to power them with constant upgrades and fixes.</p>
<p>However, since most self-serve users are now on Interfaze, we are shifting our branding focus to Interfaze across all socials and emails. Our official company entity will remain JigsawStack.</p>
<p>This transition will happen progressively over the next few days with zero downtime or effects on your systems and APIs.</p>
<p><strong>Upcoming Changes:</strong></p>
<ul>
<li><p>Branding updates from JigsawStack to Interfaze.</p>
</li>
<li><p>Marketing content will be around Interfaze.</p>
</li>
<li><p>Interfaze support added to open-source applications like our Translation widget and Google Sheets integration.</p>
</li>
</ul>
<p>Our support team, SOC2 compliance, agreements, and licenses remain unchanged across both Interfaze and JigsawStack.</p>
<p>If you have any questions or want to migrate to Interfaze, Feel free to reach out to <a href="https://jigsawstack.com/help">https://jigsawstack.com/help</a> :)</p>
]]></content:encoded></item><item><title><![CDATA[Testing Translation Models Beyond Accuracy Scores]]></title><description><![CDATA[One might argue that translation is a problem that has long been solved with the advent of sequence-to-sequence models. That assumption, however, is far from the truth. While significant progress has been made, particularly in handling complex and no...]]></description><link>https://blogdata.jigsawstack.com/testing-translation-models-beyond-accuracy-scores</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/testing-translation-models-beyond-accuracy-scores</guid><category><![CDATA[translation]]></category><category><![CDATA[small language model]]></category><dc:creator><![CDATA[Vineet Agarwal]]></dc:creator><pubDate>Wed, 04 Feb 2026 04:25:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1770177156636/8ccd2ba5-1a63-4aaf-975d-81919fe1daf5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One might argue that translation is a problem that has long been solved with the advent of sequence-to-sequence models. That assumption, however, is far from the truth. While significant progress has been made, particularly in handling complex and non-Latin languages, many translation systems still break in production when applied to real-world, cross-lingual use cases on the web. These failures surface not only in specialised scenarios but also in routine tasks, such as general text translation and full web page localisation.</p>
<p>In this context, we aim to evaluate where our service stands today, in light of recent research-driven advances, new model releases, and our own internal improvements to <strong>JigsawStack Translation</strong>.</p>
<h2 id="heading-what-makes-a-great-translation-solution">What Makes a Great Translation Solution?</h2>
<p>Translation models should maintain consistency in grammar, word order, and syntax across languages while preserving meaning, intent, and contextual relationships without introducing omissions, distortions, or unintended reinterpretations. We tested <a target="_blank" href="https://chatgpt.com/translate/">ChatGPT Translate</a>, <a target="_blank" href="https://huggingface.co/google/translategemma-27b-it">Translate Gemma 27b</a>, <a target="_blank" href="https://docs.cloud.google.com/translate/docs/reference/rest/v3beta1/projects/translateText">Google Translation API</a> &amp; <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/translate/translate">JigsawStack</a> using these five categories to evaluate where models break.</p>
<ol>
<li><p><strong>Long-Form Legal Sentences</strong><br /> Testing preservation of sentence boundaries, clause hierarchy, tense flow, and referential integrity.</p>
</li>
<li><p><strong>Grammar &amp; Ambiguity</strong><br /> Evaluating how models resolve structurally or semantically ambiguous constructions without hallucinating clarity or altering intent.</p>
</li>
<li><p><strong>Numbers, Dates, Identifiers &amp; Entities</strong><br /> Verifying exact retention of numeric values, temporal references, legal identifiers, and named entities without normalisation, reformatting, or substitution.</p>
</li>
<li><p><strong>RTL and LTR Language Pairs</strong><br /> Assessing stability when translating between right-to-left and left-to-right scripts, including punctuation direction, token ordering, and structural alignment.</p>
</li>
<li><p><strong>Slang &amp; Informal Language</strong><br /> Measuring how models handle colloquial expressions, idioms, and non-standard grammar without sanitising tone or over-formalising the output.</p>
</li>
</ol>
<h2 id="heading-sneak-peek-if-you-cant-wait"><strong>Sneak peek if you can’t wait 👇</strong></h2>
<p>◐ = partial | ❌ = inaccurate/fails | ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Category</td><td>JigsawStack</td><td>Google Translate</td><td>Gemma</td><td>ChatGPT</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Long Form Legal Sentences</strong></td><td>✅ Preserves legal, document identifiers, and nouns well while maintaining the structure and relation</td><td>❌ Mistranslates when document identifiers or abbreviations are involved (e.g., "Dkt. 298" as "Doctor number 298")</td><td>❌ Results in incorrect translation (i.e., "Dkt." incorrectly; mistranslated "tort" as "compensation" (क्षतिपूर्ति))</td><td>✅ Preserves legal, document identifiers and nouns well while maintaining the structure and relation</td></tr>
<tr>
<td><strong>Grammar &amp; Ambiguity</strong></td><td>✅ Preserves nested relative clause structure with जिसे...जिसे chain</td><td>❌ Flattenes structure into adjective phrase; changed past tense to present</td><td>◐ Simplifies structure; added extra content that is not in the source</td><td>✅ Preserves nested relative clause structure with जिसे...जिसे chain</td></tr>
<tr>
<td><strong>Numbers, Dates, Identifiers</strong></td><td>✅ Preserves all numbers, currencies (€, $), dates, build ID, brand names</td><td>◐ Translates brands names to Hindi (एप्पल, आईफोन, सैमसंग)</td><td>❌ Transliterates brands + replaced currency symbols with words (यूरो, डॉलर)</td><td>✅ Preserves Nouns, Currency signs, and numbers well</td></tr>
<tr>
<td><strong>RTL/LTR Languages</strong></td><td>✅ Preserves of identifiers; minor: "10:00" instead of "10"</td><td>◐ Write the time in words</td><td>❌ Hallucinates (i.e., "final version" instead of “file version )</td><td>◐ Can translate proper nouns (i.e., apple → آبل)</td></tr>
<tr>
<td><strong>Slangs</strong></td><td>✅ Preserves slang well without getting too informal</td><td>❌ Misses out on words due to overformalizing the sentence</td><td>❌ Hallicunates majorly</td><td>✅ Preserves slang well without getting too informal</td></tr>
<tr>
<td><strong>Developer Friendly</strong></td><td>✅ Has an easy-to-use API</td><td>✅ Has an easy-to-use API</td><td>❌ Have to self-host</td><td>❌ No API Service available</td></tr>
<tr>
<td><strong>Pricing</strong></td><td>~$0.00003 incurred here</td><td>~$0.00004 incurred here</td><td>$0.20 ( 33,101ms ÷ 3,600,000ms/hour × $21.48/hour )</td><td>❌ No API Service available</td></tr>
<tr>
<td><strong>Rate Limits</strong></td><td>50 requests per second</td><td>30,000 characters per second</td><td>✅ Configurable as required</td><td>❌ No API Service available</td></tr>
<tr>
<td>Speed</td><td>Average latency is 4-5s</td><td>Average latency is 450ms</td><td>Average latency is 6-7s</td><td>Average latency is 8-10s</td></tr>
</tbody>
</table>
</div><hr />
<p><strong>Key Findings:</strong></p>
<ul>
<li><p><strong>JigsawStack</strong> was solid, performed best overall with an easy-to-use API and a generous free tier rate limit, and it stands as the best among all tested.</p>
</li>
<li><p><strong>ChatGPT</strong> <strong>Translate</strong> performed well overall, particularly in preserving structure and identifiers. However, we observed a small number of edge cases where the system shifts into an explanation mode rather than producing a direct translation.</p>
</li>
<li><p><strong>Google</strong> <strong>Translate API</strong> over-simplified grammar and transliterated brand names unnecessarily</p>
</li>
<li><p><strong>Translate Gemma</strong> <strong>27b</strong> exhibited the highest error rate among the evaluated models, including hallucinations such as introducing unrelated context (e.g., music references or “final version” labels). When direct slang or sensitive terms were present in the input, the model frequently refused to generate a translation altogether.</p>
</li>
</ul>
<h2 id="heading-results">Results</h2>
<h3 id="heading-category-1-long-form-legal-sentences"><strong>Category 1: Long-Form Legal Sentences</strong></h3>
<p>To evaluate this category, we take the following English source text and analyse its translation into Hindi, a language written in a non-Latin script.</p>
<p><strong>Input Text -</strong></p>
<blockquote>
<p>This Court already required Musk to elect between his unjust enrichment and breach of contract claims. Dkt. 298. OpenAI now demands that Musk elect between his unjust enrichment and tort claims, too. That demand is baseless. The unjust enrichment and tort claims have different elements, and Musk may present both theories to the jury at trial. Where different claims have different elements, the plaintiff may present both claims to the jury, and the jury can then decide which claim or claims are supported by the evidence. A court may not force upon the plaintiff an election between causes of action that the plaintiff has a right to plead. The system operates in three phases. First, data is collected from distributed nodes. Second, the data is validated and normalized. Finally, the processed data is indexed and stored. Failure in the second phase prevents progression to the third. The policy applies to all users who access the platform after January 1st. Users who continue using the service implicitly agree to the updated terms. Any violation may result in suspension or termination of access.</p>
</blockquote>
<p><strong>Expected Text -</strong></p>
<blockquote>
<p>इस न्यायालय ने पहले ही मस्क को अपने अनुचित समृद्धि और अनुबंध के उल्लंघन के दावों के बीच चयन करने का निर्देश दिया था। Dkt. 298. अब OpenAI यह मांग कर रहा है कि मस्क अपने अनुचित समृद्धि और अपकृत्य दावों के बीच भी चयन करे। यह मांग निराधार है। अनुचित समृद्धि और अपकृत्य दावों के तत्व अलग-अलग हैं, और मस्क मुकदमे में जूरी के समक्ष दोनों सिद्धांत प्रस्तुत कर सकता है। जहाँ विभिन्न दावों के तत्व भिन्न होते हैं, वहाँ वादी दोनों दावे जूरी के समक्ष रख सकता है, और जूरी यह तय कर सकती है कि कौन-सा दावा या दावे साक्ष्यों द्वारा समर्थित हैं। न्यायालय वादी पर उन कारणों के बीच चयन थोप नहीं सकता जिन्हें प्रस्तुत करने का अधिकार वादी को प्राप्त है।प्रणाली तीन चरणों में संचालित होती है। प्रथम, डेटा को वितरित नोड्स से एकत्र किया जाता है। द्वितीय, डेटा का सत्यापन और सामान्यीकरण किया जाता है। अंततः, संसाधित डेटा को अनुक्रमित कर संग्रहित किया जाता है। द्वितीय चरण में विफलता होने पर तृतीय चरण में प्रगति संभव नहीं होती।\n\nयह नीति 1 जनवरी के बाद मंच का उपयोग करने वाले सभी उपयोगकर्ताओं पर लागू होती है। जो उपयोगकर्ता सेवा का उपयोग जारी रखते हैं, वे अद्यतन शर्तों से निहित रूप से सहमत माने जाते हैं। किसी भी उल्लंघन के परिणामस्वरूप पहुँच का निलंबन या समाप्ति हो सकती है।</p>
</blockquote>
<p><strong>Response - ChatGPT Translate</strong></p>
<blockquote>
<p>यह न्यायालय पहले ही मस्क को उनके अनुचित लाभ और अनुबंध के उल्लंघन के दावों में से एक चुनने की आवश्यकता बता चुका है। Dkt. 298. अब OpenAI मांग कर रहा है कि मस्क अपने अनुचित लाभ और टॉर्ट दावों में से भी चुनाव करें। यह मांग निराधार है। अनुचित लाभ और टॉर्ट दावों के तत्व अलग-अलग हैं, और मस्क मुकदमे के दौरान जूरी के समक्ष दोनों सिद्धांत प्रस्तुत कर सकते हैं। जहाँ अलग-अलग दावों के तत्व अलग होते हैं, वहाँ वादी दोनों दावे जूरी के सामने रख सकता है, और जूरी तब यह तय कर सकती है कि कौन-सा दावा या दावे साक्ष्यों द्वारा समर्थित हैं। कोई न्यायालय वादी पर ऐसे कारण-ए-दावा के बीच चुनाव थोप नहीं सकता जिन्हें प्रस्तुत करने का अधिकार वादी को है। प्रणाली तीन चरणों में कार्य करती है। पहले, वितरित नोड्स से डेटा एकत्र किया जाता है। दूसरे, डेटा का सत्यापन और सामान्यीकरण किया जाता है। अंत में, संसाधित डेटा को अनुक्रमित कर संग्रहीत किया जाता है। दूसरे चरण में विफलता तीसरे चरण में प्रगति को रोक देती है। यह नीति 1 जनवरी के बाद प्लेटफ़ॉर्म तक पहुँचने वाले सभी उपयोगकर्ताओं पर लागू होती है। जो उपयोगकर्ता सेवा का उपयोग जारी रखते हैं, वे अप्रत्यक्ष रूप से अद्यतन शर्तों से सहमत होते हैं। किसी भी उल्लंघन के परिणामस्वरूप पहुँच का निलंबन या समाप्ति हो सकती है।</p>
</blockquote>
<p><strong>Response - Translate Gemma 27b</strong></p>
<blockquote>
<p>यह न्यायालय पहले ही मस्क को उनके अनुचित लाभ और अनुबंध उल्लंघन के दावों में से किसी एक को चुनने का आदेश दे चुका है। <mark>दस्तावेज़ संख्या 298</mark>। अब ओपनएआई मांग कर रहा है कि मस्क अपने अनुचित लाभ और <mark>क्षतिपूर्ति</mark> के दावों में से किसी एक को चुनें। यह मांग निराधार है। अनुचित लाभ और <mark>क्षतिपूर्ति</mark> के दावों में अलग-अलग तत्व होते हैं, और मस्क दोनों सिद्धांतों को मुकदमे के दौरान जूरी के सामने पेश कर सकते हैं। जब अलग-अलग दावों में अलग-अलग तत्व होते हैं, तो वादी दोनों दावों को जूरी के सामने पेश कर सकता है, और फिर जूरी यह तय कर सकती है कि कौन सा दावा या दावे सबूतों द्वारा समर्थित हैं। कोई न्यायालय वादी पर उन कारणों में से किसी एक को चुनने के लिए दबाव नहीं डाल सकता, जिनका दावा करने का वादी को अधिकार है। यह प्रणाली तीन चरणों में काम करती है। सबसे पहले, वितरित नोड्स से डेटा एकत्र किया जाता है। दूसरे, डेटा को मान्य और सामान्यीकृत किया जाता है। अंत में, संसाधित डेटा को अनुक्रमित और संग्रहीत किया जाता है। दूसरे चरण में विफलता तीसरे चरण में प्रगति को रोकती है। यह नीति उन सभी उपयोगकर्ताओं पर लागू होती है जो 1 जनवरी के बाद प्लेटफ़ॉर्म का उपयोग करते हैं। जो उपयोगकर्ता सेवा का उपयोग जारी रखते हैं, वे निहित रूप से अद्यतन शर्तों से सहमत होते हैं। किसी भी उल्लंघन के परिणामस्वरूप पहुंच निलंबित या समाप्त की जा सकती है।</p>
</blockquote>
<p><strong>Notes</strong> - Translated "Dkt. 298" to "दस्तावेज़ संख्या 298" (document number) - should be preserved as-is. Mistranslated "tort" as "क्षतिपूर्ति" (compensation), which is incorrect.</p>
<p><strong>Response - Google Translation API</strong></p>
<blockquote>
<p>इस न्यायालय ने पहले ही मस्क को उनके अनुचित लाभ और अनुबंध उल्लंघन के दावों में से किसी एक को चुनने का निर्देश दिया था। <mark>(डॉक्टर संख्या 298</mark>)। अब ओपनएआई मस्क से उनके अनुचित लाभ और अपकृत्य दावों में से किसी एक को चुनने की मांग कर रहा है। यह मांग निराधार है। अनुचित लाभ और अपकृत्य दावों के तत्व अलग-अलग हैं, और मस्क मुकदमे के दौरान जूरी के समक्ष दोनों सिद्धांत प्रस्तुत कर सकते हैं। जहां विभिन्न दावों के तत्व अलग-अलग होते हैं, वहां वादी जूरी के समक्ष दोनों दावे प्रस्तुत कर सकता है, और जूरी तब यह तय कर सकती है कि कौन सा दावा या दावे साक्ष्यों द्वारा समर्थित हैं। कोई न्यायालय वादी को उन वादों में से किसी एक को चुनने के लिए बाध्य नहीं कर सकता जिन्हें उठाने का वादी को अधिकार है। यह प्रणाली तीन चरणों में कार्य करती है। पहला, वितरित नोड्स से डेटा एकत्र किया जाता है। दूसरा, डेटा का सत्यापन और मानकीकरण किया जाता है। अंत में, संसाधित डेटा को अनुक्रमित और संग्रहीत किया जाता है। दूसरे चरण में विफलता तीसरे चरण में प्रगति को रोकती है। यह नीति 1 जनवरी के बाद प्लेटफॉर्म का उपयोग करने वाले सभी उपयोगकर्ताओं पर लागू होती है। सेवा का उपयोग जारी रखने वाले उपयोगकर्ता अप्रत्यक्ष रूप से अद्यतन शर्तों से सहमत होते हैं। किसी भी उल्लंघन के परिणामस्वरूप पहुंच निलंबित या समाप्त की जा सकती है।</p>
</blockquote>
<p><strong>Notes</strong> - Mistranslated "Dkt. 298" to "(डॉक्टर संख्या 298)" - interpreted as "Doctor number" instead of preserving the docket reference. No paragraph breaks.</p>
<p><strong>Response - JigsawStack</strong></p>
<blockquote>
<p>इस न्यायालय ने पहले ही मस्क से उसके अनुचित समृद्धि और अनुबंध का उल्लंघन दावे के बीच चुनाव करने की आवश्यकता रखी थी। Dkt. 298। अब OpenAI भी मस्क से उसके अनुचित समृद्धि और टॉर्ट दावों के बीच चुनाव करने का मांग कर रहा है। यह मांग बेबुनियाद है। अनुचित समृद्धि और टॉर्ट दावों के तत्व भिन्न हैं, और मस्क दोनों सिद्धांतों को परीक्षण में जूरी के समक्ष प्रस्तुत कर सकता है। जहाँ विभिन्न दावों के तत्व भिन्न होते हैं, वहाँ वादी दोनों दावे जूरी के समक्ष प्रस्तुत कर सकता है, और जूरी फिर निर्णय कर सकती है कि कौन सा दावा या कौन से दावे साक्ष्य द्वारा समर्थित हैं। कोई न्यायालय वादी पर उन कारण-ए-कर्मों के बीच चुनाव थोप नहीं सकता जिन्हें वादी दलील करने का अधिकार रखता है। प्रणाली तीन चरणों में काम करती है। पहले, वितरित नोड्स से डेटा एकत्र किया जाता है। दूसरे, डेटा को मान्य और सामान्यीकृत किया जाता है। अन्ततः, संसाधित डेटा का सूचीकरण कर संग्रहीत किया जाता है। दूसरे चरण में विफलता तीसरे चरण में प्रगति को रोक देती है। यह नीति उन सभी उपयोगकर्ताओं पर लागू होती है जो 1 जनवरी के बाद प्लेटफ़ॉर्म का उपयोग करते हैं। जो उपयोगकर्ता सेवा का उपयोग जारी रखते हैं, वे निहित रूप से अद्यतित शर्तों से सहमत होते हैं। किसी भी उल्लंघन पर पहुँच निलंबन या समाप्ति हो सकती है।</p>
</blockquote>
<hr />
<h3 id="heading-category-2-grammar-amp-ambiguity"><strong>Category 2: Grammar &amp; Ambiguity</strong></h3>
<p>To evaluate this category, we take the following English source text and analyse its translation into Hindi, a language written in a non-Latin script.</p>
<p><strong>Input Text -</strong></p>
<blockquote>
<p>The stack of documents that the intern who the manager mentored prepared is on the conference table, ready for the executive to review with the consultant who disagreed.</p>
</blockquote>
<p><strong>Expected Text -</strong></p>
<blockquote>
<p>दस्तावेज़ों का वह ढेर, जिसे उस इंटर्न ने तैयार किया जिसे प्रबंधक ने मार्गदर्शन दिया था, कॉन्फ्रेंस टेबल पर रखा है, कार्यकारी द्वारा उस सलाहकार के साथ समीक्षा के लिए तैयार जिसने असहमति जताई थी।</p>
</blockquote>
<p><strong>Response - ChatGPT Translate</strong></p>
<blockquote>
<p>दस्तावेज़ों का वह ढेर, जिसे उस इंटर्न ने तैयार किया जिसे प्रबंधक ने मार्गदर्शन दिया था, सम्मेलन कक्ष की मेज़ पर है, कार्यकारी द्वारा उस सलाहकार के साथ समीक्षा के लिए तैयार है जिसने असहमति जताई थी।</p>
</blockquote>
<p><strong>Response - Translate Gemma 27b</strong></p>
<blockquote>
<p>प्रबंधक द्वारा मार्गदर्शन किए गए इंटर्न द्वारा तैयार किए गए दस्तावेजों का ढेर सम्मेलन कक्ष की मेज पर रखा है, और यह उस सलाहकार के साथ समीक्षा के लिए तैयार है, जिसने इस पर असहमति जताई थी।</p>
</blockquote>
<p><strong>Response - Google Translation API</strong></p>
<blockquote>
<p><mark>प्रबंधक के मार्गदर्शन में प्रशिक्षण प्राप्त कर रहे प्रशिक्षु द्वारा तैयार किए गए दस्तावेजों का ढेर कॉन्फ्रेंस टेबल पर रखा है, ताकि कार्यकारी अधिकारी असहमति जताने वाले सलाहकार के साथ उसकी समीक्षा कर सकें।</mark></p>
</blockquote>
<p><strong>Notes</strong> - Google Translation API’s Hindi hides the chain</p>
<blockquote>
<p>"प्रबंधक के मार्गदर्शन में प्रशिक्षण प्राप्त कर रहे प्रशिक्षु द्वारा तैयार किए गए दस्तावेजों का ढेर"</p>
</blockquote>
<p>This reads like: "The stack of documents prepared by the trainee receiving training under the manager's guidance." Google removed the linking words and squashed the sentence into one long adjective phrase, also changing past action ("mentored") to present ("receiving training").</p>
<p><strong>Response - JigsawStack</strong></p>
<blockquote>
<p>जिस इंटर्न को मैनेजर ने मेंटर किया था, उसने तैयार किए हुए दस्तावेज़ों का ढेर कांफ्रेंस टेबल पर है, कार्यकारी द्वारा उस कंसल्टेंट के साथ समीक्षा के लिए तैयार है जो असहमत था।</p>
</blockquote>
<hr />
<h3 id="heading-category-3-numbers-dates-identifiers-amp-entity"><strong>Category 3:</strong> Numbers, Dates, Identifiers &amp; Entity</h3>
<p>To evaluate this category, we take the following English source text and analyse its translation into Hindi, a language written in a non-Latin script.</p>
<p><strong>Input Text -</strong></p>
<blockquote>
<p>Apple's Q2 report revealed sales of 3.5 million iPhone 15 Pro Max units at €1,299 each, while Samsung's $12.04 billion revenue in 2023 included devices shipping with USB-C, and the firmware update released on 03/04/2023 carried build ID a9f3c2e-rc.7.</p>
</blockquote>
<p><strong>Expected Text -</strong></p>
<blockquote>
<p>Apple की Q2 रिपोर्ट में 3.5 मिलियन iPhone 15 Pro Max यूनिट्स की बिक्री €1,299 प्रति यूनिट की दर से सामने आई, जबकि Samsung की 2023 में $12.04 बिलियन की आय में USB-C के साथ शिप होने वाले डिवाइस शामिल थे, और 03/04/2023 को जारी फ़र्मवेयर अपडेट का build ID a9f3c2e-rc.7 था।</p>
</blockquote>
<p><strong>Response - ChatGPT Translate</strong></p>
<blockquote>
<p>Apple की Q2 रिपोर्ट में €1,299 प्रति यूनिट की दर से 3.5 मिलियन iPhone 15 Pro Max यूनिट्स की बिक्री का खुलासा हुआ, जबकि 2023 में Samsung का $12.04 बिलियन का राजस्व USB-C के साथ भेजे गए उपकरणों को शामिल करता था, और 03/04/2023 को जारी किए गए फ़र्मवेयर अपडेट में बिल्ड आईडी a9f3c2e-rc.7 थी।</p>
</blockquote>
<p><strong>Response - Translate Gemma 27b</strong></p>
<blockquote>
<p><mark>एप्पल</mark> की दूसरी तिमाही की रिपोर्ट में पता चला कि आईफोन 15 प्रो मैक्स के 3.5 मिलियन यूनिट <mark>1,299 यूरो </mark> प्रति यूनिट की दर से बेचे गए, जबकि सैमसंग का 2023 में <mark>12.04 बिलियन डॉलर</mark> का राजस्व, जिसमें <mark>यूएसबी-सी </mark> वाले उपकरणों की बिक्री शामिल थी, और 03/04/2023 को जारी किए गए फर्मवेयर अपडेट में बिल्ड आईडी a9f3c2e-rc.7 शामिल था।</p>
</blockquote>
<p><strong>Notes</strong> - Transliterated brand names to Hindi: "एप्पल", "आईफोन", "सैमसंग", "यूएसबी-सी" instead of keepin, replaced currency symbols: €1,299 → "1,299 यूरो", $12.04 billion → "12.04 बिलियन डॉलर".</p>
<p><strong>Response - Google Translation API</strong></p>
<blockquote>
<p><mark>एप्पल</mark> की दूसरी तिमाही की रिपोर्ट में €1,299 प्रति यूनिट की दर से 3.5 मिलियन <mark>आईफोन</mark> 15 प्रो मैक्स यूनिट की बिक्री का खुलासा हुआ, जबकि <mark>सैमसंग</mark> के 2023 में $12.04 बिलियन के राजस्व में <mark>यूएसबी-सी</mark> के साथ शिप किए गए डिवाइस शामिल थे, और 03/04/2023 को जारी किए गए फर्मवेयर अपडेट में बिल्ड आईडी a9f3c2e-rc.7 थी</p>
</blockquote>
<p><strong>Notes</strong> - Transliterated brand names to Hindi: "एप्पल", "आईफोन", "सैमसंग", "यूएसबी-सी" instead of keepin</p>
<p><strong>Response - JigsawStack</strong></p>
<blockquote>
<p>Apple की Q2 रिपोर्ट ने बताया कि 3.5 मिलियन iPhone 15 Pro Max यूनिट्स की बिक्री हुई, प्रत्येक €1,299 में, जबकि Samsung की $12.04 बिलियन राजस्व 2023 में उन डिवाइसों को शामिल करती है जिनमें USB-C शिप हुआ, और 03/04/2023 को जारी किया गया फ़र्मवेयर अपडेट बिल्ड ID a9f3c2e-rc.7 लेकर आया।</p>
</blockquote>
<hr />
<h3 id="heading-category-4-rtl-and-ltr-languages"><strong>Category 4:</strong> RTL and LTR Languages</h3>
<p>To evaluate this category, we take the following English source text and analyse its translation into Arabic, a language written in a non-Latin script.</p>
<p><strong>Input Text -</strong></p>
<blockquote>
<p>The meeting scheduled for 10 AM will review the file version (v2.1) that user @john_doe uploaded as report_v2.1.pdf at 9:45 PM, following Apple's launch of iOS 17.3 on 21/01/2024 in the UAE.</p>
</blockquote>
<p><strong>Expected Text -</strong></p>
<blockquote>
<p>الاجتماع المُجدوَل في الساعة 10 صباحًا سيُراجع إصدار الملف (v2.1) الذي رفعه المستخدم @john_doe باسم report_v2.1.pdf في الساعة 9:45 مساءً، بعد إطلاق Apple لنظام iOS 17.3 بتاريخ 21/01/2024 في الإمارات.</p>
</blockquote>
<p><strong>Response - ChatGPT Translate</strong></p>
<blockquote>
<p>سيُراجع الاجتماع المُجدول الساعة 10 صباحًا إصدار الملف (v2.1) الذي قام المستخدم @john_doe برفعه باسم report_v2.1.pdf عند الساعة 9:45 مساءً، وذلك عقب إطلاق <mark>آبل</mark> لنظام iOS 17.3 بتاريخ 21/01/2024 في دولة الإمارات العربية المتحدة.</p>
</blockquote>
<p><strong>Notes</strong> -Transliterated Apple → "آبل".</p>
<p><strong>Response - Translate Gemma 27b</strong></p>
<blockquote>
<p>الاجتماع المقرر عقده في الساعة 10 صباحًا سيراجع النسخة النهائية من الملف (v2.1) التي قام المستخدم @john_doe بتحميلها تحت اسم report_v2.1.pdf في الساعة 9:45 مساءً، وذلك بعد إطلاق شركة <mark>آبل</mark> نظام التشغيل iOS 17.3 في <mark>21 </mark> يناير 2024 في دولة الإمارات العربية المتحدة</p>
</blockquote>
<p><strong>Notes</strong> - Transliterated Apple → "آبل", Hallucination: Added "النسخة النهائية" (final version) - not in source, changed date format 21/01/2024→21 ي</p>
<p><strong>Response - Google Translation API</strong></p>
<blockquote>
<p>سيستعرض الاجتماع المقرر عقده في <mark>الساعة العاشرة صباح</mark>اً نسخة الملف (v2.1) التي قام المستخدم @john_doe بتحميلها باسم report_v2.1.pdf في الساعة 9:45 مساءً، وذلك بعد إطلاق شركة <mark>آبل</mark> لنظام التشغيل iOS 17.3 في 21/01/2024 في الإمارات العربية المتحدة.</p>
</blockquote>
<p><strong>Notes</strong> - Wrote time in words "الساعة العاشرة صباحاً" instead of "10". Transliterated Apple → "آبل".</p>
<p><strong>Response - JigsawStack</strong></p>
<blockquote>
<p>الاجتماع المقرر في الساعة 10:00 صباحًا سيستعرض إصدار الملف (v2.1) الذي حمّله المستخدم @john_doe كـ report_v2.1.pdf في الساعة 9:45 مساءً، وذلك بعد إطلاق Apple لنظام iOS 17.3 في 21/01/2024 في الإمارات.</p>
</blockquote>
<hr />
<h3 id="heading-category-5-slangs"><strong>Category 5:</strong> Slangs</h3>
<p>To test this category, we take the following English source text and analyse its translation into Hindi, a language written in a non-Latin script.</p>
<p><strong>Input Text -</strong></p>
<blockquote>
<p>Bro that shits kind of fire, have you tried out interfaze ? no cap bro, its a 10 on 10 latina baddie type vibe</p>
</blockquote>
<p><strong>Expected Text -</strong></p>
<blockquote>
<p>भाई वो चीज़ वाकई ज़बरदस्त है, क्या तूने interfaze आज़माया? सच्ची बात भाई, ये तो पूरे 10 में 10, लैटिना बैडी टाइप वाइब है।</p>
</blockquote>
<p><strong>Response - ChatGPT Translate</strong></p>
<blockquote>
<p>भाई, वो तो काफ़ी फायर है, क्या तूने interfaze ट्राय किया है? नो कैप भाई, ये पूरे 10 में 10, लैटिना बैडी टाइप वाइब है।</p>
</blockquote>
<p><strong>Response - Translate Gemma 27b</strong></p>
<blockquote>
<p>भाई, यह <mark>गाना</mark> वाकई कमाल का है, क्या तुमने <mark>इंटरफ़ेज़ सुना</mark> है? सच बता रहा हूँ, यह 10 में से 10 रेटिंग देने लायक, शानदार <mark>लैटिन संगीत</mark> है</p>
</blockquote>
<p><strong>Notes</strong> - Hallicunated "गाना" (song) and "संगीत" (music), Changed "tried out interfaze" → "इंटरफ़ेज़ सुना"(heard interfaze), “लैटिन संगीत" (Latin music) instead of "लैटिना बैडी" - completely wrong meaning</p>
<p><strong>Response - Google Translation API</strong></p>
<blockquote>
<p>भाई, ये तो कमाल का है, क्या तुमने इंटरफ़ेज़ को आज़माया है? सच में भाई, ये एकदम लैटिना बैडी टाइप का है।</p>
</blockquote>
<p><strong>Notes</strong> - Doesn’t include “10 on 10” due to overformalizing</p>
<p><strong>Response - JigsawStack</strong></p>
<blockquote>
<p>भाई, वो चीज़ वाकई ज़बरदस्त है, क्या तुमने interfaze आज़माया है? सच्ची बात कहूँ भाई, ये पूरी तरह से 10 में 10 लैटिना बड्डी वाला वाइब है</p>
</blockquote>
<h2 id="heading-run-the-tests-yourself">Run the Tests Yourself</h2>
<p>All tests are fully reproducible. This <a target="_blank" href="https://github.com/JigsawStack/translation-bench">repository</a> contains the complete evaluation framework, including the <code>evals.json</code> file used to define and execute category-level assessments.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Our diagnostic evaluation across five translation categories reveals clear patterns in how different systems handle real-world translation challenges.</p>
<p><strong>Translation Quality</strong></p>
<p>JigsawStack emerged as the most reliable system for preserving meaning, structure, and fidelity across all test categories. Both successfully handled:</p>
<ul>
<li><p>Complex legal text with document identifiers</p>
</li>
<li><p>Nested grammatical structures without simplification</p>
</li>
<li><p>Exact preservation of numbers, dates, currencies, and version strings</p>
</li>
<li><p>Informal slang without over-formalisation</p>
</li>
</ul>
<p>Google Translate struggled with domain-specific content, mistranslating "Dkt. 298" as "Doctor number 298" and flattening nested clause structures. Gemma showed the most inconsistencies, including hallucinations in RTL text and currency symbol replacements.</p>
<p><strong>Developer Experience</strong></p>
<p>For production deployments, JigsawStack offers the best balance of quality and accessibility:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Factor</td><td>JigsawStack</td><td>Google</td><td>ChatGPT</td></tr>
</thead>
<tbody>
<tr>
<td>API Availability</td><td>✅</td><td>✅</td><td>❌</td></tr>
<tr>
<td>Rate Limits</td><td>50 req/s</td><td>15 req/s</td><td>N/A</td></tr>
<tr>
<td>Free Tier</td><td>8M tokens</td><td>500K chars</td><td>N/A</td></tr>
</tbody>
</table>
</div><p><strong>The Bottom Line</strong></p>
<p>If you need accurate, structure-preserving translation with an easy-to-integrate API, JigsawStack delivers ChatGPT-level quality at 3x the rate limits of Google Translate, without the hallucination issues seen in open-source alternatives.</p>
<h3 id="heading-comparison-table">Comparison Table</h3>
<p>◐ = partial | ❌ = inaccurate/fails | ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Category</td><td>JigsawStack</td><td>Google Translate</td><td>Gemma</td><td>ChatGPT</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Long Form Legal Sentences</strong></td><td>✅ Preserves legal, document identifiers and nouns well while maintaining the structure and relation</td><td>❌ Mistranslates when document identifiers or abbreviations are involved ( e.g. "Dkt. 298" as "Doctor number 298" )</td><td>❌ Results in incorrect translation ( i.e. "Dkt." incorrectly; mistranslated "tort" as "compensation" (क्षतिपूर्ति) )</td><td>✅ Preserves legal, document identifiers and nouns well while maintaining the structure and relation</td></tr>
<tr>
<td><strong>Grammar &amp; Ambiguity</strong></td><td>✅ Preserves nested relative clause structure with जिसे...जिसे chain</td><td>❌ Flattenes structure into adjective phrase; changed past tense to present</td><td>◐ Simplifies structure; added extra content that is not in the source</td><td>✅ Preserves nested relative clause structure with जिसे...जिसे chain</td></tr>
<tr>
<td><strong>Numbers, Dates, Identifiers</strong></td><td>✅ Preserves all numbers, currencies (€, $), dates, build ID, brand names</td><td>◐ Translates brands names to Hindi (एप्पल, आईफोन, सैमसंग)</td><td>❌ Transliterates brands + replaced currency symbols with words (यूरो, डॉलर)</td><td>✅ Preserves Nouns, Currency signs and numbers well</td></tr>
<tr>
<td><strong>RTL/LTR Languages</strong></td><td>✅ Preserves of identifiers; minor: "10:00" instead of "10"</td><td>◐ Write the time in words</td><td>❌ Hallucinates (i.e., "final version" instead of “file version )</td><td>◐ Can translate proper nouns ( i.e. apple → آبل )</td></tr>
<tr>
<td><strong>Slangs</strong></td><td>✅ Preserves slang well without getting too informal</td><td>❌ Misses out on words due to overformalizing the sentence</td><td>❌ Hallicunates majorly</td><td>✅ Preserves slang well without getting too informal</td></tr>
<tr>
<td><strong>Developer Friendly</strong></td><td>✅ Has an easy-to-use API</td><td>✅ Has an easy-to-use API</td><td>❌ Have to self-host</td><td>❌ No API Service available</td></tr>
<tr>
<td><strong>Pricing</strong></td><td>~$0.00003 incurred here</td><td>~$0.00004 incurred here</td><td>$0.20 ( 33,101ms ÷ 3,600,000ms/hour × $21.48/hour )</td><td>❌ No API Service available</td></tr>
<tr>
<td><strong>Rate Limits</strong></td><td>50 requests per second</td><td>30,000 characters per second</td><td>✅ Configurable as required</td><td>❌ No API Service available</td></tr>
<tr>
<td><strong>Speed</strong></td><td>Average latency is 4-5s</td><td>Average latency is 450ms</td><td>Average latency is 6-7s</td><td>Average lat</td></tr>
</tbody>
</table>
</div><h2 id="heading-join-the-jigsawstack-community"><strong>👥 Join the JigsawStack Community</strong></h2>
<p>Have questions or want to show off what you’ve built? Join the JigsawStack developer community on <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">Discord</a> and <a target="_blank" href="https://x.com/jigsawstack">X/Twitter</a>. Let’s build something amazing together!</p>
]]></content:encoded></item><item><title><![CDATA[Embedding v2: One Vector, Every Modality]]></title><description><![CDATA[2025 has been great for the embedding model space, with Google’s Gemini-Embedding-001-Model and Alibaba team releasing their own series of Qwen3 embedding models. Both models outperform their predecessors in quality on various tasks for text embeddin...]]></description><link>https://blogdata.jigsawstack.com/embedding-v2-one-vector-every-modality</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/embedding-v2-one-vector-every-modality</guid><category><![CDATA[Embedding Models]]></category><category><![CDATA[#RAG  #RetrievalAugmentedGeneration  #LLMApplications  #TechnicalDocs  #SensorEngineering  #MultimodalAI  #GraphRAG  #HyDEPrompting  #AIForEngineers  #KnowledgeGraphs  #MachineLearning  #LangChain  #LlamaIndex  #OCR  #Mechatronics  #IndustrialAI  #SmartManufacturing  #AIKnowledgeManagement  #SemanticSearch  #AIInfrastructure]]></category><category><![CDATA[#ai-tools]]></category><dc:creator><![CDATA[Harsha V Khurdula]]></dc:creator><pubDate>Wed, 17 Sep 2025 21:35:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758124812606/4347ae37-0f00-4959-8fce-dfce449b0352.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>2025 has been great for the embedding model space, with Google’s <a target="_blank" href="https://ai.google.dev/gemini-api/docs/embeddings#model-versions">Gemini-Embedding-001-Model</a> and Alibaba team releasing their own series of <a target="_blank" href="https://qwenlm.github.io/blog/qwen3-embedding/">Qwen3 embedding models</a>. Both models <a target="_blank" href="https://huggingface.co/spaces/mteb/leaderboard">outperform</a> their predecessors in quality on various tasks for text embedding generation.</p>
<p>We are also excited to enhance our capabilities. We have just launched a new version of our <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/embedding-v2">embedding model</a>, offering much richer representations for different types of content and input languages.</p>
<h2 id="heading-why-a-new-embedding-model">Why a New Embedding Model?</h2>
<p>Our <a target="_blank" href="https://jigsawstack.com/blog/introducing-multimodal-multilingual-embedding-model-for-images-audio-and-pdfs-in-alpha">first-generation embedding model</a> (launched last year) introduced a unified vector space for text, images, PDFs, and audio in over <strong>80 languages</strong>. It was built to address a key gap: most embeddings were <em>text-only or English-only</em>, making cross-modal, multilingual retrieval difficult. By supporting diverse formats with a single <strong>768-dimensional representation</strong>, our <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/embedding">v1 model</a> enabled applications such as document and audio content retrieval, addressing the gap with a single query.</p>
<h2 id="heading-what-changed">What changed?</h2>
<p>Since then, the embedding landscape has evolved with larger models, and new techniques offer even better semantic capture and flexibility. With our latest model, you get:</p>
<ul>
<li><p><strong>Richer High-Dimensional Vectors:</strong> Embedding v2 now outputs <strong>4096-dimensional</strong> vectors (up from 768). This results in more accurate similarity searches and clustering, providing more relevant search results and better representation for data.</p>
</li>
<li><p><strong>Enhanced Multilingual &amp; Cross-Modal Support:</strong> Our new model supports over <strong>100+ languages and a variety of programming languages</strong> (up from 80). <em>This means a single query vector can find matches in any language, e.g., a French audio clip could retrieve a relevant English paragraph.</em></p>
</li>
<li><p><strong>Instruction-Aware Customization:</strong> Embedding v2 is <strong>instruction-tuned</strong>, allowing it to better follow natural language guidance when generating embeddings. <em>Greater customizability</em> means you get embeddings aligned to your NLP task.</p>
</li>
<li><p><strong>Speaker Fingerprinting for Audio:</strong> You can now produce a unique <strong>speaker identity embedding</strong> from audio (The speaker fingerprint captures the speaker's voice traits, helping to identify or group speakers across clips).</p>
</li>
</ul>
<h2 id="heading-getting-started-with-embedding-v2">Getting Started with Embedding v2</h2>
<p>Embedding v2 is available now as part of our <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/embedding-v2">AI SDKs</a>. It’s a drop-in upgrade; simply call the new <code>/v2/embedding</code> endpoint in our SDKs, and you’ll immediately start receiving the richer 4096-dim embeddings.</p>
<p>With Python:</p>
<pre><code class="lang-python"><span class="hljs-comment">#pip install jigsawstack or uv add jigsawstack</span>
<span class="hljs-keyword">from</span> jigsawstack <span class="hljs-keyword">import</span> JigsawStack

jigsaw = JigsawStack(api_key=<span class="hljs-string">"your-api-key"</span>)

response = jigsaw.embedding_v2({
  <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://jigsawstack.com/preview/stt-example.wav"</span>,
  <span class="hljs-string">"type"</span>: <span class="hljs-string">"audio"</span>,
  <span class="hljs-string">"speaker_fingerprint"</span>: <span class="hljs-literal">True</span>
})
</code></pre>
<p>With JavaScript:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//npm install jigsawstack</span>
<span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsaw = JigsawStack({ <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"your-api-key"</span> });

<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.embedding_v2({
  <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://jigsawstack.com/preview/stt-example.wav"</span>,
  <span class="hljs-string">"type"</span>: <span class="hljs-string">"audio"</span>,
  <span class="hljs-string">"speaker_fingerprint"</span>: <span class="hljs-literal">true</span>
})
</code></pre>
<p>We’ve ensured compatibility with popular vector databases and libraries, so you can index the following embeddings with <a target="_blank" href="https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/">Faiss</a>, Pinecone, or others with ease</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"embeddings"</span>: [
        [
              <span class="hljs-number">0.01994265988469124</span>,
             <span class="hljs-number">-0.00740474509075284</span>,
              <span class="hljs-number">0.008083267137408257</span>,
              ....
        ],
  <span class="hljs-string">"speaker_fingerprint"</span>: [
              <span class="hljs-number">0.01240834966301918</span>,
             <span class="hljs-number">-0.016331281512975693</span>,
             <span class="hljs-number">-0.009885231032967567</span>,
              ....
        ],
  <span class="hljs-string">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">26</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">13239</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">3253</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">16518</span>
  }
}
</code></pre>
<p>Be sure to check out our <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/embedding-v2"><strong>embedding v2 documentation</strong></a> for getting started with your choice of programming language and options for your use case. With this upgrade, our model equips you with state-of-the-art embeddings, so you can build AI applications that truly understand your data in all its forms.</p>
<h2 id="heading-embedding-v2-in-action">Embedding v2 in Action</h2>
<p>Let us ship a real-world product: <a target="_blank" href="https://github.com/JigsawStack/who-sang-that">An audio app</a> powered by Embedding v2, with features:</p>
<ul>
<li><p><strong>Lyric/quote search</strong> → return artist, song title, and exact timestamp.</p>
</li>
<li><p><strong>Voice match</strong> (“more from this voice”) via speaker fingerprints across tracks.</p>
</li>
<li><p><strong>Natural-language Q&amp;A</strong> over your song/podcast library with timestamp citations.</p>
</li>
<li><p><strong>Batch ingest + retrieval</strong> for multiple audio files; ready for FAISS/Pinecone/Qdrant.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758123818485/016bf626-348a-4ecf-b7a0-42e4065085d9.png" alt class="image--center mx-auto" /></p>
<p>As shown in the sequence diagram above, we transcribe with timestamps, embed every lyric segment, and store a speaker fingerprint per track. Ask “who said guddi sikhran di jatt ni?” and you’ll get: Shubh, “Elevated” [00:18–00:24], plus an option to “search more songs by this voice.” The same pattern works for podcasts, meetings, and call logs while using Embedding v2.</p>
<p>You ingest a list of songs from various artists, say, <strong>Shubh</strong> (Punjabi, pa), <strong>Miki Matsubara</strong> (Japanese, ja), <strong>Adila Sedraïa</strong>, known professionally as Indila (French, fr), &amp; <strong>Dhanda Nyoliwala</strong> (Haryanvi, bgc).</p>
<p>We will consider 4 distinct singles (audio clips) for this MVP, one from each artist named above:</p>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=TS7iS1O4Ejg&amp;list=RDTS7iS1O4Ejg&amp;start_radio=1">Elevated by Shubh</a> (<a target="_blank" href="https://lyricstranslated.com/elevated-lyrics-meaning-in-english-shubh/">lyrics</a>)</p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=VEe_yIbW64w">真夜中のドア/Stay With Me by Miki Matsubara</a> (<a target="_blank" href="https://www.musixmatch.com/lyrics/Miki-Matsubara/Mayonaka-no-Door-Stay-With-Me/translation/english">lyrics</a>)</p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=K5KAc5CoCuk&amp;list=RDK5KAc5CoCuk&amp;start_radio=1">Dernière Danse by Indila</a> (<a target="_blank" href="https://www.frenchlyricstranslations.com/derniere-danse-lyrics-translation-indila/#google_vignette">lyrics</a>)</p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=1OAjeECW90E&amp;list=RD1OAjeECW90E&amp;start_radio=1">Russian Bandana by Dhanda Nyoliwala</a> (<a target="_blank" href="https://www.lyricsdecoder.com/russian-bandana-lyrics-english-translation-dhanda-nyoliwala/">lyrics</a>)</p>
</li>
</ul>
<p>We make the following requests in English to perform cross-lingual retrieval:</p>
<ol>
<li>Dhanda says <em>he’s educated and must not be taken lightly</em>.</li>
</ol>
<pre><code class="lang-bash">curl -X POST <span class="hljs-string">"http://localhost:8000/who-said"</span> \
-H <span class="hljs-string">"Content-Type: application/json"</span> \
-d <span class="hljs-string">'{"quote":" Who sang this? Chhora Educate Laiye Na Gawara Mein Te (I’m educated, not someone to be taken lightly.) Nahi Mile Mere Jisse Re Hazara Mein Te (You won’t find someone like me, even among thousands.)"}'</span>
</code></pre>
<p>Result:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"answer"</span>: <span class="hljs-string">"dhanda said it in “russian bandana” [151.38s–154.27s]. I can search more songs by this voice if you want."</span>,
  <span class="hljs-attr">"best"</span>: {
    <span class="hljs-attr">"artist"</span>: <span class="hljs-string">"dhanda"</span>,
    <span class="hljs-attr">"title"</span>: <span class="hljs-string">"russian bandana"</span>,
    <span class="hljs-attr">"timestamp"</span>: [
      <span class="hljs-number">151.38</span>,
      <span class="hljs-number">154.27</span>
    ],
    <span class="hljs-attr">"track_id"</span>: <span class="hljs-string">"dhanda:russian bandana:156027077"</span>,
    <span class="hljs-attr">"source_url"</span>: <span class="hljs-string">"&lt;temp_url_generated&gt;"</span>,
    <span class="hljs-attr">"match_score"</span>: <span class="hljs-number">0.561</span>,
    <span class="hljs-attr">"snippet"</span>: <span class="hljs-string">"ਛੋਰਾ ਏਜੁਕੇਟ ਲਾ ਯੇ ਨਾ ਗਵਾਰਾ ਮੈਤੇ ਨੈ"</span>
  },
  <span class="hljs-attr">"more_by_voice"</span>: []
}
</code></pre>
<ol start="2">
<li>Indila says, <em>“I dance with the wind and rain“</em></li>
</ol>
<pre><code class="lang-bash">curl -X POST <span class="hljs-string">"http://localhost:8000/who-said"</span> \
-H <span class="hljs-string">"Content-Type: application/json"</span> \
-d <span class="hljs-string">'{"quote":"Which artist says? I dance with the wind the rain"}'</span>
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"answer"</span>: <span class="hljs-string">"indila said it in “danse” [156.6s–159.58s]. I can search more songs by this voice if you want."</span>,
  <span class="hljs-attr">"best"</span>: {
    <span class="hljs-attr">"artist"</span>: <span class="hljs-string">"indila"</span>,
    <span class="hljs-attr">"title"</span>: <span class="hljs-string">"danse"</span>,
    <span class="hljs-attr">"timestamp"</span>: [
      <span class="hljs-number">156.6</span>,
      <span class="hljs-number">159.58</span>
    ],
    <span class="hljs-attr">"track_id"</span>: <span class="hljs-string">"indila:danse:89220676"</span>,
    <span class="hljs-attr">"source_url"</span>: <span class="hljs-string">"&lt;temp_url_generated&gt;"</span>,
    <span class="hljs-attr">"match_score"</span>: <span class="hljs-number">0.6298</span>,
    <span class="hljs-attr">"snippet"</span>: <span class="hljs-string">"je danse avec"</span>
  },
  <span class="hljs-attr">"more_by_voice"</span>: []
}
</code></pre>
<ol start="3">
<li>Miki Matsubara refers to <em>a person wearing a gray jacket with a coffee stain</em>.</li>
</ol>
<pre><code class="lang-bash">curl -X POST <span class="hljs-string">"http://localhost:8000/who-said"</span> \
-H <span class="hljs-string">"Content-Type: application/json"</span> \
-d <span class="hljs-string">'{"quote":"Which song has a reference to a gray jacket with coffee stain?"}'</span>
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"answer"</span>: <span class="hljs-string">"miki said it in “stay with me - mayonakara” [43.75s–46.65s]. I can search more songs by this voice if you want."</span>,
  <span class="hljs-attr">"best"</span>: {
    <span class="hljs-attr">"artist"</span>: <span class="hljs-string">"miki"</span>,
    <span class="hljs-attr">"title"</span>: <span class="hljs-string">"stay with me - mayonakara"</span>,
    <span class="hljs-attr">"timestamp"</span>: [
      <span class="hljs-number">43.75</span>,
      <span class="hljs-number">46.65</span>
    ],
    <span class="hljs-attr">"track_id"</span>: <span class="hljs-string">"miki:stay with me - mayonakara:230172378"</span>,
    <span class="hljs-attr">"source_url"</span>: <span class="hljs-string">"&lt;temp_url_generated&gt;"</span>,
    <span class="hljs-attr">"match_score"</span>: <span class="hljs-number">0.5551</span>,
    <span class="hljs-attr">"snippet"</span>: <span class="hljs-string">"あなたはyouがそんな気もするグレイのジャケットに"</span>
  },
  <span class="hljs-attr">"more_by_voice"</span>: []
}
</code></pre>
<p>As we can see, English queries correctly matched lyrics in Punjabi (Gurmukhi), French, and Japanese, showing that our model can power retrieval by meaning, and not language or script, which is a huge win when dealing with multilingual data. The same pipeline works for podcasts, meetings, and call logs, multilingual queries over mixed audio libraries, with grounded answers and timestamp citations.</p>
<p>More importantly, you can replicate the example for PDFs, Images, and long texts with ease!</p>
<h2 id="heading-join-the-jigsawstack-community">👥 Join the JigsawStack Community</h2>
<p>Have questions or want to show off what you’ve built? Join the JigsawStack developer community on <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">Discord</a> and <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">X/Twitter</a>. Let’s build something amazing together!</p>
]]></content:encoded></item><item><title><![CDATA[A Practical Zero-Shot Multimodal Classifier]]></title><description><![CDATA[Most classifiers ship with a fixed label list. They perform well inside that box and fail silently outside it. So we took this as a challenge. We introduce a classifier that starts from the opposite assumption: the world is open. New product names ap...]]></description><link>https://blogdata.jigsawstack.com/a-practical-zero-shot-multimodal-classifier</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/a-practical-zero-shot-multimodal-classifier</guid><category><![CDATA[Machine Learning]]></category><category><![CDATA[image classification]]></category><category><![CDATA[multi label text classification]]></category><dc:creator><![CDATA[Harsha V Khurdula]]></dc:creator><pubDate>Tue, 16 Sep 2025 18:18:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758063078722/ab73ea59-6c37-45eb-b55c-f3f789206c2a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://arxiv.org/html/2405.18415v1">Most classifiers</a> ship with a fixed label list. They perform well inside that box and fail silently outside it. So we took this as a challenge. We introduce a <a target="_blank" href="https://jigsawstack.com/classification">classifier</a> that starts from the opposite assumption: the world is open. New product names appear, new categories form, and multiple languages.</p>
<p>At JigsawStack, we treat classification as a <strong>language task in addition to open vocabulary classification</strong>. It accepts text or images, arbitrary label strings, including long and descriptive ones, built on top of Small Vision Language Models; the result is a practical zero-shot classification that works, from multilingual support tickets to real-world images without retraining.</p>
<h2 id="heading-where-it-slaps">Where It Slaps 🔥</h2>
<h2 id="heading-1-crosslingual-text-classification">1) Crosslingual Text Classification</h2>
<pre><code class="lang-javascript"><span class="hljs-comment">//npm install jigsawstack</span>
<span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsaw = JigsawStack({ <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"your-api-key"</span> });

<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.classification({
  <span class="hljs-string">"dataset"</span>: [
        {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
              <span class="hljs-string">"value"</span>: <span class="hljs-string">"Necesito un reembolso; me cobraron dos veces."</span>
        },
        {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
              <span class="hljs-string">"value"</span>: <span class="hljs-string">"सबमिट बटन काम नहीं कर रहा है।"</span>
        }
  ],
  <span class="hljs-string">"labels"</span>: [
        {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
              <span class="hljs-string">"value"</span>: <span class="hljs-string">"billing issue"</span>
        },
        {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
              <span class="hljs-string">"value"</span>: <span class="hljs-string">"feature request"</span>
        },
        {
              <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
              <span class="hljs-string">"value"</span>: <span class="hljs-string">"bug"</span>
        }
  ]
})
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"predictions"</span>: [
        <span class="hljs-string">"billing issue"</span>,
        <span class="hljs-string">"bug"</span>
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">145</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">14</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">1386</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">1545</span>
    }
}
</code></pre>
<h2 id="heading-2-moderation-amp-intent-classification">2) Moderation &amp; Intent Classification</h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.classification({
    <span class="hljs-string">"dataset"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"sydney sweeney is mid"</span>
        },
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"I'm thrilled to announce that I am part of JigsawStack"</span>
        }
    ],
    <span class="hljs-string">"labels"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"hate"</span>
        },
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"harrasment"</span>
        },
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"spam"</span>
        }
    ]
})
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"predictions"</span>: [
        <span class="hljs-string">"hate"</span>,
        <span class="hljs-string">"spam"</span>
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">127</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">12</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">995</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">1134</span>
    }
}
</code></pre>
<h2 id="heading-3-tagging-multi-label-classification">3) Tagging (Multi-label) Classification</h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.classification({
    <span class="hljs-string">"dataset"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"I bought the AMD Ryzen 7 5700G to build a PC that could handle daily tasks, work, light gaming, and even some editing all without needing a dedicated graphics card right away. And honestly, I’m really impressed with how it performs. Right out of the box, this processor feels fast, stable, and efficient. With 8 cores and 16 threads, it handles multitasking like a champ. I can run multiple apps, edit videos, use development tools, and stream without lag or freezing. Everything is smooth and responsive."</span>
        }
    ],
    <span class="hljs-string">"labels"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"hardware"</span>
        },
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"powered by AMD"</span>
        },
        {
            <span class="hljs-string">"key"</span>: <span class="hljs-string">"product review"</span>,
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"This is a review from a user which talks about their recent computer hardware purchase."</span>
        }
    ],
    <span class="hljs-string">"multiple_labels"</span>: <span class="hljs-literal">true</span>
})
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"predictions"</span>: [
        [
            <span class="hljs-string">"hardware"</span>,
            <span class="hljs-string">"powered by AMD"</span>,
            <span class="hljs-string">"product review"</span>
        ]
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">256</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">20</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">1243</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">1519</span>
    }
}
</code></pre>
<h2 id="heading-4-irlcontext-aware-image-classification">4) IRL/Context Aware Image Classification</h2>
<p>Input image:</p>
<p><img src="https://images.unsplash.com/photo-1580655653885-65763b2597d0?q=80&amp;w=1740&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt class="image--center mx-auto" /></p>
<p>Classification:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.classification({
    <span class="hljs-string">"dataset"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"image"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"https://images.unsplash.com/photo-1580655653885-65763b2597d0?q=80&amp;w=1740&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"</span>
        }
    ],
    <span class="hljs-string">"labels"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"This image is likely taken on the west coast of US"</span>
        },
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"text"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"यह अमेरिका का हॉलीवुड है"</span>
        }
    ],
    <span class="hljs-string">"multiple_labels"</span>: <span class="hljs-literal">true</span>
})
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"predictions"</span>: [
        [
            <span class="hljs-string">"This image is likely taken on the west coast of US"</span>,
            <span class="hljs-string">"यह अमेरिका का हॉलीवुड है"</span>
        ]
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">145</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">39</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">4235</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">4419</span>
    }
}
</code></pre>
<h2 id="heading-5-image-classification-with-image-as-a-label-reference">5) Image Classification with Image as a Label Reference</h2>
<p>Input Image:</p>
<p><img src="https://images.unsplash.com/photo-1655008109440-df3a58567cee?q=80&amp;w=2726&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt class="image--center mx-auto" /></p>
<p>Reference images as labels:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757370307671/8c4dfedf-fc84-4360-8eee-c23694a9d918.png" alt class="image--center mx-auto" /></p>
<p>The two reference images above (side-by-side), which are passed as input, showcase two hands in poker; the input image is of a hand where the player has a ‘Royal Flush‘, which is the best and rarest hand in poker, consisting of the ace, king, queen, jack, and ten of the same suit. The current task is to classify the hand that the player has based on the reference images as follows</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.classification({
    <span class="hljs-string">"dataset"</span>: [
        {
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"image"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"https://images.unsplash.com/photo-1655008109440-df3a58567cee?q=80&amp;w=2726&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"</span>
        }
    ],
    <span class="hljs-string">"labels"</span>: [
        {
            <span class="hljs-string">"key"</span>: <span class="hljs-string">"This is a straight"</span>, <span class="hljs-comment">// image on the left</span>
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"image"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"https://plus.unsplash.com/premium_photo-1694781503979-f2c7f599d269?q=80&amp;w=870&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"</span>
        },
        {
            <span class="hljs-string">"key"</span>: <span class="hljs-string">"This is a royal flush"</span>, <span class="hljs-comment">//image on the right</span>
            <span class="hljs-string">"type"</span>: <span class="hljs-string">"image"</span>,
            <span class="hljs-string">"value"</span>: <span class="hljs-string">"https://plus.unsplash.com/premium_photo-1671683370315-87306b0faf90?q=80&amp;w=1744&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"</span>
        }
    ]
})
</code></pre>
<p>Result</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"predictions"</span>: [
        <span class="hljs-string">"This is a royal flush"</span>
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">217</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">14</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">5748</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">5979</span>
    }
}
</code></pre>
<h2 id="heading-not-just-novel-but-smart">Not Just Novel, but Smart</h2>
<ul>
<li><p><strong>Open-set safety</strong>: You can pass a label “unknown/none of the above” instead of forcing a bad match to avoid false positives.</p>
</li>
<li><p><strong>Label agility</strong>: Built with care for real-world generalization.</p>
</li>
<li><p><strong>Multilingual by construction</strong>: prompts and labels can be in the user’s language; we support mixed scripts and cross-lingual matching.</p>
</li>
</ul>
<p>Zero-shot multimodal classification isn’t magic or a feat that can be achieved by training all the labels in the world; rather, it’s language-conditioned decision-making with honest uncertainty. By treating labels as language and leveraging SLMs, we get a classifier that adapts for better generalization without a retraining cycle.</p>
<h2 id="heading-join-the-jigsawstack-community">👥 Join the JigsawStack Community</h2>
<p>Have questions or want to show off what you’ve built? Join the JigsawStack developer community on <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">Discord</a> and <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">X/Twitter</a>. Let’s build something amazing together!</p>
]]></content:encoded></item><item><title><![CDATA[Context Engineering: Yet Another  Branch of "Engineering" Involving Language Models]]></title><description><![CDATA[Have we just rebranded prompt engineering? Like Apple did with “Glass“? Well, turns out that there is more to context-engineering than writing lengthy prompts.
If prompt engineering was about cleverly wording a single query to coax a good answer, con...]]></description><link>https://blogdata.jigsawstack.com/context-engineering</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/context-engineering</guid><category><![CDATA[context engineering]]></category><category><![CDATA[#PromptEngineering]]></category><category><![CDATA[jigsawstack]]></category><category><![CDATA[large language models]]></category><dc:creator><![CDATA[Harsha V Khurdula]]></dc:creator><pubDate>Tue, 22 Jul 2025 04:23:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752280567208/212ec965-ebd5-4a8a-8974-4c30daf7b6c1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have we just rebranded <em>prompt engineering?</em> Like Apple did with <em>“Glass“?</em> Well, turns out that there is more to context-engineering than writing lengthy prompts.</p>
<p>If prompt engineering was about cleverly wording a single query to coax a good answer, context engineering is about orchestrating everything the AI needs around that query. Ideally, it allows us to address the shortcomings of prompt engineering for tasks that require multi-step reasoning or developing answers scattered within various knowledge bases.</p>
<h2 id="heading-from-prompt-engineering-to-context-engineering">From Prompt Engineering to Context Engineering</h2>
<p>Prompts by themselves couldn’t provide memory of past interactions implicitly, up-to-date knowledge, or ensure the AI stayed on track over a long dialogue. Developers realized that many failures of LLMs (like irrelevant or made-up answers) weren’t due to the model being “bad” – it was because the system around the model didn’t give it the right context or support. In other words, a clever prompt means little if it’s buried in a sea of irrelevant text or if the model lacks crucial information.</p>
<p>This insight gave rise to context engineering. Instead of focusing only on the prompt itself, context engineering is about designing the entire environment in which the AI operates. One article succinctly defines it as “structuring everything an LLM needs to complete a task successfully.” As <strong><em>Andrej Karpathy</em></strong> described, if prompt engineering is like writing a single sentence, context engineering is like writing an entire screenplay for the AI. You’re not just giving an instruction, you’re providing background, setting the scene, and making sure the AI has all the pieces to “get it right.”</p>
<h2 id="heading-building-blocks-of-context-engineering">Building Blocks of Context Engineering</h2>
<p>So, what exactly goes into the engineering context for a language model? It typically means managing and curating a variety of inputs around the prompt, such as:</p>
<ol>
<li><p>Conversation history and memory: Supplying relevant parts of prior chats or interactions so the model “remembers” important details.</p>
</li>
<li><p>Relevant documents or data: Fetching knowledge from databases, files, or the web (often via retrieval techniques) to inform the answer.</p>
</li>
<li><p>Structured instructions and context format: Framing information in a model-friendly way – for example, providing clear system instructions, or formatting data as tables or JSON if needed. Tools and actions: Allowing the model to invoke external tools or APIs (like calculators, web search, or code execution) and feeding those results into the context</p>
</li>
<li><p>Tools and actions: Allowing the model to invoke external tools or APIs (like calculators, web search, or code execution) and feeding those results into the context.</p>
</li>
</ol>
<p>In essence, context engineering is about filling the model’s context window (its working memory) with the right information, at the right time, in the right format. A lot of devs would argue that they’ve been doing this since day one, and now we’ve just labeled it.</p>
<h2 id="heading-why-context-engineering-is-the-latest-trend">Why Context Engineering is the Latest Trend?</h2>
<p>The move toward context engineering comes from practical necessity. As developers built more “<strong>industrial-strength</strong>” LLM applications. Context engineering delivers that by reducing guesswork. Instead of hoping a single prompt will make a model magically know about your 100-page knowledge base, <strong>you feed the knowledge base (or its highlights) into the model’s context</strong>.</p>
<p>Instead of the model forgetting what was said 10 messages ago, you make sure to persist important history forward. Rather than just asking the LLM to perform a task blindly, you might <strong>give it step-by-step context or even let it call functions and then supply the results back into the conversation</strong>.</p>
<p>Key factors that are driving this trend:</p>
<ol>
<li><p>New tooling libraries and frameworks, pushing what’s possible in agents’ memory.</p>
</li>
<li><p>Growing context windows allow devs to feed whole documents whenever needed, thus achieving a better utilization of the language model’s context window.</p>
</li>
<li><p>It’s a system, not a sentence! A well-engineered context means devs don’t have to tailor prompts for every scenario.</p>
</li>
</ol>
<p>Context engineering treats AI behavior as a systems design problem. Rather than solely relying on clever wording, it emphasizes architecting the information flow around the model.</p>
<h2 id="heading-what-do-the-numbers-say-about-context-engineering">What Do the Numbers Say About Context Engineering?</h2>
<p>There is growing evidence that better results and stability can be achieved by setting the context for a language model, in contrast to a simple prompt.</p>
<p>A <strong><em>Databricks</em></strong> study evaluated retrieval‐augmented generation (RAG) using long‑context models, such as GPT-4‑turbo (128k tokens) and Claude 2 (200k tokens). They found that providing more retrieved documents increases answer quality, especially on QA tasks across corporate and financial domains.</p>
<p><img src="https://www.databricks.com/sites/default/files/inline-images/image3_25.png?v=1723498239" alt="Line graph of long context performance of GPT, Claude, Llama, Mistral and DBRX models" /></p>
<p>However, models struggle if the context is too long (“lost in the middle”), so properly chunking and curating context is critical [1].</p>
<p><strong><em>Thomson Reuters</em></strong> benchmarked long‑context LLMs (up to 1 M tokens) vs retrieval-based. Their internal tests revealed that <strong>feeding full legal documents</strong> into the LLM <strong>outperformed</strong> RAG in most document-based reasoning tasks. LC models handled multi-hop reasoning more effectively than RAG approaches [2].</p>
<p><img src="https://www.thomsonreuters.com/en-us/posts/wp-content/uploads/sites/20/2025/04/Benchmarking.png" alt /></p>
<p>Additionally, research from <strong><em>Nvidia</em></strong> presented at ICLR 2025 showed:</p>
<ul>
<li><p><strong>Best results</strong> come from combining retrieval and long-context capabilities.</p>
</li>
<li><p>A LLaMA2‑70B with 32k context + retrieval <strong>matched or surpassed</strong> GPT‑3.5‑turbo‑16k and Davinci003.</p>
</li>
<li><p>The LC+RAG combo outperformed LC-only baselines, showing <strong>clear synergy [3]</strong>.</p>
</li>
</ul>
<h2 id="heading-final-takeaway">Final Takeaway</h2>
<p>With growing excitement around context setting (engineering), and quantitative proofs backing this excitement within the community, it proves that it isn’t hype but is empirically superior for domain-specific knowledge work.<br />Language Models with large context windows shine when their context window utilization is higher, with targeted retrieval, where dump=everything strategies falter. Thus, backing the sentiment that feeding the model the right context, even via retrieval pipelines or using very long context data inputs, yields measurable gains over prompt-only methods.</p>
<p>It is about building a system, not a prompt.</p>
<h2 id="heading-references">References</h2>
<ol>
<li><p>Leng, Q., Portes, J., Havens, S., Zaharia, M. and Carbin, M. (2024) ‘Long Context RAG Performance of LLMs’. <em>Databricks Blog</em>, 12 August. Available at: <a target="_blank" href="https://www.databricks.com/blog/long-context-rag-performance-llms">https://www.databricks.com/blog/long-context-rag-performance-llms</a> (Accessed: 12 July 2025).</p>
</li>
<li><p>Hron, J. (2025) ‘Legal AI Benchmarking: Evaluating Long Context Performance for LLMs’. <em>Thomson Reuters Innovation Blog</em>, 14 April. Available at: <a target="_blank" href="https://blogs.thomsonreuters.com/en-us/innovation/legal-ai-benchmarking-evaluating-long-context-performance-for-llms/">https://blogs.thomsonreuters.com/en-us/innovation/legal-ai-benchmarking-evaluating-long-context-performance-for-llms/</a> (Accessed: 12 July 2025).</p>
</li>
<li><p>Xu, P., Ping, W., Wu, X., McAfee, L., Zhu, C., Liu, Z., Subramanian, S., Bakhturina, E., Shoeybi, M. and Catanzaro, B. (2023) ‘Retrieval Meets Long Context Large Language Models’. <em>arXiv preprint</em> arXiv:2310.03025. Available at: <a target="_blank" href="https://arxiv.org/abs/2310.03025">https://arxiv.org/abs/2310.03025</a> (Accessed: 12 July 2025).</p>
</li>
</ol>
<h2 id="heading-join-the-jigsawstack-community">👥 Join the JigsawStack Community</h2>
<p>Have questions or want to show off what you’ve built? Join the JigsawStack developer community on <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">Discord</a> and <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">X/Twitter</a>. Let’s build something amazing together!</p>
]]></content:encoded></item><item><title><![CDATA[Beyond the Box: The Future of Object Detection]]></title><description><![CDATA[It’s 2025, and object detection is a solved problem. Or is it?
Object detection is like giving machines eyes. It’s the computer vision task of finding and localizing people, cars, cups, and other objects in images or videos. Unlike plain image classi...]]></description><link>https://blogdata.jigsawstack.com/object-detection</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/object-detection</guid><category><![CDATA[object detection ]]></category><category><![CDATA[Computer Vision]]></category><dc:creator><![CDATA[Harsha V Khurdula]]></dc:creator><pubDate>Wed, 09 Jul 2025 04:56:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752124980195/b90a61e9-fe22-4eef-91ba-b8b8e5c0436a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It’s 2025, and object detection is a solved problem. Or is it?</p>
<p>Object detection is like giving machines eyes. It’s the computer vision task of finding and localizing people, cars, cups, and other objects in images or videos. Unlike plain image classification (which simply states “this is a cat”), object detection draws little boxes around objects.</p>
<p>At JigsawStack, we’ve been developing the best small object detection and grounding model available, built to handle not just detection, but also spatial grounding, segmentation, and even UI element detection for computer use. One model. All the sauce.</p>
<p>In a world where browser agents now see, click, and reason, object detection is the backbone behind not just smart cameras, but UI automation, accessibility tech, and even creative tools. Computer use itself has exploded in the last three years, and under the hood, it’s all powered by the same core: visual grounding for object detection.</p>
<h2 id="heading-vision-language-models-in-detection">Vision-Language Models in Detection</h2>
<p>Historically, object detection has been specialized for specific industries, factories, construction sites, and even medical research. But at JigsawStack, we asked: Can we build a single, small, general-purpose model that handles everything from segmenting any real-world object to grounding UI buttons?</p>
<p>Early VLMs were used for classification or captioning, but now developers are adapting them to draw boxes. For example, CLIP-inspired methods (such as GLIP, Grounding DINO, and OWL-ViT) transform language supervision into object localization. These models let you pose queries like “Where is the apple?” and get back bounding boxes or masks. Grounding DINO and OWL-ViT are prime examples: they leverage text prompts to find novel objects at first attempt (zero-shot).</p>
<p>Here’s the state of object detection in 2025:</p>
<ul>
<li><p>You can now just type “find the red mug” and open-vocabulary detectors like Grounding DINO 1.5 will box it, even if “red mug” was never in the training set.</p>
</li>
<li><p>Meta’s shiny SAM 2.1 goes beyond boxes by carving out pixel-perfect cut-outs of any object with one click or prompt.</p>
</li>
<li><p>Chatty AIs such as GPT-4o can reply with bounding-box coordinates straight from plain-English questions.</p>
</li>
<li><p>Edge-tuned versions like Grounding DINO 1.5 Edge now run on phones and drones, so object detection works offline in real time.</p>
</li>
<li><p>Devs are chaining detectors to segmenters, think Grounded SAM 2 for one-click “find-and-mask” pipelines in production APIs.</p>
</li>
</ul>
<h2 id="heading-examples-what-can-our-model-do">Examples: What can our model do?</h2>
<ol>
<li><strong>Basic Object Detection:</strong> detects all visible objects.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751566727994/ba9edb20-8fb7-423a-af82-21f207085502.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Prompt-based Object Detection:</strong> Find anything you can describe—“find the red mug,” “show me cranes,” or even “utensils which can be used for frying”. Take a look at what our model detects for the <strong>prompt “four-legged fren &lt;3“</strong></li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751567401472/6851f9dd-d90e-4429-a262-c22245905e67.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><strong>Computer Use</strong>: understands and localizes user interface elements (e.g., buttons, sliders) for computer use. Following is a screenshot for detections for VScode with a chat input pop-up for local computer use.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751571623524/99beebe2-bbba-4055-b2eb-134292cc8dec.jpeg" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Browser Automation: Automate website navigation by GUI element grounding. With prompting e.g. “search field“, “give me the search button“, e.t.c.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751572405496/bb2348c7-8c02-47fa-a74d-1462ac7513cf.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-can-jigsawstack-see-an-image-differently">Can JigsawStack see an image differently?</h2>
<p>Totally! Because we built the model around phenomenon <strong>vision-language alignment</strong> instead of just cranking up the model size. Alignment means the pixel-side encoder and the text-side encoder learn to land in the <em>same</em> semantic space, so “oplayer” and the blob of pixels that <em>is</em> a player overlap on the inside. Do that well and you get:</p>
<ul>
<li><p><strong>Generalisation on tap</strong> – snap to the right region even if they never showed up in training.</p>
</li>
<li><p><strong>Promptable precision</strong> – ask for a <em>UI button</em>, a <em>road sign,</em> or a <em>corgi wearing goggles,</em> and the model adaptively tightens its boxes or masks.</p>
</li>
<li><p><strong>One-shot spatial reasoning</strong> – verbs like <em>left of</em>, <em>under, right,</em> or <em>next to that pillar</em> come baked in, no extra heads required.</p>
</li>
</ul>
<p>Small model, aligned brains, fresh set of eyes for every prompt. Let’s take a look to see if our model can point to the right objects ;)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751574284311/938ab07c-d81c-47c4-be14-d77e184ee90a.png" alt class="image--center mx-auto" /></p>
<p><em>Grid: Comparing Gemini-2.5-Pro (top-right), GPT-4.1 (bottom-left), &amp; JigsawStack-ObjectDetection (bottom-right) on Minecraft (GUI-grounding), with</em> <strong><em>prompt “player“</em></strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751574434839/84bf035e-8e65-4af9-9d1b-85d671008f08.png" alt class="image--center mx-auto" /></p>
<p><em>Grid: Comparing Gemini-2.5-Pro (top-right), GPT-4.1 (bottom-left), &amp; JigsawStack-Object Detection (bottom-right) for object_detection with</em> <strong><em>prompt “crane“</em></strong></p>
<p>Let’s take a look at <strong>segmentation</strong> ability as well!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751563490518/dd68976e-7d93-4133-90e8-2383ad5d2121.jpeg" alt class="image--center mx-auto" /></p>
<p><em>Image: JigsawStack-Object Detection for Segmentation, with</em> <strong><em>prompt “helmets“</em></strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751563590322/02629c3a-bc12-4161-bb9a-357d982d38e4.png" alt class="image--center mx-auto" /></p>
<p><em>Image: fal-ai/SAM-evf for Segmentation, with</em> <strong><em>prompt “helmets“</em></strong></p>
<h2 id="heading-quick-start-with-jigsawstack-object-detection">Quick Start with JigsawStack Object Detection</h2>
<p>Getting started with our object detection model is incredibly straightforward. Whether you're developing a web or mobile app, our <a target="_blank" href="https://jigsawstack.com/docs/quick-start/node/introduction">JavaScript</a> and <a target="_blank" href="https://jigsawstack.com/docs/quick-start/node/introduction">Python</a> SDKs make the process seamless. With just a few lines of code, you can tap into JigsawStack's capabilities to detect, segment, and annotate objects in images, adding a layer of intelligence and interactivity to your application. Ready to dive in? Let's explore how you can set up and make your first call using our SDKs</p>
<p><img src="https://blog.viajemos.com/wp-content/uploads/2024/06/Que-hacer-en-San-Francisco-3-dias-1-1.png" alt /></p>
<p><em>Image: Golden Gate Bridge in San Francisco</em></p>
<p>Let’s start by setting up JigsawStack SDK,</p>
<pre><code class="lang-javascript">npm install jigsawstack (or) pip install jigsawstack
</code></pre>
<p>Make your first call with ease through our JS and Python SDKs</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsaw = JigsawStack({ <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"your-api-key"</span> });

<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> jigsaw.vision.object_detection({
  <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://blog.viajemos.com/wp-content/uploads/2024/06/Que-hacer-en-San-Francisco-3-dias-1-1.png"</span>,
  <span class="hljs-string">"annotated_image"</span>: <span class="hljs-literal">true</span>,
})
</code></pre>
<p>Similarly, in Python, you can use the object detection service as follows:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> jigsawstack <span class="hljs-keyword">import</span> JigsawStack

jigsaw = JigsawStack(api_key=<span class="hljs-string">"your-api-key"</span>)

response = jigsaw.vision.object_detection({
  <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://blog.viajemos.com/wp-content/uploads/2024/06/Que-hacer-en-San-Francisco-3-dias-1-1.png"</span>,
  <span class="hljs-string">"annotated_image"</span>: true,
})
</code></pre>
<p>And voila!</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"annotated_image"</span>: <span class="hljs-string">"https://jigsawstack-temp.b1e91a466694ad4af04df5d05ca12d93.r2.cloudflarestorage.com/temp/62818eaf-0573-45c1-ac55-601302e567ab.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=7b9a19349842b7b1a9e4c2e19f05b232%2F20250624%2Fauto%2Fs3%2Faws4_request&amp;X-Amz-Date=20250624T172243Z&amp;X-Amz-Expires=604800&amp;X-Amz-Signature=8d5bdade297836deada8c33d81dd5d638c89a3a83014ffc18dc834c6939f4938&amp;X-Amz-SignedHeaders=host&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject"</span>,
    <span class="hljs-attr">"gui_elements"</span>: [],
    <span class="hljs-attr">"objects"</span>: [
        {
            <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"top_left"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">0</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">0</span>
                },
                <span class="hljs-attr">"top_right"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">1900</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">0</span>
                },
                <span class="hljs-attr">"bottom_left"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">0</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">728</span>
                },
                <span class="hljs-attr">"bottom_right"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">1900</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">728</span>
                },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">1900</span>,
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">728</span>
            },
            <span class="hljs-attr">"label"</span>: <span class="hljs-string">"Sky"</span>,
            <span class="hljs-attr">"mask"</span>: <span class="hljs-string">"https://jigsawstack-temp.b1e91a466694ad4af04df5d05ca12d93.r2.cloudflarestorage.com/temp/37a2ad76-ab17-4ffc-98d9-58aad848d162.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=7b9a19349842b7b1a9e4c2e19f05b232%2F20250624%2Fauto%2Fs3%2Faws4_request&amp;X-Amz-Date=20250624T172244Z&amp;X-Amz-Expires=604800&amp;X-Amz-Signature=d1da3b9fb1cd46cac0d5aa9d8178f970568a016abd6864c5cfa18257f3e4ba32&amp;X-Amz-SignedHeaders=host&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject"</span>
        },
        {
            <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"top_left"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">411</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">143</span>
                },
                <span class="hljs-attr">"top_right"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">1900</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">143</span>
                },
                <span class="hljs-attr">"bottom_left"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">411</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">1066</span>
                },
                <span class="hljs-attr">"bottom_right"</span>: {
                    <span class="hljs-attr">"x"</span>: <span class="hljs-number">1900</span>,
                    <span class="hljs-attr">"y"</span>: <span class="hljs-number">1066</span>
                },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">1489</span>,
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">923</span>
            },
            <span class="hljs-attr">"label"</span>: <span class="hljs-string">"Golden Gate Bridge"</span>,
            <span class="hljs-attr">"mask"</span>: <span class="hljs-string">"https://jigsawstack-temp.b1e91a466694ad4af04df5d05ca12d93.r2.cloudflarestorage.com/temp/dcc4363c-4239-47ab-a58c-48ad036deb43.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=7b9a19349842b7b1a9e4c2e19f05b232%2F20250624%2Fauto%2Fs3%2Faws4_request&amp;X-Amz-Date=20250624T172244Z&amp;X-Amz-Expires=604800&amp;X-Amz-Signature=1b7587e4b39ec4640895dfffc54fb4ecea8c738ff19f6150c44c38bebaa35bd0&amp;X-Amz-SignedHeaders=host&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject"</span>
        },
        ...
    ],
    <span class="hljs-attr">"_usage"</span>: {
        <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">36</span>,
        <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">3185</span>,
        <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">23758</span>,
        <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">26979</span>
    }
}
</code></pre>
<p>Here's the annotated image showcasing our model's ability to detect, segment, label, and annotate.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751562765898/eaf03422-273f-43d0-84db-18648a9b5bca.jpeg" alt class="image--center mx-auto" /></p>
<p><em>Image**: Result from JigsawStack-Object Detection</em></p>
<h3 id="heading-play-with-jigsawstack-object-detection">Play With JigsawStack Object Detection</h3>
<p>Users can also pass in natural language prompts to ground objects based on the intent &amp; visual context in the scene.</p>
<p>Consider the following example:</p>
<p><a target="_blank" href="https://images.unsplash.com/photo-1607448421773-f74d4b9b5919?q=80&amp;w=1754&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"><img src="https://images.unsplash.com/photo-1607448421773-f74d4b9b5919?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="white ceramic bowl on brown wooden table" /></a></p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> jigsawstack <span class="hljs-keyword">import</span> JigsawStack

jigsaw = JigsawStack(api_key=<span class="hljs-string">"your-api-key"</span>)

response = jigsaw.vision.object_detection({  
   <span class="hljs-string">"prompts"</span>: [<span class="hljs-string">"Objects that can be used to illuminate the room."</span>],
   <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://images.unsplash.com/photo-1607448421773-f74d4b9b5919?q=80&amp;w=1754&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"</span>,
   <span class="hljs-string">"annotated_image"</span>: true
})
</code></pre>
<p>Our model detects:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751562889611/3c733d53-1c1e-4a48-be8c-e19bd1202045.jpeg" alt class="image--center mx-auto" /></p>
<p><em>Image**:</em> Result from JigsawStack-Object Detection for user query <em>“Objects that can be used to illuminate the room.“</em></p>
<p>Our approach to generalizing object detection and segmentation is transforming the way developers integrate visual intelligence into their applications. With our user-friendly SDKs and powerful vision-language alignment, you can effortlessly enhance your projects with cutting-edge technology. Whether you're working on a web or mobile app, JigsawStack provides the tools you need to bring your ideas to life. And we’re excited to see devs build with our smoll models capable of big impact!</p>
<h2 id="heading-join-the-jigsawstack-community">👥 Join the JigsawStack Community</h2>
<p>Have questions or want to show off what you’ve built? Join the JigsawStack developer community on <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">Discord</a> and <a target="_blank" href="https://discord.com/invite/dj8fMBpnqd">X/Twitter</a>. Let’s build something amazing together!</p>
]]></content:encoded></item><item><title><![CDATA[Google Translate Widget Revived]]></title><description><![CDATA[For a long time, the Google Translate widget has been the default way to quickly add translation capabilities to a site. It helped developers, users, and businesses make their content accessible to people all over the world. And honestly, it worked p...]]></description><link>https://blogdata.jigsawstack.com/google-translate-widget-revived</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/google-translate-widget-revived</guid><category><![CDATA[i18n]]></category><category><![CDATA[translation]]></category><category><![CDATA[google translate]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Vineet Agarwal]]></dc:creator><pubDate>Thu, 12 Jun 2025 20:08:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1749679538239/3b730cf8-f25f-46fd-8fb6-2e83d279ab1d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For a long time, the Google Translate widget has been the default way to quickly add translation capabilities to a site. It helped developers, users, and businesses make their content accessible to people all over the world. And honestly, it worked pretty well.</p>
<p>But as the web has changed, so have expectations, now we want translations that are more accurate, understands contexts of what’s trying to be said, easier to customize/control, and give developers more control.</p>
<p>Unfortunately the Google Translate Widget hasn’t been maintained for a long time and is now deprecated.</p>
<h2 id="heading-what-made-google-translate-widget-so-great">🌐 What made Google Translate Widget so Great</h2>
<p>Google Translate widget made it super easy to translate websites:</p>
<ul>
<li><p>It supported 100+ languages out of the box</p>
</li>
<li><p>Setup was simple, just drop in a script and you’re done</p>
</li>
<li><p>It could automatically detect the user’s browser language</p>
</li>
<li><p>You didn’t need to build any backend logic to make it work</p>
</li>
</ul>
<p>We took all the great things of Google Translate Widget and added support for dynamic frontend sites built on frameworks like React/NextJS, improve the UI, adding more languages and made it even easier to use.</p>
<h2 id="heading-introducing-the-jigsawstack-translation-widget">🚀 Introducing the JigsawStack Translation Widget</h2>
<p>It’s built for modern websites and developers who care about speed, accuracy, and flexibility. Here’s what makes it stand out:</p>
<ul>
<li><p>✅ Add it to any site with just one line.</p>
</li>
<li><p>📦 NPM package support for React, Next.js, and more.</p>
</li>
<li><p>⚡ Lightning-fast with smart caching built in.</p>
</li>
<li><p>🎨 Fully customizable UI that blends right into your design.</p>
</li>
<li><p>🔄 Handles dynamic websites and content updates seamlessly.</p>
</li>
<li><p>🧠 Built-in APIs so you can trigger translations manually when needed.</p>
</li>
<li><p>🧩 Works with everything from plain HTML pages to complex apps.</p>
</li>
</ul>
<p>👉 Check out the live demo - <a target="_blank" href="https://translation-widget-demo.vercel.app/">https://translation-widget-demo.vercel.app</a></p>
<p>👉 Check out the github repository - <a target="_blank" href="https://github.com/jigsawStack/translation-widget/">https://github.com/jigsawStack/translation-widget</a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1749671501801/64ca827c-456c-430a-920b-6ee4d600bb1d.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-how-to-add-it-to-your-website">🛠️ How to Add It to Your Website</h2>
<p>Adding the jigsaw translation widget is simple and easy, whether you are using plain HTML or Modern Frameworks like react or Next.js, you're covered.</p>
<h3 id="heading-script-integration">🔧 Script Integration</h3>
<p>If you’re working with a basic HTML site or just want to get started quickly, you can use the one-line script method:</p>
<ol>
<li><p>Add the Widget Script Place this just before closing the tag of your HTML file</p>
</li>
<li><p>Initialize the Widget Immediately after the script, add this initialization code</p>
<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://unpkg.com/translation-widget@latest/dist/index.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
 <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"module"</span>&gt;</span><span class="javascript">
 <span class="hljs-comment">// Replace "YOUR_PUBLIC_KEY_HERE" with your public API key from JigsawStack's dashboard.</span>
   TranslationWidget(<span class="hljs-string">'YOUR_PUBLIC_KEY_HERE'</span>, {
     <span class="hljs-attr">pageLanguage</span>: <span class="hljs-string">'en'</span>,         <span class="hljs-comment">// Optional</span>
     <span class="hljs-attr">position</span>: <span class="hljs-string">'top-right'</span>,      <span class="hljs-comment">// Optional</span>
     <span class="hljs-attr">autoDetectLanguage</span>: <span class="hljs-literal">false</span>,  <span class="hljs-comment">// Optional</span>
     <span class="hljs-attr">showUI</span>: <span class="hljs-literal">true</span>,               <span class="hljs-comment">// Optional</span>
     <span class="hljs-attr">theme</span>: {
       <span class="hljs-attr">baseColor</span>: <span class="hljs-string">''</span>,     <span class="hljs-comment">// Optional</span>
       <span class="hljs-attr">textColor</span>: <span class="hljs-string">''</span>,     <span class="hljs-comment">// Optional</span>
     }
   });
 </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></pre>
</li>
</ol>
<h3 id="heading-nextjs-react-integration-npm-way">⚛️ Next.js / React Integration (NPM Way)</h3>
<p>If you’re using a modern frontend stack, install the widget using npm:</p>
<pre><code class="lang-bash">npm install translation-widget
or
yarn add translation-widget
or
pnpm add translation-widget
</code></pre>
<h3 id="heading-usage-with-react-nextjs">📦 Usage with React / Next.js</h3>
<ol>
<li><p>Create a Translation Component Create a React component to initialize the widget:</p>
<pre><code class="lang-javascript"> <span class="hljs-string">"use client"</span>;
 <span class="hljs-keyword">import</span> { useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;
 <span class="hljs-keyword">import</span> TranslationWidget <span class="hljs-keyword">from</span> <span class="hljs-string">"translation-widget"</span>;

 <span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Translation</span>(<span class="hljs-params"></span>) </span>{
   useEffect(<span class="hljs-function">() =&gt;</span> {
     <span class="hljs-comment">// Replace "YOUR_PUBLIC_KEY_HERE" with your public API key from JigsawStack's dashboard.</span>
     TranslationWidget(<span class="hljs-string">"YOUR_PUBLIC_KEY_HERE"</span>, {
       <span class="hljs-attr">showUI</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">pageLanguage</span>: <span class="hljs-string">'en'</span>,
       <span class="hljs-attr">position</span>: <span class="hljs-string">"top-right"</span>,
       <span class="hljs-attr">autoDetectLanguage</span>: <span class="hljs-literal">false</span>,
     });
   }, []);

   <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
 }
</code></pre>
</li>
<li><p>Use it in your layout: import and include the component in your layout file or <code>app.tsx</code>, depending on the framework you are using.</p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">import</span> Translation <span class="hljs-keyword">from</span> <span class="hljs-string">'./components/Translation'</span>;

 <span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Layout</span>(<span class="hljs-params">{ children }</span>) </span>{
   <span class="hljs-keyword">return</span> (
     <span class="xml"><span class="hljs-tag">&lt;&gt;</span>
       {children}
       <span class="hljs-tag">&lt;<span class="hljs-name">Translation</span> /&gt;</span>
     <span class="hljs-tag">&lt;/&gt;</span></span>
   );
 }
</code></pre>
</li>
</ol>
<h2 id="heading-translating-amazoncom-with-jigsawstack-translate-widget">👀 Translating Amazon.com with JigsawStack Translate Widget</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=wpFqFJykk-I">https://www.youtube.com/watch?v=wpFqFJykk-I</a></div>
<p> </p>
<h2 id="heading-google-translate-widget-vs-jigsawstack-translate-widget">🔁 Google Translate Widget vs JigsawStack Translate Widget</h2>
<p>We took it as a challenge to do better, so here’s how we compare to the deprecated Google Translation Widget.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Feature / Capability</td><td>Google Translate Widget</td><td>JigsawStack Translate Widget</td></tr>
</thead>
<tbody>
<tr>
<td>💬 <strong>Translation Accuracy</strong></td><td>Literal and context-blind; often misinterprets UI labels or technical phrases ❌</td><td>Context-aware translations trained for UI, docs, and product content ✅</td></tr>
<tr>
<td>⚡ <strong>Performance &amp; Speed</strong></td><td>Relies on in-memory storage, which increases overhead and lacks persistence. ❌</td><td>Lightweight, smart caching, Persistence and blazing-fast response times ✅</td></tr>
<tr>
<td>🌐 <strong>Language Detection</strong></td><td>Detects browser language but doesn’t support URL-based switching ⚠️</td><td>Automatically detects language and supports URL-driven translations ✅</td></tr>
<tr>
<td>🎨 <strong>UI Customization</strong></td><td>No styling control; hardcoded default UI only ❌</td><td>Fully customizable widget: placement, colors, and CSS overrides ✅</td></tr>
<tr>
<td>🧩 <strong>Developer Integration</strong></td><td>Script-only, no modular React or Next.js integration ❌</td><td>Works with plain HTML, React, and both Pages/App Router in Next.js, has npm package support also. ✅</td></tr>
<tr>
<td>🎛️ <strong>Programmatic Control</strong></td><td>No programmatic access to trigger translations ❌</td><td>Offers <code>window.translate()</code> to control behavior programmatically ✅</td></tr>
<tr>
<td>📱 <strong>Responsive Design</strong></td><td>May break layouts on long translations or mobile ❌</td><td>Automatically scales text to prevent overflow and maintain accessibility ✅</td></tr>
<tr>
<td>🔁 <strong>Dynamic Content Handling</strong></td><td>Doesn’t translate injected or updated content after page load ❌</td><td>Handles dynamic and client-rendered content with ease ✅</td></tr>
</tbody>
</table>
</div><h2 id="heading-want-more-control-use-the-translation-api-directly">🧠 Want More Control? Use the Translation API Directly</h2>
<p>If you’d want to handle translations yourself, for example to preprocess content on the server or integrate with your backend logic, you can use the <strong>JigsawStack Translation API</strong> directly.</p>
<p>This gives you:</p>
<ul>
<li><p>High quality translation with context understanding</p>
</li>
<li><p>Full control over the translation lifecycle</p>
</li>
<li><p>Ability to translate content before rendering</p>
</li>
<li><p>Integration with CMS, database, or other services</p>
</li>
</ul>
<p>👉 Check out the official API docs and dashboard here:<br /><a target="_blank" href="https://jigsawstack.com/translation"><strong>JigsawStack Translation API →</strong></a></p>
<h2 id="heading-final-thoughts">🚀 Final Thoughts</h2>
<p>Google Translate Widget played a huge role in making the web more accessible across languages, but as websites evolved, so did the need for smarter, faster, and more customizable translation tools.</p>
<p>The <strong>JigsawStack Translation Widget</strong> brings translation into the modern era:<br />It’s lightweight, context-aware, developer-friendly, and built to handle today’s dynamic frontends.</p>
<p>Whether you're building a landing page, a global product, or a multilingual documentation site this widget gives you full control, without the bloat.</p>
<p><strong>Ready to upgrade your translation experience?</strong><br />👉 Try the <a target="_blank" href="https://translation-widget-demo.vercel.app/">live demo</a> or check out the <a target="_blank" href="https://github.com/JigsawStack/translation-widget">GitHub repo</a> to get started.</p>
]]></content:encoded></item><item><title><![CDATA[Introducing JigsawStack Deep Research]]></title><description><![CDATA[What is Deep Research?
JigsawStack’s Deep Research is an open source framework performing for multi-hop, AI-assisted research. The framework orchestrates large language models (LLMs), recursive web searches, and structured reasoning to generate compr...]]></description><link>https://blogdata.jigsawstack.com/introducing-jigsawstack-deep-research</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/introducing-jigsawstack-deep-research</guid><category><![CDATA[Deep research]]></category><category><![CDATA[open-deep-research]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[AI]]></category><category><![CDATA[research]]></category><dc:creator><![CDATA[Win Cheng]]></dc:creator><pubDate>Thu, 29 May 2025 23:55:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748475567444/8acb0a25-163a-4763-8d80-a85a559d784f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-what-is-deep-research">What is Deep Research?</h2>
<p><strong>JigsawStack’s Deep Research</strong> is an open source framework performing for multi-hop, AI-assisted research. The framework orchestrates large language models (LLMs), recursive web searches, and structured reasoning to generate comprehensive, evidence-backed reports via our deep-research SDK. Designed for developers, researchers, and AI agents. We aim to automate the kind of deep inquiry that typically takes hours or even days.</p>
<p>Get a quick start by trying out our SDK here: <a target="_blank" href="https://github.com/JigsawStack/deep-research">https://github.com/JigsawStack/deep-research</a></p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { createDeepResearch } <span class="hljs-keyword">from</span> <span class="hljs-string">"deep-research"</span>;

<span class="hljs-keyword">const</span> deepResearch = createDeepResearch({
  OPENAI_API_KEY: process.env.OPENAI_API_KEY,
  GEMINI_API_KEY: process.env.GEMINI_API_KEY,
  DEEPINFRA_API_KEY: process.env.DEEPINFRA_API_KEY,
  JIGSAW_API_KEY: process.env.JIGSAW_API_KEY,
});

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> deepResearch.generate(<span class="hljs-string">"What are the recent developments in quantum computing?"</span>);

<span class="hljs-built_in">console</span>.log(result.data.text);           <span class="hljs-comment">// Full research report</span>
<span class="hljs-built_in">console</span>.log(result.data.bibliography);   <span class="hljs-comment">// Auto-generated references</span>
</code></pre>
<h2 id="heading-core-concepts">Core Concepts</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Concept</strong></td><td><strong>Description</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Deep Thinking</strong></td><td>The system breaks down a question into logical parts, reasons through them independently, and synthesizes an answer.</td></tr>
<tr>
<td><strong>Deep Research</strong></td><td>The system performs multi-hop, focused web searches, compares the findings, and composes an evidence-backed answer</td></tr>
</tbody>
</table>
</div><h2 id="heading-how-jigsawstack-implements-deep-research">How JigsawStack Implements Deep Research</h2>
<p>Deep Research performs the following:</p>
<ol>
<li><p><strong>Research Plan</strong>, decomposing complex query into logical subtopics and objectives.</p>
</li>
<li><p><strong>AI Web Searches via JigsawStack API</strong>, generating context and extracting key points from the web</p>
</li>
<li><p><strong>Multi-Model Reasoning and Decision Making</strong>, the framework adapts its strategy based on findings, filling knowledge gaps as needed</p>
</li>
<li><p><strong>Report Generation</strong>, including structured content and source attribution for traceability</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748474234103/62296313-aaf4-4e3f-8cfd-122f875ce5a7.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-fully-customizable">Fully Customizable</h2>
<p>One of the core strengths of JigsawStack’s Deep Research is how <strong>deeply customizable it is.</strong></p>
<ul>
<li><p><strong>Precise Control Over Depth &amp; Breadth</strong></p>
</li>
<li><p><strong>Report Length Targeting -</strong> Configure your desired report length with soft and hard output limits</p>
</li>
<li><p><strong>Developer-Friendly Debugging</strong> - Enable detailed logging for developers</p>
</li>
<li><p><strong>Model Modularity</strong> - Mix and match AI Providers based on their strengths</p>
</li>
</ul>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> deepResearch = createDeepResearch({
  report: {
    targetOutputTokens: <span class="hljs-number">10000</span>,  <span class="hljs-comment">// Target length for the generated report</span>
    maxOutputTokens: <span class="hljs-number">30000</span>,     <span class="hljs-comment">// Hard ceiling for total output</span>
  },
  depth: { maxDepth: <span class="hljs-number">4</span> },       <span class="hljs-comment">// How many recursive research cycles to run</span>
  breadth: { maxBreadth: <span class="hljs-number">3</span> },   <span class="hljs-comment">// How many subqueries to generate per level</span>
  models: {
    <span class="hljs-keyword">default</span>: openaiModel,       <span class="hljs-comment">// Main LLM for prompt interpretation</span>
    reasoning: deepseekModel,   <span class="hljs-comment">// Specialized model for analyzing research findings</span>
    output: geminiModel,        <span class="hljs-comment">// Model used for final report generation</span>
  },
  logging: { enabled: <span class="hljs-literal">true</span> },   <span class="hljs-comment">// Enable verbose logging for debugging</span>
});
</code></pre>
<h2 id="heading-current-market-and-the-challenges-of-deep-research">Current Market and the Challenges of Deep Research</h2>
<p>While many are pushing boundaries, current implementations face a few common challenges:</p>
<ul>
<li><p><strong>Citation Accuracy &amp; Transparency</strong></p>
</li>
<li><p><strong>Limited Customization &amp; Developer Control</strong></p>
</li>
<li><p><strong>Closed-Source &amp; Opaque Systems</strong></p>
</li>
<li><p><strong>Limited Integration Options</strong></p>
</li>
</ul>
<p>We aim to address these pain points, making it a research platform you can build on.</p>
<h2 id="heading-comparisons">Comparisons</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>JigsawStack</strong></td><td><strong>OpenAI</strong></td><td><strong>Perplexity</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Citation Transparency</td><td>✅ Strong. Ensures source traceability with comprehensive bibliographies.</td><td>⚠️ Partial. While citations are provided, some users report occasional inaccuracies or reliance on less authoritative sources.</td><td>✅ Strong. Curates a list of relevant URLs with titles and descriptions for each research task.</td></tr>
<tr>
<td>Customization &amp; Control</td><td>✅ Full. Allows developers to configure every stage, including depth, models, and formatting.</td><td>❌ Limited. Users have minimal control over the research process and output formatting.</td><td>⚠️ Limited. Offers some customization, such as model selection, but lacks deep configurability.</td></tr>
<tr>
<td>Open Source</td><td>✅ Yes. Fully open-source.</td><td>❌ No.</td><td>❌ No.</td></tr>
<tr>
<td>API / SDK Access</td><td>✅ Yes. accessible SDK for developers to plug and play into their workflow.</td><td>⚠️ Internal use only</td><td>⚠️ Limited / closed</td></tr>
<tr>
<td>Limitations</td><td>Slower runtime by design; limited to public content only.</td><td>May produce inconsistent information and occasionally cite less authoritative sources.</td><td>Lacks creative flexibility and may provide less engaging conversational responses.</td></tr>
</tbody>
</table>
</div><h2 id="heading-real-world-examples">Real World Examples</h2>
<h3 id="heading-write-a-research-paper-talking-about-diffusion-for-llms-and-how-it-might-affect-the-future-in-technology">Write a research paper talking about diffusion for LLMs and how it might affect the future in technology?</h3>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> query = <span class="hljs-string">"Write a research paper talking about diffusion for LLMs and how it might affect the future in technology?"</span>;

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> deepResearch.generate(query);

<span class="hljs-built_in">console</span>.log(result.data.text) <span class="hljs-comment">// report</span>
<span class="hljs-built_in">console</span>.log(result.data.bibliography) <span class="hljs-comment">// references</span>

<span class="hljs-keyword">const</span> singleReport = result.data.text + <span class="hljs-string">"\n\n"</span> + result.data.bibliography
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748460611833/74a9e8f7-6255-4a0f-b2b9-9127e873e5fc.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-what-is-the-largest-order-of-a-non-cyclic-torsion-subgroup-of-an-elliptic-curve-over-mathbbqsqrt-3">What is the largest order of a non-cyclic torsion subgroup of an elliptic curve over <code>\mathbb{Q}(\sqrt{-3})\)</code></h3>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> query = <span class="hljs-string">"What is the largest order of a non-cyclic torsion subgroup of an elliptic curve over \mathbb{Q}(\sqrt{-3})"</span>;

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> deepResearch.generate(query);

<span class="hljs-built_in">console</span>.log(result.data.text) <span class="hljs-comment">// report</span>
<span class="hljs-built_in">console</span>.log(result.data.bibliography) <span class="hljs-comment">// references</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1748461313544/9e061c0b-797b-49ee-a3f4-a29a0da4f03d.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-improvements-to-jigsawstacks-deep-research">Improvements to JigsawStack’s Deep Research</h2>
<p>While Deep Research provides powerful automation for complex inquiry, it’s not without its trade-offs and design challenges:</p>
<ul>
<li><p><strong>Runtime Trade-offs</strong> - deep research deliberately shifts away from the fast-but-shallow answers towards deep and completed ones.</p>
</li>
<li><p><strong>Exclusive to Public Information</strong> - we are unable to access paywalled research papers, private documents, or internal knowledge bases</p>
</li>
<li><p><strong>Sources Discrepancy</strong> - Some sources provided are not quoted on the report. Even if a URL isn’t directly cited in the final report, it may still play a critical role in shaping the system’s reasoning.</p>
</li>
<li><p><strong>Evolving output format</strong> - The first stage of Deep Research prioritizes correctness, structure, and citations. But the ideal report format — tone, length, granularity — will vary by user and use case. We’re actively evolving the output schema based on real-world feedback to support!</p>
</li>
</ul>
<h2 id="heading-next-steps">Next Steps</h2>
<p>As we continue to evolve Deep Research, the next major milestone is full <strong>integration into JigsawStack’s web search API</strong>.</p>
<p>Currently, Deep Research uses JigsawStack’s search API for retrieving public content. Going forward, we’re expanding this connection to make the research experience even more seamless and intelligent.</p>
]]></content:encoded></item><item><title><![CDATA[JigsawStack vs Firecrawl - AI Web Scraping]]></title><description><![CDATA[One of the most requested comparisons has been putting JigsawStack AI Web Scraper against Firecrawl.
Before we jump into the tests we ran, we need to understand what makes a good web scraper or even what’s web scraping in the first place.
Traditional...]]></description><link>https://blogdata.jigsawstack.com/jigsawstack-vs-firecrawl-ai-web-scraping</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/jigsawstack-vs-firecrawl-ai-web-scraping</guid><category><![CDATA[llm scraping]]></category><category><![CDATA[firecrawl]]></category><category><![CDATA[firecrawl vs jigsawstack]]></category><category><![CDATA[web scraping]]></category><category><![CDATA[ai web scraping]]></category><category><![CDATA[data extraction]]></category><category><![CDATA[puppeteer]]></category><category><![CDATA[playwright]]></category><dc:creator><![CDATA[Yoeven D Khemlani]]></dc:creator><pubDate>Mon, 26 May 2025 22:41:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748140922657/97640164-2188-46a1-af36-e934e2928225.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the most requested comparisons has been putting <a target="_blank" href="https://jigsawstack.com/ai-web-scraper">JigsawStack AI Web Scraper</a> against <a target="_blank" href="https://www.firecrawl.dev/">Firecrawl</a>.</p>
<p>Before we jump into the tests we ran, we need to understand what makes a good web scraper or even what’s web scraping in the first place.</p>
<p>Traditionally, developers wrote large, complex codebases on top of heavy infrastructure to load and extract content from websites. They used browser engines like Puppeteer, Playwright, or Selenium, followed by CSS selectors and various techniques to get the data they needed.</p>
<p>Today, we have AI scrapers that do the same thing in seconds, fully managed and automated through simple prompting.</p>
<h2 id="heading-so-what-makes-a-good-ai-web-scraper">So what makes a good AI Web scraper?</h2>
<ul>
<li><p>Extracts data with the accuracy of a developer-written script</p>
</li>
<li><p>Automatically handles errors, browser crashes, popups, and other blockers</p>
</li>
<li><p>Auto unblocker for websites protected by Cloudflare, Captcha, and more</p>
</li>
<li><p>Fully managed scaling from 1 to 10,000 requests and back in seconds</p>
</li>
<li><p>Smart actions such as auto-scrolling to load and extract dynamic content</p>
</li>
<li><p>Rotates IPs intelligently to avoid being blocked or flagged as a bot</p>
</li>
<li><p>Gives developers control with support for custom CSS selectors</p>
</li>
</ul>
<h2 id="heading-summary-comparison">Summary Comparison</h2>
<h3 id="heading-firecrawl-vs-jigsawstack-ai-scraper">Firecrawl vs JigsawStack AI Scraper</h3>
<p>◐ = partial ❌ = inaccurate/fails ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature / Goal</strong></td><td><strong>Firecrawl</strong></td><td><strong>JigsawStack AI Scraper</strong></td></tr>
</thead>
<tbody>
<tr>
<td>💽 <strong>Accurate data extractions</strong></td><td>Extracted data correctly from 1 out of 6 websites ❌</td><td>Extracted data from all tested sites accurately, following the expected schema ✅</td></tr>
<tr>
<td>❤️‍🩹 <strong>Automatic error handling</strong></td><td>Frequently threw errors or returned false positives when encountering blocked sites ❌</td><td>Automatically handles errors, retries when needed, and unblocks sites to extract complete data ✅</td></tr>
<tr>
<td>🔁 <strong>Auto unblocker</strong></td><td>Blocked on all protected sites, even with proxy and stealth mode enabled ❌</td><td>Successfully unblocked every site tested, including complex ones like LinkedIn and Reddit ✅</td></tr>
<tr>
<td>♾️ <strong>Fully managed scale</strong></td><td>Limited to 5 concurrent browsers on Hobby plan ($16/month) and 50 on Standard plan ($83/month) ❌</td><td>Supports over 10,000 concurrent browser sessions. Fully managed with no limits and usage-based pricing ✅</td></tr>
<tr>
<td>🧠 <strong>Smart actions (scrolling, etc.)</strong></td><td>Does not automatically scroll to load dynamic content. Only partial page data is scraped ❌</td><td>Automatically scrolls, detects dynamic content, and extracts all relevant values without user input ✅</td></tr>
<tr>
<td>🌐 <strong>Proxies and IP rotation</strong></td><td>Proxy feature failed to prevent blocking. Still flagged by bot detectors even in stealth mode ❌</td><td>Rarely needs proxies. When needed, it uses a built-in rotating proxy system that bypasses even Cloudflare bot checks. ✅</td></tr>
<tr>
<td>🧑‍💻 <strong>Developer control</strong></td><td>No support for advanced configuration such as custom CSS selectors, browser dimensions, or headers ❌</td><td>Offers full developer control, including custom CSS selectors, browser size, custom cookies, proxy support, and Puppeteer-level configuration options ✅</td></tr>
</tbody>
</table>
</div><h2 id="heading-full-comparisons">Full Comparisons</h2>
<h3 id="heading-something-simple">Something simple</h3>
<p>Site: <a target="_blank" href="https://news.ycombinator.com/">https://news.ycombinator.com</a><br />Prompt: <code>["post_titles", "post_points", "post_username"]</code></p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"metadata"</span>: {
      <span class="hljs-attr">"viewport"</span>: <span class="hljs-string">"width=device-width, initial-scale=1.0"</span>,
      <span class="hljs-attr">"favicon"</span>: <span class="hljs-string">"https://news.ycombinator.com/y18.svg"</span>,
      <span class="hljs-attr">"title"</span>: <span class="hljs-string">"Hacker News"</span>,
      <span class="hljs-attr">"referrer"</span>: <span class="hljs-string">"origin"</span>,
      <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en"</span>,
      <span class="hljs-attr">"scrapeId"</span>: <span class="hljs-string">"686271b5-f619-417b-800a-f57b95236a4f"</span>,
      <span class="hljs-attr">"sourceURL"</span>: <span class="hljs-string">"https://news.ycombinator.com/"</span>,
      <span class="hljs-attr">"url"</span>: <span class="hljs-string">"https://news.ycombinator.com/"</span>,
      <span class="hljs-attr">"statusCode"</span>: <span class="hljs-number">200</span>,
      <span class="hljs-attr">"proxyUsed"</span>: <span class="hljs-string">"basic"</span>
    },
    <span class="hljs-attr">"json"</span>: {
      <span class="hljs-attr">"post_titles"</span>: [
        <span class="hljs-string">"Reinvent the Wheel"</span>,
        <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
        <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
        <span class="hljs-string">"Why old games never die, but new ones do"</span>,
        <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
        <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
        <span class="hljs-string">"Good Writing"</span>,
        <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
        <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
        <span class="hljs-string">"Please Fund More Science (2020)"</span>,
        <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
        <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
        <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
        <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
        <span class="hljs-string">"Postgres IDE in VS Code"</span>,
        <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
        <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
        <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
        <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
        <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
        <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
        <span class="hljs-string">"The Last Nomads"</span>,
        <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
        <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
        <span class="hljs-string">"Find Your People"</span>,
        <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
        <span class="hljs-string">"Root for your friends"</span>,
        <span class="hljs-string">"Why Algebraic Effects?"</span>,
        <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
        <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>
      ],
      <span class="hljs-attr">"post_points"</span>: [
        <span class="hljs-string">"112"</span>,
        <span class="hljs-string">"104"</span>,
        <span class="hljs-string">"264"</span>,
        <span class="hljs-string">"26"</span>,
        <span class="hljs-string">"9"</span>,
        <span class="hljs-string">"69"</span>,
        <span class="hljs-string">"118"</span>,
        <span class="hljs-string">"22"</span>,
        <span class="hljs-string">"262"</span>,
        <span class="hljs-string">"51"</span>,
        <span class="hljs-string">"159"</span>,
        <span class="hljs-string">"134"</span>,
        <span class="hljs-string">"26"</span>,
        <span class="hljs-string">"88"</span>,
        <span class="hljs-string">"969"</span>,
        <span class="hljs-string">"18"</span>,
        <span class="hljs-string">"0"</span>,
        <span class="hljs-string">"5"</span>,
        <span class="hljs-string">"58"</span>,
        <span class="hljs-string">"101"</span>,
        <span class="hljs-string">"17"</span>,
        <span class="hljs-string">"5"</span>,
        <span class="hljs-string">"57"</span>,
        <span class="hljs-string">"81"</span>,
        <span class="hljs-string">"702"</span>,
        <span class="hljs-string">"103"</span>,
        <span class="hljs-string">"364"</span>,
        <span class="hljs-string">"267"</span>,
        <span class="hljs-string">"20"</span>,
        <span class="hljs-string">"12"</span>
      ],
      <span class="hljs-attr">"post_username"</span>: [
        <span class="hljs-string">"zdw"</span>,
        <span class="hljs-string">"todsacerdoti"</span>,
        <span class="hljs-string">"zielmicha"</span>,
        <span class="hljs-string">"airhangerf15"</span>,
        <span class="hljs-string">"zdw"</span>,
        <span class="hljs-string">"DavidSJ"</span>,
        <span class="hljs-string">"oli5679"</span>,
        <span class="hljs-string">"ecliptik"</span>,
        <span class="hljs-string">"sephalon"</span>,
        <span class="hljs-string">"ssuds"</span>,
        <span class="hljs-string">"DamonHD"</span>,
        <span class="hljs-string">"perihelions"</span>,
        <span class="hljs-string">"gnabgib"</span>,
        <span class="hljs-string">"ayoisaiah"</span>,
        <span class="hljs-string">"Dowwie"</span>,
        <span class="hljs-string">"mdhb"</span>,
        <span class="hljs-string">"null"</span>,
        <span class="hljs-string">"atomlib"</span>,
        <span class="hljs-string">"pmbanugo"</span>,
        <span class="hljs-string">"c-oreills"</span>,
        <span class="hljs-string">"astroimagery"</span>,
        <span class="hljs-string">"Thevet"</span>,
        <span class="hljs-string">"melvinzammit"</span>,
        <span class="hljs-string">"pseudolus"</span>,
        <span class="hljs-string">"jl"</span>,
        <span class="hljs-string">"jger15"</span>,
        <span class="hljs-string">"rez0123"</span>,
        <span class="hljs-string">"jiggawatts"</span>,
        <span class="hljs-string">"fzliu"</span>,
        <span class="hljs-string">"zdw"</span>
      ]
    }
  }
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"post_titles"</span>: [
        <span class="hljs-string">"Reinvent the Wheel"</span>,
        <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
        <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
        <span class="hljs-string">"Why old games never die, but new ones do"</span>,
        <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
        <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
        <span class="hljs-string">"Good Writing"</span>,
        <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
        <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
        <span class="hljs-string">"Please Fund More Science (2020)"</span>,
        <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
        <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
        <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
        <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
        <span class="hljs-string">"Postgres IDE in VS Code"</span>,
        <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
        <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
        <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
        <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
        <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
        <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
        <span class="hljs-string">"The Last Nomads"</span>,
        <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
        <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
        <span class="hljs-string">"Find Your People"</span>,
        <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
        <span class="hljs-string">"Root for your friends"</span>,
        <span class="hljs-string">"Why Algebraic Effects?"</span>,
        <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
        <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
        <span class="hljs-string">"endler.dev"</span>,
        <span class="hljs-string">"siguza.net"</span>,
        <span class="hljs-string">"heelan.io"</span>,
        <span class="hljs-string">"pleromanonx86.wordpress.com"</span>,
        <span class="hljs-string">"nicole.express"</span>,
        <span class="hljs-string">"ft.com"</span>,
        <span class="hljs-string">"paulgraham.com"</span>,
        <span class="hljs-string">"acoup.blog"</span>,
        <span class="hljs-string">"gitlab.com/sephalon"</span>,
        <span class="hljs-string">"samaltman.com"</span>,
        <span class="hljs-string">"magnus919.com"</span>,
        <span class="hljs-string">"nytimes.com"</span>,
        <span class="hljs-string">"gsmaragd.github.io"</span>,
        <span class="hljs-string">"github.com/ayoisaiah"</span>,
        <span class="hljs-string">"microsoft.com"</span>,
        <span class="hljs-string">"nature.com"</span>,
        <span class="hljs-string">"ycombinator.com"</span>,
        <span class="hljs-string">"speechmatics.com"</span>,
        <span class="hljs-string">"pmbanugo.me"</span>,
        <span class="hljs-string">"theguardian.com"</span>,
        <span class="hljs-string">"astroimagery.com"</span>,
        <span class="hljs-string">"thedial.world"</span>,
        <span class="hljs-string">"shortreps.com"</span>,
        <span class="hljs-string">"designboom.com"</span>,
        <span class="hljs-string">"foundersatwork.posthaven.com"</span>,
        <span class="hljs-string">"fakepixels.substack.com"</span>,
        <span class="hljs-string">"josephthacker.com"</span>,
        <span class="hljs-string">"antelang.org"</span>,
        <span class="hljs-string">"voyageai.com"</span>,
        <span class="hljs-string">"embear.ch"</span>
      ],
      <span class="hljs-attr">"post_points"</span>: [
        <span class="hljs-string">"112 points"</span>,
        <span class="hljs-string">"104 points"</span>,
        <span class="hljs-string">"264 points"</span>,
        <span class="hljs-string">"26 points"</span>,
        <span class="hljs-string">"9 points"</span>,
        <span class="hljs-string">"69 points"</span>,
        <span class="hljs-string">"118 points"</span>,
        <span class="hljs-string">"22 points"</span>,
        <span class="hljs-string">"262 points"</span>,
        <span class="hljs-string">"51 points"</span>,
        <span class="hljs-string">"159 points"</span>,
        <span class="hljs-string">"134 points"</span>,
        <span class="hljs-string">"88 points"</span>,
        <span class="hljs-string">"969 points"</span>,
        <span class="hljs-string">"18 points"</span>,
        <span class="hljs-string">"5 points"</span>,
        <span class="hljs-string">"58 points"</span>,
        <span class="hljs-string">"101 points"</span>,
        <span class="hljs-string">"17 points"</span>,
        <span class="hljs-string">"57 points"</span>,
        <span class="hljs-string">"81 points"</span>,
        <span class="hljs-string">"702 points"</span>,
        <span class="hljs-string">"103 points"</span>,
        <span class="hljs-string">"364 points"</span>,
        <span class="hljs-string">"267 points"</span>,
        <span class="hljs-string">"20 points"</span>,
        <span class="hljs-string">"12 points"</span>
      ],
      <span class="hljs-attr">"post_username"</span>: [
        <span class="hljs-string">"zdw"</span>,
        <span class="hljs-string">"todsacerdoti"</span>,
        <span class="hljs-string">"zielmicha"</span>,
        <span class="hljs-string">"airhangerf15"</span>,
        <span class="hljs-string">"DavidSJ"</span>,
        <span class="hljs-string">"oli5679"</span>,
        <span class="hljs-string">"ecliptik"</span>,
        <span class="hljs-string">"sephalon"</span>,
        <span class="hljs-string">"ssuds"</span>,
        <span class="hljs-string">"DamonHD"</span>,
        <span class="hljs-string">"perihelions"</span>,
        <span class="hljs-string">"gnabgib"</span>,
        <span class="hljs-string">"ayoisaiah"</span>,
        <span class="hljs-string">"Dowwie"</span>,
        <span class="hljs-string">"mdhb"</span>,
        <span class="hljs-string">"atomlib"</span>,
        <span class="hljs-string">"pmbanugo"</span>,
        <span class="hljs-string">"c-oreills"</span>,
        <span class="hljs-string">"astroimagery"</span>,
        <span class="hljs-string">"Thevet"</span>,
        <span class="hljs-string">"melvinzammit"</span>,
        <span class="hljs-string">"pseudolus"</span>,
        <span class="hljs-string">"jl"</span>,
        <span class="hljs-string">"jger15"</span>,
        <span class="hljs-string">"rez0123"</span>,
        <span class="hljs-string">"jiggawatts"</span>,
        <span class="hljs-string">"fzliu"</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"post_titles"</span>: [<span class="hljs-string">"tr.athing .titleline &gt; a"</span>, <span class="hljs-string">"span.titleline &gt; a"</span>, <span class="hljs-string">"td.title .titleline &gt; a"</span>, <span class="hljs-string">"tr.athing .titleline a"</span>, <span class="hljs-string">".titleline &gt; a"</span>],
      <span class="hljs-attr">"post_points"</span>: [<span class="hljs-string">"span.score"</span>, <span class="hljs-string">".subtext .score"</span>, <span class="hljs-string">"td.subtext span.score"</span>, <span class="hljs-string">"span.subline &gt; span.score"</span>, <span class="hljs-string">".score"</span>],
      <span class="hljs-attr">"post_username"</span>: [<span class="hljs-string">"a.hnuser"</span>, <span class="hljs-string">".subtext .hnuser"</span>, <span class="hljs-string">"span.subline &gt; a.hnuser"</span>, <span class="hljs-string">"td.subtext a.hnuser"</span>, <span class="hljs-string">".hnuser"</span>]
    },
    <span class="hljs-attr">"link"</span>: [
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hacker News"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/newest"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"new"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/front"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"past"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/newcomments"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/ask"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ask"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/show"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"show"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/jobs"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jobs"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/submit"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"submit"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/login?goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"login"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083467&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=endler.dev"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"endler.dev"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=zdw"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083467"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"2 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083467&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083467"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083388&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=siguza.net"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"siguza.net"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=todsacerdoti"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083388"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"3 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083388&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083388"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"8 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44081338&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=heelan.io"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"heelan.io"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=zielmicha"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081338"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"8 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44081338&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081338"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"77 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083917&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=pleromanonx86.wordpress.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pleromanonx86.wordpress.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=airhangerf15"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083917"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 hour ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083917&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083917"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083910&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=nicole.express"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nicole.express"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=zdw"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083910"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 hour ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083910&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083910"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"discuss"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44082892&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=ft.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ft.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=DavidSJ"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082892"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"3 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082892&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082892"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"14 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44081586&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=paulgraham.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"paulgraham.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=oli5679"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081586"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"7 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44081586&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081586"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"144 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083580&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=acoup.blog"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"acoup.blog"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=ecliptik"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083580"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"2 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083580&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083580"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"11 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44080803&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=gitlab.com/sephalon"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gitlab.com/sephalon"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=sephalon"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080803"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44080803&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080803"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"35 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44082968&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=samaltman.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"samaltman.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=ssuds"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082968"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"3 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082968&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082968"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"34 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44080533&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=magnus919.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"magnus919.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=DamonHD"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080533"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"10 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44080533&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080533"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"59 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44080549&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=nytimes.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nytimes.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=perihelions"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080549"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"10 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44080549&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080549"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"34 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44082835&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=gsmaragd.github.io"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gsmaragd.github.io"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=gnabgib"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082835"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"4 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082835&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082835"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"discuss"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44081850&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=github.com/ayoisaiah"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"github.com/ayoisaiah"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=ayoisaiah"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081850"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"6 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44081850&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081850"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"15 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44073588&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=microsoft.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"microsoft.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=Dowwie"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44073588"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 day ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44073588&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44073588"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"374 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44084017&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=nature.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nature.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=mdhb"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44084017"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 hour ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44084017&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44084017"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 comment"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=ycombinator.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ycombinator.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082307"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082307&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44049282&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=speechmatics.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"speechmatics.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=atomlib"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44049282"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 hour ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44049282&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44049282"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"discuss"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44081081&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=pmbanugo.me"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo.me"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=pmbanugo"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081081"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44081081&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081081"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"25 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44082326&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=theguardian.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"theguardian.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=c-oreills"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082326"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082326&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082326"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"75 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44049965&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=astroimagery.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=astroimagery"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44049965"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"3 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44049965&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44049965"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"6 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44063477&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=thedial.world"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"thedial.world"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=Thevet"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44063477"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"2 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44063477&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44063477"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"discuss"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44083687&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://shortreps.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=shortreps.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"shortreps.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=melvinzammit"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083687"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"2 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44083687&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44083687"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44080820&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=designboom.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"designboom.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=pseudolus"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080820"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44080820&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44080820"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"23 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44074017&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=foundersatwork.posthaven.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"foundersatwork.posthaven.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=jl"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44074017"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 day ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44074017&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44074017"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"253 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44081346&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=fakepixels.substack.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fakepixels.substack.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=jger15"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081346"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"8 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44081346&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44081346"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44077533&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=josephthacker.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"josephthacker.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=rez0123"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44077533"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"23 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44077533&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44077533"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"140 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44078434&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=antelang.org"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"antelang.org"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=jiggawatts"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44078434"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"19 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44078434&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44078434"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"163 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44059270&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=voyageai.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyageai.com"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=fzliu"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44059270"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"6 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44059270&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44059270"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"4 comments"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/vote?id=44082544&amp;how=up&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/from?site=embear.ch"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"embear.ch"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/user?id=zdw"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082544"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 hours ago"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/hide?id=44082544&amp;goto=news"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"hide"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/item?id=44082544"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"1 comment"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/?p=2"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"More"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/newsguidelines.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Guidelines"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/newsfaq.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"FAQ"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/lists"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lists"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://github.com/HackerNews/API"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"API"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/security.html"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Security"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.ycombinator.com/legal/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Legal"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://www.ycombinator.com/apply/"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Apply to YC"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"mailto:hn@ycombinator.com"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Contact"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"a"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/y18.svg"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-literal">null</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"img"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/s.gif"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-literal">null</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"img"</span>
      },
      {
        <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://news.ycombinator.com/s.gif"</span>,
        <span class="hljs-attr">"text"</span>: <span class="hljs-literal">null</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"img"</span>
      }
    ],
    <span class="hljs-attr">"data"</span>: [
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"tr.athing .titleline &gt; a"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_titles"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"span.titleline &gt; a"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_titles"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"td.title .titleline &gt; a"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_titles"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"tr.athing .titleline a"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;endler.dev&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"endler.dev"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=endler.dev"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;siguza.net&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"siguza.net"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=siguza.net"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;heelan.io&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"heelan.io"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=heelan.io"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;pleromanonx86.wordpress.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pleromanonx86.wordpress.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=pleromanonx86.wordpress.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;nicole.express&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nicole.express"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=nicole.express"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;ft.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ft.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=ft.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;paulgraham.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"paulgraham.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=paulgraham.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;acoup.blog&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"acoup.blog"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=acoup.blog"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;gitlab.com/sephalon&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gitlab.com/sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=gitlab.com/sephalon"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;samaltman.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"samaltman.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=samaltman.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;magnus919.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"magnus919.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=magnus919.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;nytimes.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nytimes.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=nytimes.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;gsmaragd.github.io&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gsmaragd.github.io"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=gsmaragd.github.io"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;github.com/ayoisaiah&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"github.com/ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=github.com/ayoisaiah"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;microsoft.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"microsoft.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=microsoft.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;nature.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"nature.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=nature.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;ycombinator.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ycombinator.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=ycombinator.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;speechmatics.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"speechmatics.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=speechmatics.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;pmbanugo.me&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo.me"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=pmbanugo.me"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;theguardian.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"theguardian.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=theguardian.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;astroimagery.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=astroimagery.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;thedial.world&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"thedial.world"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=thedial.world"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;shortreps.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"shortreps.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;designboom.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"designboom.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=designboom.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;foundersatwork.posthaven.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"foundersatwork.posthaven.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=foundersatwork.posthaven.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;fakepixels.substack.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fakepixels.substack.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=fakepixels.substack.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;josephthacker.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"josephthacker.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=josephthacker.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;antelang.org&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"antelang.org"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=antelang.org"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;voyageai.com&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyageai.com"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=voyageai.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"&lt;span class=\"sitestr\"&gt;embear.ch&lt;/span&gt;"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"embear.ch"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"from?site=embear.ch"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_titles"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">".titleline &gt; a"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Reinvent the Wheel"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://endler.dev/2025/reinvent-the-wheel/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Tachy0n: The Last 0day Jailbreak"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.siguza.net/tachy0n/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I used o3 to find a remote zeroday in the Linux SMB implementation"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why old games never die, but new ones do"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pleromanonx86.wordpress.com/2025/05/06/why-old-games-never-die-but-new-ones-do/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Using the Apple ][+ with the RetroTink-5X"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://nicole.express/2025/apple-ii-more-like-apple-5x.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Lone coder cracks 50-year puzzle to find Boggle's top-scoring board"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ft.com/content/0ab64ced-1ed1-466d-acd3-78510d10c3a1"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Good Writing"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://paulgraham.com/goodwriting.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Logistics of Road War in the Wasteland"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://acoup.blog/2025/05/23/collections-the-logistics-of-road-war-in-the-wasteland/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: Rotary Phone Dial Linux Kernel Driver"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gitlab.com/sephalon/rotary_dial_kmod"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Please Fund More Science (2020)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.samaltman.com/please-fund-more-science"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Xenon Death Flash: How a Camera Nearly Killed the Raspberry Pi 2"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://magnus919.com/2025/05/the-xenon-death-flash-how-a-camera-nearly-killed-the-raspberry-pi-2/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hong Kong's Famous Bamboo Scaffolding Hangs on (For Now)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nytimes.com/2025/05/24/world/asia/hongkong-bamboo-scaffolding.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Exposed Industrial Control Systems and Honeypots in the Wild [pdf]"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://gsmaragd.github.io/publications/EuroSP2025-ICS/EuroSP2025-ICS.pdf"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: F2 – Cross-Platform CLI Batch Renaming Tool"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://github.com/ayoisaiah/f2"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Postgres IDE in VS Code"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Scientific conferences are leaving the US amid border fears"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.nature.com/articles/d41586-025-01636-5"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Trellis (YC W24) Is Hiring founding SDR to help automate healthcare paperwork"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.ycombinator.com/companies/trellis/jobs/7Ru1X1P-founding-sdr"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"An Almost Pointless Exercise in GPU Optimization"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.speechmatics.com/pointless-gpu-optimization-exercise"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Peer Programming with LLMs, for Senior+ Engineers"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://pmbanugo.me/blog/peer-programming-with-llms"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Live facial recognition cameras may become 'commonplace' as police use soars"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.theguardian.com/technology/2025/may/24/police-live-facial-recognition-cameras-england-and-wales"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Is Astrophotography Without Tracking Possible?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://astroimagery.com/astrophotography/heres-how-to-do-astrophotography-without-tracking/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The Last Nomads"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.thedial.world/articles/news/issue-28/georgia-adjara-highlands-nomads"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Show HN: 1 min workouts for people who sit all day"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://shortreps.com"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The legacy of the iconic Nakagin capsule tower"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://www.designboom.com/architecture/moma-nakagin-capsule-tower-exhibition-many-lives-museum-modern-art-new-york-05-23-2025/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Find Your People"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://foundersatwork.posthaven.com/find-your-people"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"AI, Heidegger, and Evangelion"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://fakepixels.substack.com/p/ai-heidegger-and-evangelion"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Root for your friends"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://josephthacker.com/personal/2025/05/13/root-for-your-friends.html"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Why Algebraic Effects?"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://antelang.org/blog/why_effects/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"voyage-3.5 and voyage-3.5-lite: improved quality for a new retrieval frontier"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://blog.voyageai.com/2025/05/20/voyage-3-5/"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Use ramoops for logging under Linux (2021)"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"https://embear.ch/posts/using-ramoops/"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_titles"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"span.score"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083467"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083388"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081338"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083917"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083910"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082892"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081586"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083580"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080803"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082968"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080549"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082835"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081850"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44073588"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44084017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049282"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081081"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082326"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049965"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44063477"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083687"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080820"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44074017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081346"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44077533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44078434"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44059270"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082544"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_points"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">".subtext .score"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083467"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083388"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081338"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083917"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083910"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082892"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081586"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083580"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080803"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082968"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080549"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082835"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081850"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44073588"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44084017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049282"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081081"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082326"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049965"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44063477"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083687"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080820"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44074017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081346"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44077533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44078434"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44059270"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082544"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_points"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"td.subtext span.score"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083467"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083388"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081338"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083917"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083910"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082892"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081586"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083580"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080803"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082968"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080549"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082835"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081850"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44073588"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44084017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049282"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081081"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082326"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049965"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44063477"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083687"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080820"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44074017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081346"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44077533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44078434"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44059270"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082544"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_points"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"span.subline &gt; span.score"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083467"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083388"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081338"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083917"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083910"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082892"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081586"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083580"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080803"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082968"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080549"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082835"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081850"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44073588"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44084017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049282"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081081"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082326"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049965"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44063477"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083687"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080820"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44074017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081346"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44077533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44078434"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44059270"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082544"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_points"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">".score"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"112 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083467"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"104 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083388"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"264 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081338"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083917"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"9 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083910"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"69 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082892"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"118 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081586"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"22 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083580"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"262 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080803"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"51 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082968"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"159 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"134 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080549"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"26 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082835"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"88 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081850"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"969 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44073588"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"18 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44084017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049282"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"58 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081081"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"101 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082326"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"17 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44049965"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"5 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44063477"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"57 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44083687"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"81 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44080820"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"702 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44074017"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"103 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44081346"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"364 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44077533"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"267 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44078434"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"20 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44059270"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"12 points"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"id"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"score_44082544"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_points"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"a.hnuser"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=todsacerdoti"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zielmicha"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=airhangerf15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DavidSJ"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=oli5679"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ecliptik"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=sephalon"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ssuds"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DamonHD"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=perihelions"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=gnabgib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ayoisaiah"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Dowwie"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=mdhb"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=atomlib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pmbanugo"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=c-oreills"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=astroimagery"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Thevet"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=melvinzammit"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pseudolus"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jl"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jger15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=rez0123"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jiggawatts"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=fzliu"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_username"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">".subtext .hnuser"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=todsacerdoti"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zielmicha"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=airhangerf15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DavidSJ"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=oli5679"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ecliptik"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=sephalon"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ssuds"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DamonHD"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=perihelions"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=gnabgib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ayoisaiah"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Dowwie"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=mdhb"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=atomlib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pmbanugo"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=c-oreills"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=astroimagery"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Thevet"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=melvinzammit"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pseudolus"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jl"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jger15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=rez0123"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jiggawatts"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=fzliu"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_username"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"span.subline &gt; a.hnuser"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=todsacerdoti"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zielmicha"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=airhangerf15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DavidSJ"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=oli5679"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ecliptik"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=sephalon"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ssuds"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DamonHD"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=perihelions"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=gnabgib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ayoisaiah"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Dowwie"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=mdhb"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=atomlib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pmbanugo"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=c-oreills"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=astroimagery"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Thevet"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=melvinzammit"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pseudolus"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jl"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jger15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=rez0123"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jiggawatts"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=fzliu"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_username"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">"td.subtext a.hnuser"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=todsacerdoti"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zielmicha"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=airhangerf15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DavidSJ"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=oli5679"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ecliptik"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=sephalon"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ssuds"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DamonHD"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=perihelions"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=gnabgib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ayoisaiah"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Dowwie"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=mdhb"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=atomlib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pmbanugo"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=c-oreills"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=astroimagery"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Thevet"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=melvinzammit"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pseudolus"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jl"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jger15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=rez0123"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jiggawatts"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=fzliu"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_username"</span>
      },
      {
        <span class="hljs-attr">"selector"</span>: <span class="hljs-string">".hnuser"</span>,
        <span class="hljs-attr">"results"</span>: [
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"todsacerdoti"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=todsacerdoti"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zielmicha"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zielmicha"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"airhangerf15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=airhangerf15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DavidSJ"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DavidSJ"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"oli5679"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=oli5679"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ecliptik"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ecliptik"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"sephalon"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=sephalon"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ssuds"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ssuds"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"DamonHD"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=DamonHD"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"perihelions"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=perihelions"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"gnabgib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=gnabgib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"ayoisaiah"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=ayoisaiah"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Dowwie"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Dowwie"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"mdhb"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=mdhb"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"atomlib"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=atomlib"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pmbanugo"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pmbanugo"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"c-oreills"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=c-oreills"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"astroimagery"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=astroimagery"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thevet"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=Thevet"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"melvinzammit"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=melvinzammit"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"pseudolus"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=pseudolus"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jl"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jl"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jger15"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jger15"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"rez0123"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=rez0123"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"jiggawatts"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=jiggawatts"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"fzliu"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=fzliu"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          },
          {
            <span class="hljs-attr">"html"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"zdw"</span>,
            <span class="hljs-attr">"attributes"</span>: [
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"href"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"user?id=zdw"</span>
              },
              {
                <span class="hljs-attr">"name"</span>: <span class="hljs-string">"class"</span>,
                <span class="hljs-attr">"value"</span>: <span class="hljs-string">"hnuser"</span>
              }
            ]
          }
        ],
        <span class="hljs-attr">"key"</span>: <span class="hljs-string">"post_username"</span>
      }
    ],
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"advance_config"</span>: {
      <span class="hljs-attr">"console"</span>: [],
      <span class="hljs-attr">"network"</span>: [],
      <span class="hljs-attr">"cookies"</span>: []
    },
    <span class="hljs-attr">"_usage"</span>: {
      <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">27</span>,
      <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">25236</span>,
      <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">7065</span>,
      <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">32328</span>
    }
  }
</code></pre>
<p>Both Firecrawl and JigsawStack did a solid job extracting values accurately. However, JigsawStack went a step further by automatically including additional information, such as links that can be easily looped over and scraped, making web crawling straightforward.</p>
<p>JigsawStack also returns the CSS selectors associated with the extracted content, so you can run your own scripts without needing to figure out how the website is structured.</p>
<h2 id="heading-e-commerce">E-Commerce</h2>
<p>Site: <a target="_blank" href="https://www.amazon.com/GIGABYTE-GeForce-WINDFORCE-Graphics-GV-N506TWF2OC-16GD/dp/B0F5BBGCSZ">https://www.amazon.com/GIGABYTE-GeForce-WINDFORCE-Graphics-GV-N506TWF2OC-16GD/dp/B0F5BBGCSZ</a><br />Prompt: <code>["product_price", "product_description", "product_brand"]</code></p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"metadata"</span>: {
      <span class="hljs-attr">"title"</span>: <span class="hljs-string">"Amazon.com"</span>,
      <span class="hljs-attr">"viewport"</span>: <span class="hljs-string">"width=device-width"</span>,
      <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en-us"</span>,
      <span class="hljs-attr">"scrapeId"</span>: <span class="hljs-string">"2f46ac4a-af50-4b58-8b8a-bb66b8cefd3f"</span>,
      <span class="hljs-attr">"sourceURL"</span>: <span class="hljs-string">"https://www.amazon.com/GIGABYTE-GeForce-WINDFORCE-Graphics-GV-N506TWF2OC-16GD/dp/B0F5BBGCSZ"</span>,
      <span class="hljs-attr">"url"</span>: <span class="hljs-string">"https://www.amazon.com/GIGABYTE-GeForce-WINDFORCE-Graphics-GV-N506TWF2OC-16GD/dp/B0F5BBGCSZ"</span>,
      <span class="hljs-attr">"statusCode"</span>: <span class="hljs-number">200</span>,
      <span class="hljs-attr">"proxyUsed"</span>: <span class="hljs-string">"stealth"</span>
    },
    <span class="hljs-attr">"json"</span>: {
      <span class="hljs-attr">"product_price"</span>: [],
      <span class="hljs-attr">"product_description"</span>: [],
      <span class="hljs-attr">"product_brand"</span>: []
    }
}
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">6</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"product_price"</span>: [
        <span class="hljs-string">"$489.99"</span>,
        <span class="hljs-string">"$60.99"</span>,
        <span class="hljs-string">"$78.99"</span>,
        <span class="hljs-string">"$16.99/month"</span>,
        <span class="hljs-string">"()"</span>,
        <span class="hljs-string">"$4,899.99$4,899.99"</span>,
        <span class="hljs-string">"$2,699.99$2,699.99"</span>,
        <span class="hljs-string">"$199.89$199.89"</span>,
        <span class="hljs-string">"$1,049.99$1,049.99"</span>,
        <span class="hljs-string">"$21.99$21.99"</span>,
        <span class="hljs-string">"$1,199.00$1,199.00"</span>,
        <span class="hljs-string">"$2,259.99$2,259.99"</span>,
        <span class="hljs-string">"$1,599.99$1,599.99"</span>,
        <span class="hljs-string">"$54.99$54.99"</span>,
        <span class="hljs-string">"$99.99$99.99"</span>,
        <span class="hljs-string">"$79.99$79.99"</span>,
        <span class="hljs-string">"$94.99$94.99"</span>,
        <span class="hljs-string">"$159.99$159.99"</span>,
        <span class="hljs-string">"$100.99$100.99"</span>
      ],
      <span class="hljs-attr">"product_description"</span>: [
        <span class="hljs-string">"Coverage for accidental damage including drops, spills, and broken parts, as well as breakdowns (plans vary)"</span>,
        <span class="hljs-string">"24/7 support when you need it."</span>,
        <span class="hljs-string">"Quick, easy, and frustration-free claims."</span>,
        <span class="hljs-string">"No Additional Cost: You pay nothing for repairs – parts, labor, and shipping included."</span>,
        <span class="hljs-string">"Coverage: Plan starts on the date of purchase. Malfunctions covered after the manufacturer's warranty. Power surges covered from day one. Real experts are available 24/7 to help with set-up, connectivity issues, troubleshooting and much more."</span>,
        <span class="hljs-string">"Easy Claims Process: File a claim anytime online or by phone. Most claims approved within minutes. If we can’t repair it, we’ll send you an Amazon e-gift card for the purchase price of your covered product or replace it."</span>,
        <span class="hljs-string">"Product Eligibility: Plan must be purchased with a product or within 30 days of the product purchase. Pre-existing conditions are not covered."</span>,
        <span class="hljs-string">"Terms &amp; Details: More information about this protection plan is available within the “Product guides and documents” section. Simply click “User Guide” for more info. Terms &amp; Conditions will be available in Your Orders on Amazon. Asurion will also email your plan confirmation with Terms &amp; Conditions to the address associated with your Amazon account within 24 hours of purchase."</span>,
        <span class="hljs-string">"EXTENSIVE COVERAGE: Protection for all your eligible products purchased from Amazon. (Note: Products used commercially or for a business are excluded)"</span>,
        <span class="hljs-string">"EXCEPTIONAL PROTECTION: Including malfunctions and failures, plus drops or spills for eligible portable items."</span>,
        <span class="hljs-string">"PAST &amp; FUTURE PURCHASES COVERED: You're protected on eligible items purchased within the last year and new purchases going forward, including this purchase — starting 30 days after enrollment."</span>,
        <span class="hljs-string">"QUICK &amp; EASY CLAIMS: File a claim in minutes at Asurion.com/amazon. We'll repair, replace, or reimburse you up to the purchase price (excluding tax)."</span>,
        <span class="hljs-string">"NO HIDDEN FEES. You’re covered for up to $5,000 in total claims per 12-month period. Cancel anytime – your plan renews monthly until canceled. (Coupons applied at checkout do not renew monthly.)"</span>,
        <span class="hljs-string">"3-Year Protection Plan for $60.99"</span>,
        <span class="hljs-string">"4-Year Protection Plan for $78.99"</span>,
        <span class="hljs-string">"Complete Protect: One plan covers all eligible past and future purchases (Renews Monthly Until Cancelled) for $16.99/month"</span>,
        <span class="hljs-string">"$60.99"</span>,
        <span class="hljs-string">"$78.99"</span>,
        <span class="hljs-string">"$16.99/month"</span>
      ],
      <span class="hljs-attr">"product_brand"</span>: [
        <span class="hljs-string">"from Asurion, LLC"</span>,
        <span class="hljs-string">"Ships from and sold by Amazon.com."</span>,
        <span class="hljs-string">"Sold by ARCTIC Inc and ships from Amazon Fulfillment."</span>,
        <span class="hljs-string">"Max Screen Resolution"</span>,
        <span class="hljs-string">"Memory Speed"</span>,
        <span class="hljs-string">"Graphics Coprocessor"</span>,
        <span class="hljs-string">"Chipset Brand"</span>,
        <span class="hljs-string">"Graphics Card Ram Size"</span>,
        <span class="hljs-string">"Brand"</span>,
        <span class="hljs-string">"Item Weight"</span>,
        <span class="hljs-string">"Product Dimensions"</span>,
        <span class="hljs-string">"Item Dimensions LxWxH"</span>,
        <span class="hljs-string">"Manufacturer"</span>,
        <span class="hljs-string">"ASIN"</span>,
        <span class="hljs-string">"Country of Origin"</span>,
        <span class="hljs-string">"Date First Available"</span>,
        <span class="hljs-string">"Best Sellers Rank"</span>,
        <span class="hljs-string">"Graphics Cards"</span>,
        <span class="hljs-string">"Electronics"</span>,
        <span class="hljs-string">"Computers &amp; Accessories"</span>,
        <span class="hljs-string">"Computer Components"</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"product_price"</span>: [
        <span class="hljs-string">"#corePrice_feature_div .a-price .a-offscreen"</span>,
        <span class="hljs-string">"#tp_price_block_total_price_ww .a-offscreen"</span>,
        <span class="hljs-string">"#attach-warranty-card-price"</span>,
        <span class="hljs-string">".a-color-price"</span>,
        <span class="hljs-string">"#tp-tool-tip-subtotal-price-value .a-offscreen"</span>
      ],
      <span class="hljs-attr">"product_description"</span>: [
        <span class="hljs-string">"#attach-warranty-pane .attach-warranty-bullet-point-container .a-size-base-plus"</span>,
        <span class="hljs-string">"#attach-warranty-pane-ld .attach-warranty-bullet-point-container .a-size-base-plus"</span>,
        <span class="hljs-string">".mbb__m ul.a-unordered-list .a-list-item span"</span>,
        <span class="hljs-string">"#mbb_feature_div .abbListItem .a-label"</span>,
        <span class="hljs-string">"#mbb_feature_div .abbListItem .a-color-price"</span>
      ],
      <span class="hljs-attr">"product_brand"</span>: [
        <span class="hljs-string">".a-size-base.a-color-secondary"</span>,
        <span class="hljs-string">"#wayfinding-breadcrumbs_feature_div ul.a-unordered-list li:last-child a"</span>,
        <span class="hljs-string">"#wayfinding-breadcrumbs_feature_div ul.a-unordered-list li:nth-child(1) a"</span>,
        <span class="hljs-string">"#wayfinding-breadcrumbs_feature_div ul.a-unordered-list li:nth-child(3) a"</span>,
        <span class="hljs-string">"#wayfinding-breadcrumbs_feature_div ul.a-unordered-list li:nth-child(5) a"</span>
      ]
    },
    <span class="hljs-comment">// Additional lines truncated to fit</span>
    <span class="hljs-attr">"_usage"</span>: {
      <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">45</span>,
      <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">38501</span>,
      <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">40264</span>,
      <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">78810</span>
    }
  }
</code></pre>
<p>Firecrawl was unable to extract the data, even with a proxy enabled. JigsawStack retrieved all content successfully without requiring any proxy.</p>
<h2 id="heading-nutritiously-hard-to-scrape-site">Nutritiously hard to scrape site</h2>
<p>Site: <a target="_blank" href="https://www.linkedin.com/in/yoeven/">https://www.linkedin.com/in/yoeven/</a><br />Prompt: <code>["profile_person_name", "work_at_company_name", "job_title"]</code></p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"err"</span>: <span class="hljs-string">"Failed to scrape URL. Status code: 403. Error: This website is no longer supported, please reach out to help@firecrawl.com for more info on how to activate it on your account."</span>
}
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">2</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"profile_person_name"</span>: [
        <span class="hljs-string">"Yoeven D Khemlani"</span>,
        <span class="hljs-string">"Sign in to view Yoeven’s full profile"</span>,
        <span class="hljs-string">"View mutual connections with Yoeven"</span>,
        <span class="hljs-string">"Welcome back"</span>,
        <span class="hljs-string">"The signal-based outbound industry has a problem: GTM engineers making simple processes look impossible so you'll hire them.\nI'm here to tell you:…"</span>,
        <span class="hljs-string">"Having OCR troubles? JigsawStack’s vOCR delivers structured, fast, and reliable output for any doc type. It’s built for devs, and it keeps getting…"</span>,
        <span class="hljs-string">"Vibe coders don't know what they're paying for! 💸 Cursor auto installed JigsawStack sdk to build his product He got charged over $200 by cursor…"</span>,
        <span class="hljs-string">"We benchmarked Google's Gemini OCR against JigsawStack's vOCR across handwritten notes, multilingual signs, receipts, and structured PDFs. Both can…"</span>,
        <span class="hljs-string">"🚀 Exciting Highlights from the 2025 CDOIQ-APAC Symposium! 🚀 It was an honour to be a guest speaker at the 2025 CDOIQ-APAC Symposium titled: From…"</span>,
        <span class="hljs-string">"Good conversations at #Saastr A number of our Antler founders and a few global colleagues attending as well. Who else is there today? Jason M.…"</span>,
        <span class="hljs-string">"Had such an a amazing experience at the AI x Infra dinner hosted by Andreessen Horowitz, Neon and Tigris Data! Met so many amazing people and…"</span>,
        <span class="hljs-string">"Better Auth is a comprehensive authentication framework for TypeScript that helps you roll your own auth from simple auth flows to enterprise-grade…"</span>
      ],
      <span class="hljs-attr">"work_at_company_name"</span>: [
        <span class="hljs-string">"JigsawStack"</span>,
        <span class="hljs-string">"Imperial College London"</span>,
        <span class="hljs-string">"Portfolio"</span>,
        <span class="hljs-string">"Staytion Singapore"</span>,
        <span class="hljs-string">"Stayr"</span>,
        <span class="hljs-string">"Noah"</span>,
        <span class="hljs-string">"UOB"</span>,
        <span class="hljs-string">"Chiang Mai University"</span>,
        <span class="hljs-string">"Founder at JigsawStack 🧩"</span>
      ],
      <span class="hljs-attr">"job_title"</span>: [
        <span class="hljs-string">"Founder at JigsawStack 🧩"</span>,
        <span class="hljs-string">"The signal-based outbound industry has a problem: GTM engineers making simple processes look impossible so you'll hire them.\nI'm here to tell you:…"</span>,
        <span class="hljs-string">"Having OCR troubles? JigsawStack’s vOCR delivers structured, fast, and reliable output for any doc type. It’s built for devs, and it keeps getting…"</span>,
        <span class="hljs-string">"Vibe coders don't know what they're paying for! 💸 Cursor auto installed JigsawStack sdk to build his product He got charged over $200 by cursor…"</span>,
        <span class="hljs-string">"We benchmarked Google's Gemini OCR against JigsawStack's vOCR across handwritten notes, multilingual signs, receipts, and structured PDFs. Both can…"</span>,
        <span class="hljs-string">"🚀 Exciting Highlights from the 2025 CDOIQ-APAC Symposium! 🚀 It was an honour to be a guest speaker at the 2025 CDOIQ-APAC Symposium titled: From…"</span>,
        <span class="hljs-string">"Good conversations at #Saastr A number of our Antler founders and a few global colleagues attending as well. Who else is there today? Jason M.…"</span>,
        <span class="hljs-string">"Had such an a amazing experience at the AI x Infra dinner hosted by Andreessen Horowitz, Neon and Tigris Data! Met so many amazing people and…"</span>,
        <span class="hljs-string">"Better Auth is a comprehensive authentication framework for TypeScript that helps you roll your own auth from simple auth flows to enterprise-grade…"</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"profile_person_name"</span>: [
        <span class="hljs-string">"h1.top-card-layout__title"</span>,
        <span class="hljs-string">"h3.base-main-card__title + h4.base-main-card__subtitle a.hidden-nested-link"</span>,
        <span class="hljs-string">"h2.contextual-sign-in-modal__context-screen-title"</span>,
        <span class="hljs-string">"h2.sign-in-modal__header"</span>,
        <span class="hljs-string">"h3.base-main-card__title"</span>
      ],
      <span class="hljs-attr">"work_at_company_name"</span>: [
        <span class="hljs-string">"a.flex.link .top-card-link__description"</span>,
        <span class="hljs-string">"h4.text-color-text.text-md a .experience-item__subtitle"</span>,
        <span class="hljs-string">"h2.top-card-layout__headline"</span>,
        <span class="hljs-string">"h2.core-section-container__title.section-title + div.core-section-container__content ul.experience__list li:first-child h4 a .experience-item__subtitle"</span>,
        <span class="hljs-string">"h4.text-color-text.text-md a"</span>
      ],
      <span class="hljs-attr">"job_title"</span>: [
        <span class="hljs-string">"h2.top-card-layout__headline"</span>,
        <span class="hljs-string">"h3.experience-item__title"</span>,
        <span class="hljs-string">"h3.[&amp;&gt;*\\:mb-0].text-[18px]"</span>,
        <span class="hljs-string">"h3.base-main-card__title"</span>,
        <span class="hljs-string">"h3.experience-item__title span"</span>
      ]
    }
    <span class="hljs-comment">// Additional lines truncated to fit</span>
}
</code></pre>
<p>Firecrawl doesn’t allow scraping of websites like LinkedIn by default and throws an error while JigsawStack extracts any public information you find on the site easily.</p>
<h2 id="heading-cloudflare-unblocker">Cloudflare Unblocker</h2>
<p>Site: <a target="_blank" href="https://platform.openai.com/docs/guides/text">https://platform.openai.com/docs/guides/text</a><br />Prompt: <code>["titles", "markdown_full_site", "coding_snippets"]</code></p>
<p>OpenAI docs are protected and blocked by Cloudflare.</p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"metadata"</span>: {
      <span class="hljs-attr">"og:type"</span>: <span class="hljs-string">"website"</span>,
      <span class="hljs-attr">"og:title"</span>: <span class="hljs-string">"OpenAI Platform"</span>,
      <span class="hljs-attr">"ogUrl"</span>: <span class="hljs-string">"https://platform.openai.com"</span>,
      <span class="hljs-attr">"title"</span>: <span class="hljs-string">"OpenAI Platform"</span>,
      <span class="hljs-attr">"og:image"</span>: <span class="hljs-string">"https://cdn.openai.com/API/images/platform-opengraph.png"</span>,
      <span class="hljs-attr">"twitter:title"</span>: <span class="hljs-string">"OpenAI Platform"</span>,
      <span class="hljs-attr">"theme-color"</span>: <span class="hljs-string">"#000000"</span>,
      <span class="hljs-attr">"twitter:description"</span>: <span class="hljs-string">"Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform."</span>,
      <span class="hljs-attr">"twitter:image"</span>: <span class="hljs-string">"https://cdn.openai.com/API/images/platform-opengraph.png"</span>,
      <span class="hljs-attr">"ogImage"</span>: <span class="hljs-string">"https://cdn.openai.com/API/images/platform-opengraph.png"</span>,
      <span class="hljs-attr">"og:description"</span>: <span class="hljs-string">"Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform."</span>,
      <span class="hljs-attr">"og:url"</span>: <span class="hljs-string">"https://platform.openai.com"</span>,
      <span class="hljs-attr">"twitter:card"</span>: <span class="hljs-string">"summary_large_image"</span>,
      <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Explore resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's developer platform."</span>,
      <span class="hljs-attr">"favicon"</span>: <span class="hljs-string">"https://platform.openai.com/favicon-platform.png"</span>,
      <span class="hljs-attr">"twitter:domain"</span>: <span class="hljs-string">"platform.openai.com"</span>,
      <span class="hljs-attr">"viewport"</span>: <span class="hljs-string">"width=device-width, initial-scale=1"</span>,
      <span class="hljs-attr">"twitter:url"</span>: <span class="hljs-string">"https://platform.openai.com"</span>,
      <span class="hljs-attr">"ogTitle"</span>: <span class="hljs-string">"OpenAI Platform"</span>,
      <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en-US"</span>,
      <span class="hljs-attr">"ogDescription"</span>: <span class="hljs-string">"Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform."</span>,
      <span class="hljs-attr">"scrapeId"</span>: <span class="hljs-string">"563100fa-adc6-4c5b-8f40-3e1c92487505"</span>,
      <span class="hljs-attr">"sourceURL"</span>: <span class="hljs-string">"https://platform.openai.com/docs/guides/text"</span>,
      <span class="hljs-attr">"url"</span>: <span class="hljs-string">"https://platform.openai.com/docs/guides/text"</span>,
      <span class="hljs-attr">"statusCode"</span>: <span class="hljs-number">200</span>,
      <span class="hljs-attr">"proxyUsed"</span>: <span class="hljs-string">"stealth"</span>
    },
    <span class="hljs-attr">"json"</span>: {
      <span class="hljs-attr">"titles"</span>: [],
      <span class="hljs-attr">"markdown_full_site"</span>: [],
      <span class="hljs-attr">"coding_snippets"</span>: []
    }
}
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">2</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"titles"</span>: [
        <span class="hljs-string">"Text generation and prompting"</span>,
        <span class="hljs-string">"Choosing a model"</span>,
        <span class="hljs-string">"Prompt engineering"</span>,
        <span class="hljs-string">"Message roles and instruction following"</span>,
        <span class="hljs-string">"Message formatting with Markdown and XML"</span>,
        <span class="hljs-string">"Few-shot learning"</span>,
        <span class="hljs-string">"Include relevant context information"</span>,
        <span class="hljs-string">"Prompting GPT-4.1 models"</span>,
        <span class="hljs-string">"Prompting reasoning models"</span>,
        <span class="hljs-string">"Next steps"</span>,
        <span class="hljs-string">"Learn how to prompt a model to generate text."</span>,
        <span class="hljs-string">"Get started"</span>,
        <span class="hljs-string">"Core Concepts"</span>,
        <span class="hljs-string">"Tools"</span>,
        <span class="hljs-string">"Agents"</span>,
        <span class="hljs-string">"Realtime API"</span>,
        <span class="hljs-string">"Model optimization"</span>,
        <span class="hljs-string">"Specialized models"</span>,
        <span class="hljs-string">"OpenAI Platform"</span>,
        <span class="hljs-string">"Codex"</span>,
        <span class="hljs-string">"Best practices"</span>,
        <span class="hljs-string">"Assistants API"</span>,
        <span class="hljs-string">"Resources"</span>
      ],
      <span class="hljs-attr">"markdown_full_site"</span>: [
        <span class="hljs-string">"Text generation and prompting\nLearn how to prompt a model to generate text.\nCopy page\nWith the OpenAI API, you can use a large language model to generate text from a prompt, as you might using ChatGPT. Models can generate almost any kind of text response—like code, mathematical equations, structured JSON data, or human-like prose.\nHere's a simple example using the Responses API.\nGenerate text from a simple prompt\njavascript\n123456789import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",input: \"Write a one-sentence bedtime story about a unicorn.\"});console.log(response.output_text);\n123456789from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\",input=\"Write a one-sentence bedtime story about a unicorn.\")print(response.output_text)\n1234567curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"input\": \"Write a one-sentence bedtime story about a unicorn.\" }'\nAn array of content generated by the model is in the output property of the response. In this simple example, we have just one output which looks like this:\n1234567891011121314[ {\"id\": \"msg_67b73f697ba4819183a15cc17d011509\",\"type\": \"message\",\"role\": \"assistant\",\"content\": [ {\"type\": \"output_text\",\"text\": \"Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.\",\"annotations\": [] } ] }]\nThe output array often has more than one item in it! It can contain tool calls, data about reasoning tokens generated by reasoning models, and other items. It is not safe to assume that the model's text output is present at output[0].content[0].text.\nSome of our official SDKs include an output_text property on model responses for convenience, which aggregates all text outputs from the model into a single string. This may be useful as a shortcut to access text output from the model.\nIn addition to plain text, you can also have the model return structured data in JSON format - this feature is called Structured Outputs.\nChoosing a model\nA key choice to make when generating content through the API is which model you want to use - the model parameter of the code samples above. You can find a full listing of available models here. Here are a few factors to consider when choosing a model for text generation.\nReasoning models generate an internal chain of thought to analyze the input prompt, and excel at understanding complex tasks and multi-step planning. They are also generally slower and more expensive to use than GPT models.\nGPT models are fast, cost-efficient, and highly intelligent, but benefit from more explicit instructions around how to accomplish tasks.\nLarge and small (mini or nano) models offer trade-offs for speed, cost, and intelligence. Large models are more effective at understanding prompts and solving problems across domains, while small models are generally faster and cheaper to use.\nWhen in doubt, gpt-4.1 offers a solid combination of intelligence, speed, and cost effectiveness.\nPrompt engineering\nPrompt engineering is the process of writing effective instructions for a model, such that it consistently generates content that meets your requirements.\nBecause the content generated from a model is non-deterministic, it is a combination of art and science to build a prompt that will generate content in the format you want. However, there are a number of techniques and best practices you can apply to consistently get good results from a model.\nSome prompt engineering techniques will work with every model, like using message roles. But different model types (like reasoning versus GPT models) might need to be prompted differently to produce the best results. Even different snapshots of models within the same family could produce different results. So as you are building more complex applications, we strongly recommend that you:\nPin your production applications to specific model snapshots (like gpt-4.1-2025-04-14 for example) to ensure consistent behavior.\nBuild evals that will measure the behavior of your prompts, so that you can monitor the performance of your prompts as you iterate on them, or when you change and upgrade model versions.\nNow, let's examine some tools and techniques available to you to construct prompts.\nMessage roles and instruction following\nYou can provide instructions to the model with differing levels of authority using the instructions API parameter or message roles.\nThe instructions parameter gives the model high-level instructions on how it should behave while generating a response, including tone, goals, and examples of correct responses. Any instructions provided this way will take priority over a prompt in the input parameter.\nGenerate text with instructions\njavascript\n12345678910import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",instructions: \"Talk like a pirate.\",input: \"Are semicolons optional in JavaScript?\",});console.log(response.output_text);\n12345678910from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\", instructions=\"Talk like a pirate.\",input=\"Are semicolons optional in JavaScript?\",)print(response.output_text)\n12345678curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"instructions\": \"Talk like a pirate.\", \"input\": \"Are semicolons optional in JavaScript?\" }'\nThe example above is roughly equivalent to using the following input messages in the input array:\nGenerate text with messages using different roles\njavascript\n123456789101112131415161718import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",input: [ {role: \"developer\",content: \"Talk like a pirate.\" }, {role: \"user\",content: \"Are semicolons optional in JavaScript?\", }, ],});console.log(response.output_text);\n123456789101112131415161718from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\",input=[ {\"role\": \"developer\",\"content\": \"Talk like a pirate.\" }, {\"role\": \"user\",\"content\": \"Are semicolons optional in JavaScript?\" } ])print(response.output_text)\n12345678910111213141516curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"input\": [ { \"role\": \"developer\", \"content\": \"Talk like a pirate.\" }, { \"role\": \"user\", \"content\": \"Are semicolons optional in JavaScript?\" } ] }'\nNote that the instructions parameter only applies to the current response generation request. If you are managing conversation state with the previous_response_id parameter, the instructions used on previous turns will not be present in the context.\nThe OpenAI model spec describes how our models give different levels of priority to messages with different roles.\ndeveloperuserassistant\ndeveloper messages are instructions provided by the application developer, prioritized ahead of user messages.\nuser messages are instructions provided by an end user, prioritized behind developer messages.\nMessages generated by the model have the assistant role.\nA multi-turn conversation may consist of several messages of these types, along with other content types provided by both you and the model. Learn more about managing conversation state here.\nYou could think about developer and user messages like a function and its arguments in a programming language.\ndeveloper messages provide the system's rules and business logic, like a function definition.\nuser messages provide inputs and configuration to which the developer message instructions are applied, like arguments to a function.\nMessage formatting with Markdown and XML\nWhen writing developer and user messages, you can help the model understand logical boundaries of your prompt and context data using a combination of Markdown formatting and XML tags.\nMarkdown headers and lists can be helpful to mark distinct sections of a prompt, and to communicate hierarchy to the model. They can also potentially make your prompts more readable during development. XML tags can help delineate where one piece of content (like a supporting document used for reference) begins and ends. XML attributes can also be used to define metadata about content in the prompt that can be referenced by your instructions.\nIn general, a developer message will contain the following sections, usually in this order (though the exact optimal content and order may vary by which model you are using):\nIdentity: Describe the purpose, communication style, and high-level goals of the assistant.\nInstructions: Provide guidance to the model on how to generate the response you want. What rules should it follow? What should the model do, and what should the model never do? This section could contain many subsections as relevant for your use case, like how the model should call custom functions.\nExamples: Provide examples of possible inputs, along with the desired output from the model.\nContext: Give the model any additional information it might need to generate a response, like private/proprietary data outside its training data, or any other data you know will be particularly relevant. This content is usually best positioned near the end of your prompt, as you may include different context for different generation requests.\nBelow is an example of using Markdown and XML tags to construct a developer message with distinct sections and supporting examples.\nExample promptExample promptAPI requestAPI request\nExample prompt\nA developer message for code generation\n123456789101112131415161718192021222324# IdentityYou are coding assistant that helps enforce the use of snake case variables in JavaScript code, and writing code that will run in Internet Explorer version 6.# Instructions* When defining variables, use snake case names (e.g. my_variable) instead of camel case names (e.g. myVariable).* To support old browsers, declare variables using the older \"var\" keyword.* Do not give responses with Markdown formatting, just return the code as requested.# Examples&lt;user_query&gt;How do I declare a string variable for a first name?&lt;/user_query&gt;&lt;assistant_response&gt;var first_name = \"Anna\";&lt;/assistant_response&gt;\nAPI request\nSend a prompt to generate code through the API\njavascript\n12345678910111213import fs from\"fs/promises\";import OpenAI from\"openai\";const client = new OpenAI();const instructions = await fs.readFile(\"prompt.txt\", \"utf-8\");const response = await client.responses.create({model: \"gpt-4.1\", instructions,input: \"How would I declare a variable for a last name?\",});console.log(response.output_text);\n12345678910111213from openai import OpenAIclient = OpenAI()withopen(\"prompt.txt\", \"r\", encoding=\"utf-8\") as f: instructions = f.read()response = client.responses.create( model=\"gpt-4.1\", instructions=instructions,input=\"How would I declare a variable for a last name?\",)print(response.output_text)\n12345678curl https://api.openai.com/v1/responses \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"model\": \"gpt-4.1\", \"instructions\": \"'\"$(&lt; prompt.txt)\"'\", \"input\": \"How would I declare a variable for a last name?\" }'\nSave on cost and latency with prompt caching\nWhen constructing a message, you should try and keep content that you expect to use over and over in your API requests at the beginning of your prompt, and among the first API parameters you pass in the JSON request body to Chat Completions or Responses. This enables you to maximize cost and latency savings from prompt caching.\nFew-shot learning\nFew-shot learning lets you steer a large language model toward a new task by including a handful of input/output examples in the prompt, rather than fine-tuning the model. The model implicitly \"picks up\" the pattern from those examples and applies it to a prompt. When providing examples, try to show a diverse range of possible inputs with the desired outputs.\nTypically, you will provide examples as part of a developer message in your API request. Here's an example developer message containing examples that show a model how to classify positive or negative customer service reviews.\n12345678910111213141516171819202122232425262728293031323334353637# IdentityYou are a helpful assistant that labels short product reviews as Positive, Negative, or Neutral.# Instructions* Only output a single word in your response with no additional formatting or commentary.* Your response should only be one of the words \"Positive\", \"Negative\", or \"Neutral\" depending on the sentiment of the product review you are given.# Examples&lt;product_review id=\"example-1\"&gt;I absolutely love this headphones — sound quality is amazing!&lt;/product_review&gt;&lt;assistant_response id=\"example-1\"&gt;Positive&lt;/assistant_response&gt;&lt;product_review id=\"example-2\"&gt;Battery life is okay, but the ear pads feel cheap.&lt;/product_review&gt;&lt;assistant_response id=\"example-2\"&gt;Neutral&lt;/assistant_response&gt;&lt;product_review id=\"example-3\"&gt;Terrible customer service, I'll never buy from them again.&lt;/product_review&gt;&lt;assistant_response id=\"example-3\"&gt;Negative&lt;/assistant_response&gt;\nInclude relevant context information\nIt is often useful to include additional context information the model can use to generate a response within the prompt you give the model. There are a few common reasons why you might do this:\nTo give the model access to proprietary data, or any other data outside the data set the model was trained on.\nTo constrain the model's response to a specific set of resources that you have determined will be most beneficial.\nThe technique of adding additional relevant context to the model generation request is sometimes called retrieval-augmented generation (RAG). You can add additional context to the prompt in many different ways, from querying a vector database and including the text you get back into a prompt, or by using OpenAI's built-in file search tool to generate content based on uploaded documents.\nPlanning for the context window\nModels can only handle so much data within the context they consider during a generation request. This memory limit is called a context window, which is defined in terms of tokens (chunks of data you pass in, from text to images).\nModels have different context window sizes from the low 100k range up to one million tokens for newer GPT-4.1 models. Refer to the model docs for specific context window sizes per model.\nPrompting GPT-4.1 models\nGPT models like gpt-4.1 benefit from precise instructions that explicitly provide the logic and data required to complete the task in the prompt. GPT-4.1 in particular is highly steerable and responsive to well-specified prompts. To get the most out of GPT-4.1, refer to the prompting guide in the cookbook.\nGPT-4.1 prompting guide\nGet the most out of prompting GPT-4.1 with the tips and tricks in this\nprompting guide, extracted from real-world use cases and practical\nexperience.\nGPT-4.1 prompting best practices\nWhile the cookbook has the best and most comprehensive guidance for prompting this model, here are a few best practices to keep in mind.\nBuilding agentic workflows\nSystem Prompt Reminders\nIn order to best utilize the agentic capabilities of GPT-4.1, we recommend including three key types of reminders in all agent prompts for persistence, tool calling, and planning. As a whole, we find that these three instructions transform the model's behavior from chatbot-like into a much more “eager” agent, driving the interaction forward autonomously and independently. Here are a few examples:\n123456789101112131415## PERSISTENCEYou are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.## TOOL CALLINGIf you are not sure about file content or codebase structure pertaining to the user's request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.## PLANNINGYou MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.\nTool Calls\nCompared to previous models, GPT-4.1 has undergone more training on effectively utilizing tools passed as arguments in an OpenAI API request. We encourage developers to exclusively use the tools field of API requests to pass tools for best understanding and performance, rather than manually injecting tool descriptions into the system prompt and writing a separate parser for tool calls, as some have reported doing in the past.\nDiff Generation\nCorrect diffs are critical for coding applications, so we've significantly improved performance at this task for GPT-4.1. In our cookbook, we open-source a recommended diff format on which GPT-4.1 has been extensively trained. That said, the model should generalize to any well-specified format.\nUsing long context\nGPT-4.1 has a performant 1M token input context window, and will be useful for a variety of long context tasks, including structured document parsing, re-ranking, selecting relevant information while ignoring irrelevant context, and performing multi-hop reasoning using context.\nOptimal Context Size\nWe show perfect performance at needle-in-a-haystack evals up to our full context size, and we've observed very strong performance at complex tasks with a mix of relevant and irrelevant code and documents in the range of hundreds of thousands of tokens.\nDelimiters\nWe tested a variety of delimiters for separating context provided to the model against our long context evals. Briefly, XML and the format demonstrated by Lee et al. (ref) tend to perform well, while JSON performed worse for this task. See our cookbook for prompt examples.\nPrompt Organization\nEspecially in long context usage, placement of instructions and context can substantially impact performance. In our experiments, we found that it was optimal to put critical instructions, including the user query, at both the top and the bottom of the prompt; this elicited marginally better performance from the model than putting them only at the top, and much better performance than only at the bottom.\nPrompting for chain of thought\nAs mentioned above, GPT-4.1 isn’t a reasoning model, but prompting the model to think step by step (called “chain of thought”) can be an effective way for a model to break down problems into more manageable pieces. The model has been trained to perform well at agentic reasoning and real-world problem solving, so it shouldn’t require much prompting to do well.\nWe recommend starting with this basic chain-of-thought instruction at the end of your prompt:\nFirst, think carefully step by step about what documents are needed to answer the query. Then, print out the TITLE and ID of each document. Then, format the IDs into a list.\nFrom there, you should improve your CoT prompt by auditing failures in your particular examples and evals, and addressing systematic planning and reasoning errors with more explicit instructions. See our cookbook for a prompt example demonstrating a more opinionated reasoning strategy.\nInstruction following\nGPT-4.1 exhibits outstanding instruction-following performance, which developers can leverage to precisely shape and control the outputs for their particular use cases. However, since the model follows instructions more literally than its predecessors, may need to provide more explicit specification around what to do or not do, and existing prompts optimized for other models may not immediately work with this model.\nRecommended Workflow\nHere is our recommended workflow for developing and debugging instructions in prompts:\nStart with an overall “Response Rules” or “Instructions” section with high-level guidance and bullet points.\nIf you'd like to change a more specific behavior, add a section containing more details for that category, like ## Sample Phrases.\nIf there are specific steps you'd like the model to follow in its workflow, add an ordered list and instruct the model to follow these steps.\nIf behavior still isn't working as expected, check for conflicting, underspecified, or incorrect` instructions and examples. If there are conflicting instructions, GPT-4.1 tends to follow the one closer to the end of the prompt.\nAdd examples that demonstrate desired behavior; ensure that any important behavior demonstrated in your examples are also cited in your rules.\nIt's generally not necessary to use all-caps or other incentives like bribes or tips, but developers can experiment with this for extra emphasis if so desired.\nCommon Failure Modes\nThese failure modes are not unique to GPT-4.1, but we share them here for general awareness and ease of debugging.\nInstructing a model to always follow a specific behavior can occasionally induce adverse effects. For instance, if told “you must call a tool before responding to the user,” models may hallucinate tool inputs or call the tool with null values if they do not have enough information. Adding “if you don’t have enough information to call the tool, ask the user for the information you need” should mitigate this.\nWhen provided sample phrases, models can use those quotes verbatim and start to sound repetitive to users. Ensure you instruct the model to vary them as necessary.\nWithout specific instructions, some models can be eager to provide additional prose to explain their decisions, or output more formatting in responses than may be desired. Provide instructions and potentially examples to help mitigate.\nSee our cookbook for an example customer service prompt that demonstrates these principles.\nPrompting reasoning models\nThere are some differences to consider when prompting a reasoning model versus prompting a GPT model. Generally speaking, reasoning models will provide better results on tasks with only high-level guidance. This differs from GPT models, which benefit from very precise instructions.\nYou could think about the difference between reasoning and GPT models like this.\nA reasoning model is like a senior co-worker. You can give them a goal to achieve and trust them to work out the details.\nA GPT model is like a junior coworker. They'll perform best with explicit instructions to create a specific output.\nFor more information on best practices when using reasoning models, refer to this guide.\nNext steps\nNow that you known the basics of text inputs and outputs, you might want to check out one of these resources next.\nBuild a prompt in the Playground\nUse the Playground to develop and iterate on prompts.\nGenerate JSON data with Structured Outputs\nEnsure JSON data emitted from a model conforms to a JSON schema.\nFull API reference\nCheck out all the options for text generation in the API reference.\nResponses\nText input and outputText input and output\nChoosing a modelChoosing a model\nPrompt engineeringPrompt engineering\nMessage roles and instruction followingMessage roles and instruction following\nMessage formattingMessage formatting\nFew-shot learningFew-shot learning\nInclude relevant contextInclude relevant context\nPrompt GPT-4.1 modelsPrompt GPT-4.1 models\nPrompt reasoning modelsPrompt reasoning models\nNext stepsNext steps"</span>
      ],
      <span class="hljs-attr">"coding_snippets"</span>: [
        <span class="hljs-string">"123456789import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",input: \"Write a one-sentence bedtime story about a unicorn.\"});console.log(response.output_text);"</span>,
        <span class="hljs-string">"123456789"</span>,
        <span class="hljs-string">"123456789from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\",input=\"Write a one-sentence bedtime story about a unicorn.\")print(response.output_text)"</span>,
        <span class="hljs-string">"1234567curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"input\": \"Write a one-sentence bedtime story about a unicorn.\" }'"</span>,
        <span class="hljs-string">"1234567"</span>,
        <span class="hljs-string">"1234567891011121314[ {\"id\": \"msg_67b73f697ba4819183a15cc17d011509\",\"type\": \"message\",\"role\": \"assistant\",\"content\": [ {\"type\": \"output_text\",\"text\": \"Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.\",\"annotations\": [] } ] }]"</span>,
        <span class="hljs-string">"1234567891011121314"</span>,
        <span class="hljs-string">"12345678910import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",instructions: \"Talk like a pirate.\",input: \"Are semicolons optional in JavaScript?\",});console.log(response.output_text);"</span>,
        <span class="hljs-string">"12345678910"</span>,
        <span class="hljs-string">"12345678910from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\", instructions=\"Talk like a pirate.\",input=\"Are semicolons optional in JavaScript?\",)print(response.output_text)"</span>,
        <span class="hljs-string">"12345678curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"instructions\": \"Talk like a pirate.\", \"input\": \"Are semicolons optional in JavaScript?\" }'"</span>,
        <span class="hljs-string">"12345678"</span>,
        <span class="hljs-string">"123456789101112131415161718import OpenAI from\"openai\";const client = new OpenAI();const response = await client.responses.create({model: \"gpt-4.1\",input: [ {role: \"developer\",content: \"Talk like a pirate.\" }, {role: \"user\",content: \"Are semicolons optional in JavaScript?\", }, ],});console.log(response.output_text);"</span>,
        <span class="hljs-string">"123456789101112131415161718"</span>,
        <span class="hljs-string">"123456789101112131415161718from openai import OpenAIclient = OpenAI()response = client.responses.create( model=\"gpt-4.1\",input=[ {\"role\": \"developer\",\"content\": \"Talk like a pirate.\" }, {\"role\": \"user\",\"content\": \"Are semicolons optional in JavaScript?\" } ])print(response.output_text)"</span>,
        <span class="hljs-string">"12345678910111213141516curl \"https://api.openai.com/v1/responses\" \\ -H \"Content-Type: application/json\" \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -d '{ \"model\": \"gpt-4.1\", \"input\": [ { \"role\": \"developer\", \"content\": \"Talk like a pirate.\" }, { \"role\": \"user\", \"content\": \"Are semicolons optional in JavaScript?\" } ] }'"</span>,
        <span class="hljs-string">"12345678910111213141516"</span>,
        <span class="hljs-string">"123456789101112131415161718192021222324# IdentityYou are coding assistant that helps enforce the use of snake case variables in JavaScript code, and writing code that will run in Internet Explorer version 6.# Instructions* When defining variables, use snake case names (e.g. my_variable) instead of camel case names (e.g. myVariable).* To support old browsers, declare variables using the older \"var\" keyword.* Do not give responses with Markdown formatting, just return the code as requested.# Examples&lt;user_query&gt;How do I declare a string variable for a first name?&lt;/user_query&gt;&lt;assistant_response&gt;var first_name = \"Anna\";&lt;/assistant_response&gt;"</span>,
        <span class="hljs-string">"123456789101112131415161718192021222324"</span>,
        <span class="hljs-string">"12345678910111213import fs from\"fs/promises\";import OpenAI from\"openai\";const client = new OpenAI();const instructions = await fs.readFile(\"prompt.txt\", \"utf-8\");const response = await client.responses.create({model: \"gpt-4.1\", instructions,input: \"How would I declare a variable for a last name?\",});console.log(response.output_text);"</span>,
        <span class="hljs-string">"12345678910111213"</span>,
        <span class="hljs-string">"12345678910111213from openai import OpenAIclient = OpenAI()withopen(\"prompt.txt\", \"r\", encoding=\"utf-8\") as f: instructions = f.read()response = client.responses.create( model=\"gpt-4.1\", instructions=instructions,input=\"How would I declare a variable for a last name?\",)print(response.output_text)"</span>,
        <span class="hljs-string">"12345678curl https://api.openai.com/v1/responses \\ -H \"Authorization: Bearer $OPENAI_API_KEY\" \\ -H \"Content-Type: application/json\" \\ -d '{ \"model\": \"gpt-4.1\", \"instructions\": \"'\"$(&lt; prompt.txt)\"'\", \"input\": \"How would I declare a variable for a last name?\" }'"</span>,
        <span class="hljs-string">"12345678910111213141516171819202122232425262728293031323334353637# IdentityYou are a helpful assistant that labels short product reviews as Positive, Negative, or Neutral.# Instructions* Only output a single word in your response with no additional formatting or commentary.* Your response should only be one of the words \"Positive\", \"Negative\", or \"Neutral\" depending on the sentiment of the product review you are given.# Examples&lt;product_review id=\"example-1\"&gt;I absolutely love this headphones — sound quality is amazing!&lt;/product_review&gt;&lt;assistant_response id=\"example-1\"&gt;Positive&lt;/assistant_response&gt;&lt;product_review id=\"example-2\"&gt;Battery life is okay, but the ear pads feel cheap.&lt;/product_review&gt;&lt;assistant_response id=\"example-2\"&gt;Neutral&lt;/assistant_response&gt;&lt;product_review id=\"example-3\"&gt;Terrible customer service, I'll never buy from them again.&lt;/product_review&gt;&lt;assistant_response id=\"example-3\"&gt;Negative&lt;/assistant_response&gt;"</span>,
        <span class="hljs-string">"12345678910111213141516171819202122232425262728293031323334353637"</span>,
        <span class="hljs-string">"123456789101112131415## PERSISTENCEYou are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.## TOOL CALLINGIf you are not sure about file content or codebase structure pertaining to the user's request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.## PLANNINGYou MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully."</span>,
        <span class="hljs-string">"123456789101112131415"</span>,
        <span class="hljs-string">"First, think carefully step by step about what documents are needed to answer the query. Then, print out the TITLE and ID of each document. Then, format the IDs into a list."</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"titles"</span>: [
        <span class="hljs-string">"h1.docs-markdown-page-title"</span>,
        <span class="hljs-string">"h2.anchor-heading"</span>,
        <span class="hljs-string">"div.docs-markdown-page-title"</span>,
        <span class="hljs-string">"div.docs-markdown-page-subtitle"</span>,
        <span class="hljs-string">"div.side-nav-header.subheading"</span>
      ],
      <span class="hljs-attr">"markdown_full_site"</span>: [
        <span class="hljs-string">"div.docs-markdown-content"</span>,
        <span class="hljs-string">"div.docs-markdown-page"</span>,
        <span class="hljs-string">"div.markdown-prompt-blockquote"</span>,
        <span class="hljs-string">"div.page-body"</span>,
        <span class="hljs-string">"div.docs-scroll-container"</span>
      ],
      <span class="hljs-attr">"coding_snippets"</span>: [
        <span class="hljs-string">"div.code-sample pre code"</span>,
        <span class="hljs-string">"div.code-block pre code"</span>,
        <span class="hljs-string">"pre code.language-javascript"</span>,
        <span class="hljs-string">"pre code.language-python"</span>,
        <span class="hljs-string">"pre code.language-bash"</span>
      ]
    }
    <span class="hljs-comment">// Additional lines truncated to fit</span>
  }
</code></pre>
<p>Firecrawl returns a false positive when attempting to scrape the OpenAI site, resulting in an empty dataset instead of an error. In contrast, JigsawStack successfully unblocks and scrapes the site as expected.</p>
<h2 id="heading-social-media">Social Media</h2>
<p>Site: <a target="_blank" href="https://www.reddit.com/r/ycombinator">https://www.reddit.com/r/ycombinator</a><br />Prompt: <code>["post_titles", "post_descriptions", "username"]</code></p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"result"</span>: {
    <span class="hljs-attr">"err"</span>: <span class="hljs-string">"Failed to scrape URL. Status code: 403. Error: This website is no longer supported, please reach out to help@firecrawl.com for more info on how to activate it on your account."</span>
  },
  <span class="hljs-attr">"timeTaken"</span>: <span class="hljs-number">156.6768340000017</span>,
  <span class="hljs-attr">"prompt"</span>: [<span class="hljs-string">"post_titles"</span>, <span class="hljs-string">"post_descriptions"</span>, <span class="hljs-string">"username"</span>],
  <span class="hljs-attr">"url"</span>: <span class="hljs-string">"https://www.reddit.com/r/ycombinator"</span>
}
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">6</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"post_titles"</span>: [
        <span class="hljs-string">"Writing is the most underrated marketing skill"</span>,
        <span class="hljs-string">"Has Tech Peaked?"</span>,
        <span class="hljs-string">"How competitive is it to get into the AI Startup School?"</span>,
        <span class="hljs-string">"What's easier to get into YC: FAANG or Founding Engg @ AI YC Company"</span>,
        <span class="hljs-string">"How do YC startups create such amazing launch Videos?"</span>,
        <span class="hljs-string">"Pitching to investors, what actually happens ?"</span>,
        <span class="hljs-string">"YC’s Summer 2025 “Request for Startups” Is Out. Here’s What They’re Betting Big On"</span>,
        <span class="hljs-string">"Do I need a non-technical cofounder?"</span>,
        <span class="hljs-string">"Telling People AI Will \"Take Your Job\" is Good Marketing."</span>,
        <span class="hljs-string">"My cofounder won’t quit his job, but I quit my master’s to go all in. Should I move ahead without him?"</span>,
        <span class="hljs-string">"Looking for a DocSend + Adobe Sign Hybrid: Link &amp; Email Send, Page Tracking, Reminders. Does It Exist?"</span>,
        <span class="hljs-string">"What's the average salary an YC founder pays themselves from the inital 500k?"</span>,
        <span class="hljs-string">"Testing monetization in MVP - is Buy Me a Coffee a good idea?"</span>,
        <span class="hljs-string">"Why is it so hard to find a technical cofounder?"</span>,
        <span class="hljs-string">"Is there a Trello for Agents?"</span>,
        <span class="hljs-string">"Burned Twice as a Technical Cofounder — Used and thrown away?"</span>,
        <span class="hljs-string">"What do YC startups look for in their founding engineers?"</span>,
        <span class="hljs-string">"What do you think about YC going all in on \"Vibe Coding\"?"</span>,
        <span class="hljs-string">"Are There Any Tech Billionaires Who Weren’t ‘Nerds’ Growing Up?"</span>,
        <span class="hljs-string">"The latest Y Combinator video gives a unique advice (I will not promote)"</span>,
        <span class="hljs-string">"Is Hackers and Painters still relevant today?"</span>,
        <span class="hljs-string">"Anyone with experience in YC, can you share whether your company would’ve been successful without it?"</span>,
        <span class="hljs-string">"what's a good salary for a founding engineer"</span>,
        <span class="hljs-string">"Any YC-backed founders keep their jobs while building their startup?"</span>,
        <span class="hljs-string">"How marketing have changed over the years"</span>,
        <span class="hljs-string">"Anybody doing anything with AI except a chatbot for x?"</span>,
        <span class="hljs-string">"More than 1,500 AI projects are now vulnerable to a silent exploit"</span>,
        <span class="hljs-string">"For VCs and Angels: What makes you think “This founder is going to make it?” - from the very first pitch?"</span>,
        <span class="hljs-string">"How soon can AI sales consultant SaaS can reach $100K in ARR?"</span>,
        <span class="hljs-string">"[Advice Request] First-time founder, just applied to YC S25 — solo, 36yo, no Ivy, still working. Is there a real shot?"</span>,
        <span class="hljs-string">"Finding your audience is 90% of the work"</span>,
        <span class="hljs-string">"Waitlist to Beta. Any tips ? 😬"</span>,
        <span class="hljs-string">"Is the “Moving Fast” advantage now dead?"</span>,
        <span class="hljs-string">"Are their any successful tech entrepreneurs with non-genius IQs?"</span>,
        <span class="hljs-string">"All AI-powered logo makers work fine only with English, is there a model that works well with Arabic and maybe Persian?"</span>,
        <span class="hljs-string">"Timing matters more than most founders think"</span>,
        <span class="hljs-string">"Who's building a full stack AI law firm?"</span>,
        <span class="hljs-string">"Could you share examples of co-founder agreements that worked for you?"</span>,
        <span class="hljs-string">"US incorporated companies - Do you foresee any change in investment landscape in the latest political environment?"</span>,
        <span class="hljs-string">"Will AI enable full stack startups?"</span>,
        <span class="hljs-string">"you should be reeducated on what marketing is"</span>,
        <span class="hljs-string">"Outbound email vs LinkedIn"</span>,
        <span class="hljs-string">"How to trail a cofounder?"</span>,
        <span class="hljs-string">"What’s the TAM, SAM and SOM for your startup that you mentioned in your YC application?"</span>,
        <span class="hljs-string">"Is the lack of a technical co-founder a dealbreaker for YC? We have revenue, traction, and a live product, but no technical co-founder (yet)"</span>,
        <span class="hljs-string">"Banking recommendations for startups with complex needs? We're struggling with fragmented financial tools."</span>,
        <span class="hljs-string">"Does anyone need help?"</span>,
        <span class="hljs-string">"What type of companies/industry do you think will be one of the biggest 10 years from now but doesn't exist at the moment."</span>,
        <span class="hljs-string">"I hope someone will guide me."</span>,
        <span class="hljs-string">"Why not for stock traders?"</span>,
        <span class="hljs-string">"What is the record for # of YC rejections? I've got 9 rejections with no interviews, been applying since 2012. Anybody got me beat?"</span>,
        <span class="hljs-string">"Startup hiring"</span>,
        <span class="hljs-string">"Is Y Combinator a self fulfilling prophecy?"</span>,
        <span class="hljs-string">"My freelancing client wants me to be CTO and apply for YC. What are my options?"</span>,
        <span class="hljs-string">"Spent a month solo-building, found out YC has funded a closely related competitor"</span>,
        <span class="hljs-string">"How do I pitch my startup to VCs, accelerators?"</span>,
        <span class="hljs-string">"Anybody have an internal AI SOP for teams yet?"</span>,
        <span class="hljs-string">"Equity Split in Non-Traditional Startup"</span>,
        <span class="hljs-string">"Is YC Still Hesitant About Solo Founders?"</span>,
        <span class="hljs-string">"Successful small (&lt;10 ppl) early-stage startups - how do you set goals and OKRs?"</span>,
        <span class="hljs-string">"First-time founder applying to YC — looking for advice"</span>,
        <span class="hljs-string">"How do you deal with the anxiety of \"its getting serious \" as a founder?"</span>,
        <span class="hljs-string">"Founders, what AI do you use to push your code to be production ready?"</span>,
        <span class="hljs-string">"When have you most successfully hacked a non-computer system to your advantage?"</span>,
        <span class="hljs-string">"What do you offer advisors?"</span>,
        <span class="hljs-string">"Anyone else going to YC’s AI Startup School in SF?"</span>,
        <span class="hljs-string">"Looking for the best resources on Product-Led Growth (PLG) — books, articles, frameworks?"</span>,
        <span class="hljs-string">"What Do You Make of the CPython/TypeScript Layoffs? Does Deep Technical Expertise Still Matter?"</span>,
        <span class="hljs-string">"How do early-stage teams handle policy and regulation?"</span>,
        <span class="hljs-string">"Is My Scripted AI Agent Demo Enough for Investors?"</span>,
        <span class="hljs-string">"Setting expectations for AI delivered services"</span>,
        <span class="hljs-string">"Startup during PhD"</span>,
        <span class="hljs-string">"Are YC startups building their RAG systems in-house or relying on third-party solutions?"</span>,
        <span class="hljs-string">"Bootstrapped FinTech startup: How to handle compliance and insurance costs"</span>,
        <span class="hljs-string">"How long does it take to close sales of 50-85k"</span>,
        <span class="hljs-string">"Super Voting Stock - How and when did you pull it off?"</span>,
        <span class="hljs-string">"When a family office invests in a startup, how much involvement in the process does the actual principal owner have?"</span>,
        <span class="hljs-string">"Building on Open Source software and commercializing it"</span>
      ],
      <span class="hljs-attr">"post_descriptions"</span>: [
        <span class="hljs-string">"One of the most useful things I ever did for my work was learn how to write clearly. Mot just casually, but intentionally. In a way that makes people stop scrolling, pay attention, and actually care.\n I started by handwriting old sales pages I found online. Word for word. It felt slow but something about it helped me pick up the rhythm of how good copy flows. I began noticing patterns. The short sentences. The unexpected word choices. Where they broke the rules on purpose.\n Later I read the book \"Influence\" by Robert Cialdini and everything made so much sense. Stuff like reciprocity, authority, and social proof started showing up everywhere. In ads, in posts, in landing pages. Even in comments on Reddit.\n It became easier to spot what was working and why. I could tell when something was trying too hard or when it landed perfectly.\n Writing well is not about sounding smart. It’s about making people feel understood and keeping their attention just long enough to move.\n Most of what people call marketing is really just writing with intention."</span>,
        <span class="hljs-string">"There was a time when coding in your college dorm could change your life — and maybe even make you a fortune. First came the software giants: Microsoft, Oracle, Adobe. Then the internet gold rush, social media, online platforms, Facebook, Twitter, Uber, Airbnb. It was all about scale.\n Now, we’re in the middle of the AI wave. It feels like the next trillion-dollar companies are being built right now.\n But it makes you wonder: Is there still room for new, groundbreaking ideas in tech? Or are we seeing the end of the era where a solo founder with a laptop can build the next big thing? Will the next generation of self-made billionaires still come from tech, or will they come from somewhere else ?\n I’m honestly curious: Are there still high-impact problems out there that a small team, or even a single person can solve? And does tech still offer the biggest path to massive wealth?"</span>,
        <span class="hljs-string">"Some kids from my high school got into the AI Startup School so I was wondering how competitive it is to get into it.\n These kids have built some \"startups\" in the past but they were GPT wrappers at best. Not sure if they framed it differently in the application though\n I've always been interested in Y Combinator but I never had any startup experince so I didn't bother to apply. I might apply next year but im just curious as to how competitive it is to get into the AI Startup School."</span>,
        <span class="hljs-string">"Got an offer as founding engineer from a yc company as well as Meta (don't know team yet). Which will help me crack yc more easily? I mean getting in and not the skills to build a successful startup (I'm thinking about that part separately rn). My understanding is that founding engineer at an ai yc startup is great and can still work, but traditionally faang is much better: the faang + &lt;25 + t5 cs grad (I don't actually fit this part) --&gt; yc is still a working pipeline."</span>,
        <span class="hljs-string">"Very Curious are these launch videos created by advertising companies or they use software for that?\n This is the one I loved the video creativity is amazing and the product is also ‘very valuable.\n PS : I have No affiliation with them whatsoever.\n YC X25 - minerva intelligence"</span>,
        <span class="hljs-string">"Who here has pitched to investors and can tell me what to expect. The only pitches i have seen are the ones on sharktank.\n Are there any real recorded pitches? How does it go how do i introduce myself etc. etc.\n Please give me an as clear as possible picture on what to expect :)"</span>,
        <span class="hljs-string">"YC just dropped their Summer 2025 RFS, and it’s a goldmine if you're into AI and future-facing infra.\n Here’s a quick TL;DR of the themes they’re hyped about:\n Core Themes:\n Full-Stack AI Startups – Not tools, but entire AI-native businesses (law firms, clinics, etc.)\n Designers as Founders – User-first design &gt; raw engineering in early stages\n Voice AI &amp; Personal Assistants – Kill the phone menu &amp; to-do list fatigue\n AI for Science &amp; Engineering – Help scientists &amp; pros get more done, faster\n Healthcare &amp; Gov Admin Automation – Huge pain points, ready to be solved\n Robotics’ “ChatGPT Moment” – Smarter control layers for robots\n Infra Bets – Stablecoin infra, chip design via LLMs, space ops\n Non-AI Job Empowerment – Not replacing, but augmenting humans\n They also want more independent AI labs (like an OpenAI 2.0), and internal AI agents for every employee.\n ........................................................................\n Why it matters: Feels like YC is saying “build the full thing, not a plugin.” They’re clearly over the AI-as-a-tool era and pushing for deep, vertical, market-disrupting companies.\n Curious:\n Which of these themes do you think will actually produce unicorns?\n Any of you building in these spaces already?\n Which ones feel like overhyped noise?"</span>,
        <span class="hljs-string">"I have years and years of experience doing software development services, running a dev agency, but I haven’t really had great success with a product, which is what I want to pursue. I’ve been trying to find a non-technical co-founder with no luck. But over time, I’ve heard the advice that I don’t actually need a non-technical co-founder, and I should ‘learn’ marketing myself.\n Do you think it’s good advice? The problem is I struggle with validating ideas, and don’t have experience in finding great ideas, building a community, etc. I’d love to hear your experiences. Did anybody had success being only technical founder?\n Edit: Thank you so much all for so many witty replies. They are really helpful, not just for me but for many others in the same boat."</span>,
        <span class="hljs-string">"Whether we like it or not, tech companies understand human psychology. And I'm convinced their latest trick is convincing everyone that AI will take your job.\n Think about how every one of these AI startup positions their product. They don't say \"here's a helpful tool\". They say \"here's your new virtual employee\".\n And this isn't an accident. It's anchoring.\n We all know this intuitively. Show me a $300 price tag, slash it to $150, and I feel like I'm getting a deal.\n By positioning AI as \"workers\" instead of tools, these companies turn a software purchase into a hiring decision. Which comes with built-in price anchors: human paycheques.\n 30k a year for software? No problem if it replaces 100k a year for a content writer.\n I'm not saying these tools aren't valuable. Many absolutely are. But I'm convinced the motivation to position them as \"AI workers\" is more about positioning than internal optimism."</span>,
        <span class="hljs-string">"I’m building an early-stage B2B SaaS startup and have gone all-in. I even quit my master’s at one of India’s premier institutes, from a program that could have easily landed me a ₹20+ LPA job ,because I believe in what we’re building and wanted to give it everything.\n My cofounder, however, wants to stay at his current job and contribute on the side. While he believes in the vision, he’s not ready to quit just yet, mainly due to the fear of risk. On top of that, his company has restrictions that make it difficult for us to collaborate freely even remotely.\n This puts us in a frustrating loop,no mvp - no investor interest - no full-time commitment - no mvp\n And it’s killing our momentum.\n whenever I want to talk it out, he just stays silent... eg. there was a 20 mins silence in our call today\n I’ve realized that unless we move fast, this could fade out before it even starts. I’m considering moving forward without him, either by restructuring his role to something like advisor or part-time contributor, or just building the MVP solo (maybe with freelancers or interns).\n Has anyone else dealt with this? How did you manage a cofounder who wasn’t ready to go full-time? Did you move ahead solo? Did it work out?\n Would love to hear real stories or advice from those who’ve been here."</span>,
        <span class="hljs-string">"Anyone know a tool that does all of the following well:\n Email + link-based document sharing\n Per-page engagement tracking\n Automated reminders\n I’ve tried DocSend, DocuSign, Adobe Sign, and PandaDoc and they all fall short in different ways.\nAdobe Sign lets me send a doc via both link and email, which I like but it lacks good analytics.\nDocSend has great tracking. It shows exactly how much time a person spends on each page but it doesn’t support reminders and only allows link sharing (no direct email).\nPandaDoc is similar: decent analytics, but the UI feels clunky and inconsistent.\nDocuSign just feels outdated and lacks depth in both tracking and multi-channel sharing.\n If DocSend had reminders and direct email send, I’d use it.If Adobe Sign had strong page-level analytics, I’d use it.\n They all suck in some key way!"</span>,
        <span class="hljs-string">"What's the average salary an YC founder pays themselves from the inital 500k?"</span>,
        <span class="hljs-string">"Heey everyone,\n I'm part of the team that's building Lifetoon, an AI-native platform for episodic visual storytelling in its MVP stage.\n We wanted to validate the idea as quickly as possible, so we launched before finalizing the Stripe integration. That means users can access the product, but we can’t charge them yet.\n As a temporary workaround, we added a Buy Me a Coffee link at the end of the user flow to test if there’s a willingness to pay.\n And, I'm curious - has anyone here tried something similar during the MVP phase? If you've used this approach, what was your experience like? Did it work, did it not?"</span>,
        <span class="hljs-string">"Feels like it's impossible to find a technical cofounder nowadays. I'm regularly coming up with what feel like solid ideas. I'm able to do the market research and get validation from real people. I'm able to come up with a business plan and marketing strategy. I'm able to fully design the UI and UX (I'm a senior product designer, 7+ YOE). I'm honestly not even that bad at programming, I've created a few working iOS MVPs, but I am definitely not able to build anything scalable. I have a solid network of industry connections and even some direct lines to angel investors but I fail so hard to find a technical partner. I feel so roadblocked because I can quite literally do everything else required except for developing an MVP to pitch for funding.\n For whatever reason, I have not been able to build a good network of software engineers in the US to lean on and finding a new person feels like a serious struggle. A lot of dev teams have started to become outsourced so I'm no longer making the same 1-1 connections with local engineers to work with. I'm not even looking for anything other than an even split and even have my own money I'm willing to invest.\n How are you guys finding tech cofounders?"</span>,
        <span class="hljs-string">"If the future of work is humans managing teams of agents, how will humans keep track of all the things their agents are doing?\n I noticed Linear launched \"Linear for Agents\" where you can assign issues to Agents and track their progress.\n Microsoft also launched \"AgentFeed\", which looks like simple task management for agents.\n Are any YC (or other) startups building a Trello, Monday or Asana focused on human/agent collaboration?"</span>,
        <span class="hljs-string">"Hey everyone,\n I wanted to share a couple of painful experiences I’ve had as a technical cofounder in hopes of hearing from other founders. This is gonna be a bit of long post but surely it's gonna present that not all is good being a technical founder.\n I'm a developer with over 5 years of experience, leading a team at an agency. I’m also a top-rated seller on a freelance platform and have had one of my products acquired, which gave me a lot of confidence to start building for myself.\n Last year (November), I connected with a guy here on Reddit. His idea was in the commercial real estate niche, more of a proven business model than a \"startup.\" We clicked, and I started working on the product purely on equity (around 18–24%).\n I didn’t just code—I brought in my resources: a designer, backend folks, QA. I built the whole platform myself, set it up in a test environment, made Loom walkthroughs... the works. But he started to go cold. He was supposed to scrap emails, reach out to potential users, and bring them in. That never happened. I kept nudging him to deploy and go live, but he didn’t have the energy. Now it’s May, and I’ve accepted that it’s probably dead. I was never paid. Never launched. I feel like free labor.\n Second time and same story, another experience was with a guy in the recruitment space. Really nice guy, great energy at the start. I built an internal tool platform for funding employee-led projects, allowing companies to gain equity in their internal innovations.\n Again, I brought in my designer, handled front end, backend, integrations—everything. And again, he disappeared without moving anything forward from his side.\n I know life gets in the way, and people have ups and downs. But I gave my best—multiple times—and got nothing out of it, not even the chance to launch.\n The recurring pattern is clear and it' I end up doing everything, and the other person stalls.\n I feel burnt. I’ve been contributing heavy dev + product work for free under the equity promise, only to realize my cofounders didn’t have the drive or bandwidth. I understand life happens — but when we’re supposed to build something together, it’s frustrating to be the only one pushing the boulder uphill.\n I live in Dubai and travel a lot between countries, which makes market access tough. I don’t have deep insight into Western industry gaps. That’s why I wanted to team up with someone focused on the problem space, while I bring the technical firepower.\n I’m good with money, not looking to monetize this with founders. But I don’t want to be taken for granted either.\n I do think that the value which I bring onboard is quite good but still feel stuck. Now I'm seriously considering building something of my own but the line is blurred because I'm already wearing multiple hats and don't want to put up another one of Sales and Relationship building. The other option which I'm not quite if it works or not is the fractional CTO thing, where I shoot for a smaller equity but seek funding so the other person is ALL-IN like me, although it's not the goal but might have someone serious as a partner otherwise Idk like how can I not be taken for granted."</span>,
        <span class="hljs-string">"Are YC startups open to take remote engineers from anywhere as part of their founding team?\n I am inclined to know what YC startups look for as I am on the lookout to switch and want to be a part of the core founding team where I can build with more authority.\n I have been working in startups majorly but YC working in YC startup just sounds a lot more interesting as most of the startups are working on breaking edge technology and mostly I have heard the work culture is good too as they are taught about how to structure work culture of their company by the advisors from YC, correct me if I am wrong.\n Apart from that, how much minimum experience do they require to consider an engineer a founding engineer?\n Are jack of all trades preferred more (full stack engineers) or specific roles?\n Would love to know from YC startup founders"</span>,
        <span class="hljs-string">"This week there was another video from YC, this time a practical guide to Vibe Coding, following this one. I feel like I'm taking crazy pills.\n If you follow r/ChatGPTCoding or similar channels, you'll see how incredibly not ready this approach to coding is in general, much less for high-growth startups at YC. Sure, I'm all for AI, but the term \"Vibe Coding\" has clear origins from a few months ago, and it implies that the AI is no longer a copilot, it's in the driver seat.\n Interested in opinions specifically with respect to YC."</span>,
        <span class="hljs-string">"I’m doing a school research project on tech billionaires for a class, and I have a question. It seems like most successful tech entrepreneurs were into tech or coding from a young age, but I’m curious—are there any who were just regular kids growing up? Maybe ones who weren’t coding at 10 or didn’t grow up as ‘geeks’ but still made it big in tech? I’m looking for examples of people who might have been considered ‘cool’ or ‘normal’ as kids and still became successful in the tech world. Are there any exceptions to the stereotype of the ‘tech geek’?"</span>,
        <span class="hljs-string">"It mentions that the pre AI era was for making sales without having the product on hand.\n Which where the idea validation and lean methodology like MVP comes in.\n But, now they suggest to focus on your passion and build whatever you want just by doing it long enough you would hit the relevant business model.\n This is an anti pattern of what most of the founders/builders have been trained on from almost a decade.\n What do you think? Should we not go for idea validations anymore and just keep building?\n Edit: Many of you asked for the You tube video link\n Startup Ideas You Can Now Build With AI - Skip to 37:15"</span>,
        <span class="hljs-string">"I want to get to know the community's thoughts on Hackers &amp; Painters in the AI world we live in today.\n And also —\n There’s one aspect I’m not sure Paul Graham touched on directly: the relationship between hackers and the job market.\n From my (limited) understanding of Hackers &amp; Painters, a \"hacker\" is someone who uses existing tools to build something fun or useful. They’re not necessarily domain experts — they’re just really good at building things.\n I’m having a hard time reconciling that idea with the way employment works. When I look at the job market today, even roles labeled as “generalist” seem to demand a specific kind of expertise. Day-to-day responsibilities often require deep specialization, which doesn’t always align with the hacker mindset.\n So I’m wondering — is the concept of the hacker still relevant in today’s employment landscape?"</span>,
        <span class="hljs-string">"YC has a lot of benefits, like a great network, and office hours for advice. However, there are also some drawbacks, like the equity they take in exchange for their investment, and the fact you really need to quit your day job to do it.\n I’m curious, for people that did YC, if they think they could’ve made their company successful without it in hindsight, and if they feel it was well worth it. How much did it accelerate your growth?\n For context: I have a day job (not in Cali), and am thinking about working on my startup on the side until it gets traction, and am unsure if YC is something I should apply for"</span>,
        <span class="hljs-string">"I might be getting an offer from a new seed yc startup in sf for a founding engineer role. their original range was 100-180k and 0.5-1.5% equity. The recruiter is encouraging me to go with 150k. Is that good? I'm a new grad (no non-internship experience besides a startup I built in sf last summer). I am interviewing with 3-5 other companies but no offers currently. Thoughts? Happy to provide more context. I'm pretty new to this!"</span>,
        <span class="hljs-string">"Curious if any Y Combinator–backed startups had founders who kept their day jobs (at least early on) while working on the company. I know YC likes full-time commitment, but are there known cases where a founder kept another job for financial or visa reasons?\n Would love to hear any stories or edge cases from past batches, especially during early traction or pre-funding.\nEdit: Just to clarify — I’m not talking about myself or anything. Just genuinely curious if this has ever happened. Not trying to argue against YC’s model. I actually do agree with founders dedicating 110% of their time if they believe in the idea. However, like I mentioned some people have restrictions such as Visas etc.."</span>,
        <span class="hljs-string">"1950–2000 / Advertising\n Marketing was mostly advertising. The television industry had the most eyeballs glued to it, and there were only a few channels where you could buy ad space and have it seen by millions. People rarely questioned TV ads, you could tell whatever story you wanted back then.\n 2000–2010 / Marketing 1.0 / SEO &amp; Email\n TV ads became too costly and less effective (too many channels, and the internet started stealing attention from TV). Startups during this era found a new source of traffic: banner ads on search engines. It began with ugly ads on Yahoo, then evolved into smooth, natural-looking ads on Google.\n 2010–2020 / Marketing 2.0 / Vitality\n Cost-per-click skyrocketed. At the same time, a new growth channel emerged: viral growth. Apps that encouraged users to upload their contacts saw unprecedented expansion. If each user invited just two more, this compound effect could grow a user base from thousands to tens of millions—entirely free.\n 2020–2030 / Marketing 3.0 / BIP\n As users grew tired of apps constantly requesting their contact info, a new growth model gained traction popularized by tools like Cursor. Instead of building your own audience, go where your audience already is and engage with them authentically. “Building in public” became the new standard. No ads, no long essays just build something valuable for a community you're already part of and share your journey. This even worked in politics, Trump leveraged this strategy to win the White House (compare his Lex Friedman podcast to Harris’s).\n 2030–2040 / Marketing 4.0 / Super Personalization Looks like we are going into a world where Ai will be able to identify the target niche one by one, but this is conjecture nothing more.\n P.S. The 10-year intervals are an approximation; reality is less neatly organized. Plus, there are tiny marketing mutations like forums &amp; PR which are not mentioned in this."</span>,
        <span class="hljs-string">"The hype around AI companies that are literally just wrappers on a chatbot is insane. It’s like investors saw ChatGPT and collectively lost their minds. I’ve never thought VCs were geniuses, but the FOMO right now is next level. They’re acting like panicked squirrels who see “AI” in a deck and throw money. It’s wild. You can just slap a prompt or semantic layer on an LLM and call it innovation. At some point, these companies have to return actual value with products with real revenue, right? Something’s gotta give.\n The horse may have been replaced by the car, but the airplane did not replace the car. Is ChatGPT an airplane? Where the current best use is a search query?"</span>,
        <span class="hljs-string">"According to the latest research by ARIMLABS[.]AI, a critical security vulnerability (CVE-2025-47241) has been discovered in the widely used Browser Use framework — a dependency leveraged by more than 1,500 AI projects.\n The issue enables zero-click agent hijacking, meaning an attacker can take control of an LLM-powered browsing agent simply by getting it to visit a malicious page — no user interaction required.\n This raises serious concerns about the current state of security in autonomous AI agents, especially those that interact with the web.\nWhat’s the community’s take on this? Is AI agent security getting the attention it deserves?\n (сompiled links)PoC and discussion: https://x.com/arimlabs/status/1924836858602684585Paper: https://arxiv.org/pdf/2505.13076GHSA: https://github.com/browser-use/browser-use/security/advisories/GHSA-x39x-9qw5-ghrfBlog Post: https://arimlabs.ai/news/the-hidden-dangers-of-browsing-ai-agentsEmail: research@arimlabs.ai"</span>,
        <span class="hljs-string">"Serious question for the VCs, angels, and repeat founders in here:\n When someone walks into the room (or Zoom) what actually makes you think, “This one’s different” or “This one’s going to make it far” ?\n I’m not talking about surface-level polish or buzzwords. I mean the deep, gut-level signals the moments where something clicks and you know this founder might be built different.\n Is it how they talk about the problem? The way they listen? A strange calm under fire? Or some irrational obsession that just oozes out of them when they talk about their market?\n And inversely, what tiny tells make you quietly disengage, even if the deck is solid?\n If you’ve ever had a pitch that stuck with you till this day, I’d love to hear why."</span>,
        <span class="hljs-string">"I started my saas for e-commerce clothing brands that help to increase conversion rate by bringing in retail shopping experience. I have different packages that start from $45-$150/monthly.Based on calculation i should have roughly around 300 paying customers.That is kind of big number and requires a lot of marketing and sales.\n How can i optimize my strategy and what would you do? Any suggestion on my sales and marketing?"</span>,
        <span class="hljs-string">"Hi all,I just submitted my YC Summer 2025 application a few days ago, and the more I research, the more I feel like I’m not what they’re looking for.\n I’m 36, not from an Ivy League school, married with kids, still working full-time, and currently a solo founder. I do have a close friend acting as an advisor who brought in one of our two design partners within the first few weeks. But I’m aware that “solo founder” is often seen as a red flag.\n That said, I built a fully working MVP in under 3 weeks — an AI reasoning engine.\n We’ve already landed 2 design partners in 4 weeks, and early GTM validation looks promising. But realistically, if I want to build this into a proper SaaS company, I’ll need anywhere from $500K to $1.5M, depending on how much of a go-to-market and support team I want to spin up.\n I’ve been a staff/principal-level engineer for 11 years and have good connections in enterprise IT, but I’ve never started a company before.\n If I don’t get into YC (which I’m mentally prepared for), how should I keep growing this? Should I focus on revenue, try bootstrapping, or chase angels directly? What’s the best path forward for someone like me — scrappy, late-30s, but deeply technical and moving fast?\n Would really appreciate any thoughts, criticism, or guidance.\n Thanks 🙏"</span>,
        <span class="hljs-string">"You can have the best product, the cleanest pitch, and great content. But if the right people never see it, it goes nowhere.\n Most people try a little bit of everything. A tweet here, a post there, maybe a blog. But if you don’t know who you’re actually trying to reach, you'll keep getting random results.\n When you finally figure out where your people hang out and how they talk, everything gets easier.\n You get more inbound leads. You'll keep getting DMs from people. People actually get what you do."</span>,
        <span class="hljs-string">"Hey everyone would love to hear your experience with this.\n We just launched our beta and while we had an engaged waitlist 3,000 ppl weekly newsletter , the actual conversion into beta testers has been lower than expected. We’re using TestFlight right now and doing personal outreach + email sequences, but it still feels like a bit of a drop-off.\n Curious what worked for you when converting a waitlist into active testers? Anything you’d do differently in hindsight?\n Happy to share more context if helpful. Appreciate any advice"</span>,
        <span class="hljs-string">"With the rise of vibe coding, you’re seeing people create and ship products in days (sometimes in just one afternoon), not months anymore. One defendable element everyone in this space previously had was the attitude of moving fast, being scrappy and the willingness to break things. But in this era of startups launching everyday, what is our moat now?"</span>,
        <span class="hljs-string">"Page, Gates, Brin, Zuckerberg, Musk, Bezos, Jobs, and many others did crazy things in their early lives indicative of “genius” IQ.\n Perfect SAT Scores\n Acceptance to Ivy Schools\n Skipping entire grades\n Has anyone ever succeeded in tech at this level without a genius level IQ or a rich family?"</span>,
        <span class="hljs-string">"So, for this project that I'm doing for a Dubai based company, I have to build an AI-powered logo maker (also brand kit, merchandise, etc.) that works best with Arabic and maybe Persian. Do I have to fine-tune a model? Is there a model that already works best with these languages?"</span>,
        <span class="hljs-string">"One thing that catches a lot of people off guard is how much timing affects GTM results. You launch too early and no one gets it. Too late and the market is already bored. If your timing is off by even a few months, the same product can feel either fresh or stale.\n We’ve seen teams with good ideas hit a wall because they shipped during a downturn, or because the hype wave had passed or because their early audience wasn’t ready yet.\n It’s not just about the product or the channel. It’s about when people are mentally open to trying something new.\n How do you know when it’s the right time to go all in?"</span>,
        <span class="hljs-string">"Noticed this in the Request for Startups.\n This week in the UK saw the launch of Garfield AI which got regulatory approval as a law firm but is effectively a chatbot to generate legal letters, not a full stack law firm.\n Is anyone building this?"</span>,
        <span class="hljs-string">"Hey all,\n I’m working with a cofounder on a very simple startup idea — pre-revenue but actively validating an MVP. We’ve got one potential customer lined up testing our software, and my tech cofounder is keen to incorporate very soon - likely in the UK - where we'd be both equal owners of a \"plc\". We’ve been working together consistently for a couple of months, and I want to make sure we set the right foundation now.\n I’m interested in lightweight, pre-incorporation agreements that help us stay aligned and avoid future misunderstandings — without over-engineering it. Things like:\n Ownership expectations and equity split (even if tentative). Vesting schedules included, in case someone leaves\n IP rights — especially as he's writing code\n What happens if one of us steps away or focuses on something else\n How we formalize contributions and time commitment\n Anything else you think would be needed\n I’ve seen people recommend founder agreements, collaboration agreements, but I have no idea of what's best. If you've been through this, I’d love to hear what worked for you (or what you wish you'd done differently).\n Thanks in advance!"</span>,
        <span class="hljs-string">"Tax or structure wise? Or ability to hire internationals?"</span>,
        <span class="hljs-string">"About a week ago, u/smart-hat-4679 posed a question: Who's building a full stack AI law firm?\n In a recent YC roundtable on the Lightcone podcast, Garry, Harj, Diana, and Jared explain why full stack services seems doable. 25 minutes into the discussion, Jared recalls the tech-enable service wave which boomed in the 2010's. They discuss how startups like Atrium and Triplebyte were able to scale up.\nThen around 30:32, Garry recalls a conversation from Justin: \"Look, we went in trying to use AI to automate large parts of (Atrium) and the AI wasn't good enough\" then says, \"but it's good enough now.\"\n There's a lot of positive change we've seen in the recent AI wave. Fundamentally, AI has unlocked the ability for everyone to do more with less.\nBut will AI enable full stack startups? My take is it depends on how the startup approaches AI. Consider this:\n Lemonade.com is a full stack insurance company which began April 2015. Lemonade does not hire employees to process claims for customers or uses brokers, instead using artificial intelligence and chatbots to process claims and handle customer service.\n Atrium was attempting to be a full stack legal company which began June 2017. But [Atrium hired around 35 lawyers] (https://web.archive.org/web/20180829060359/https://www.atrium.co/about) within a year after launch. Furthermore, Kan admits the pricing model may not have been right, saying on Twitter/X: \"We should have moved more quickly to a flat rate hourly model and iterated the business model. We didn't do enough turns of business model iteration quickly enough.\"\n Will AI enable full stack startups? Yes, and perhaps more will come in this wave than the last AI batch. But perhaps the contrasting story of Lemonade indicates that a full stack AI company could have been in existence 10 years ago. So while the \"why now\" is stronger to do an AI full stack startup today, it's not the only major problem a founder needs to solve."</span>,
        <span class="hljs-string">"I ran a post on startup subreddits looking for a startup in need of a marketing cofounder, I did well in my first startup but now I want to start another and rather do not do it alone. I got about a dozen DMs, many offering pay (which I didn't request), one offering %10 equity only!! and almost all of them were almost set on the what the product looks like even though they just started working on it last year!!\n You people are confusing startups with local retail. A founder is not a retail seller who buys something from a dev shop or from a \"CTO\" and then shoves it down the throat of bunch of people on the internet!!!\nMarketing = Product. Let me say that again! in early-stage startups, marketing and product are the exact same thing, you can't separate them into 2 different departments yet! in fact, if you smart at all, you should never separate them, because the day you do so is the day your business stagnates.\n Why do I say all of this? first because founders really need to know this shit. I assumed you already do honestly considering the 10 years Y combinator (and every decent book) been advocating this. It might slide if someone in hardware doesn't know this, but software!! come on people!\n Here are 2 reasons why you should never separate marketing and product in the first 5 years of a startup life:#1 You have no idea who your target market is exactly!While you discover this little by little, the product will change little by little also to meet them where they want to be (unless if they were born to buy your product haha).\n #2 You're positioning the product wrong, not because you don't know how to position it but every startup starts with an assumption that is always wrong. Infact, you first dozen assumptions on positioning are wrong. Take Twitch for example, they spent 5 years ignoring their true position (streaming for gamers). If Justin &amp; Michael got it wrong, so will you &amp; I.\n #3 Because every freaking great founder on earth said not to. They couldn't agree on 1 thing about politics, they couldn't agree if there is a freaking god, but every single one of them agreed on the fact that marketing=product. (Maybe silicon valley culture is not wrong to hate the word marketing, maybe I should stop using the term all together)\n If you still don't know what am talking about, feel free to ask more."</span>,
        <span class="hljs-string">"Hi,\n Where do you see the most success: outbound email vs outbound on LinkedIn?\n We are correctly doing cold outreach to enterprise companies"</span>,
        <span class="hljs-string">"Outside of the cliff period, how does one trial a potential later stage cofounder? Milestones?"</span>,
        <span class="hljs-string">"Just curious.\n How did you come up with that number?"</span>,
        <span class="hljs-string">"We are three non-technical founders based in Mexico. Together, we’ve built a live B2B SaaS product that is already generating revenue. We’ve signed 17 paying companies and currently serve around 5,000 users. All of our clients are in Mexico, and so far we’ve had zero churn and strong engagement.\n We built the MVP using no-code tools and limited freelance dev support. It is functional and stable. Customers are happy. But we know the current setup is not scalable long-term. We will need to rebuild to support automation, better performance, and more integrations.\nOur team:\n One founder with business and previous startup experience\n One with a background in healthcare and public health\n One with expertise in labor law, employee benefits, and business operations\n We've known each other and worked together for years and have built deep trust. That relationship has been key to moving fast and executing well. It is also the main reason we have not yet added an external technical co-founder. We have been very wary about bringing in someone without that same level of alignment and commitment.\nWhat we are debating now:\n Should we offer equity (5 to 10 percent) to a technical co-founder to lead the rebuild and future tech roadmap as well as potentially increasing our odds of getting into YC?\n Or hire a senior engineer or fractional CTO and pay a salary, even if it eats into our resources?\n Should we prioritize rebuilding the tech now, or continue focusing on sales and growth while the product is still performing?\n So, in summary:\n Is not having a technical co-founder at this stage a dealbreaker for YC?\n We are applying soon and want to be realistic. We have proven we can build, sell, and retain customers without one. But we know we are nearing the ceiling of what is possible without a dedicated technical leader. If we meet the right person in the next few weeks, we are open to bringing them in. But if not, would YC still consider backing a team like ours?\n We would really appreciate any insights from others who were accepted to YC without a technical co-founder, or from anyone who faced similar decisions.\n Thanks in advance."</span>,
        <span class="hljs-string">"We're a post-seed startup juggling a messy mix of bank accounts, corporate cards, and expense tools. It's gotten to the point where just closing the books takes days and we're worried it'll only get worse as we scale. Anyone found a banking setup that actually works for complex needs? Bonus if it integrates with accounting tools like QuickBooks..."</span>,
        <span class="hljs-string">"Hey everyone,\n I’m 18 and really interested in startups, entrepreneurship, and building cool things from the ground up. I’m looking to get involved with a startup in any way I can — I’ll help out wherever needed, learn fast, and bring a lot of energy and commitment.\n I’m not picky about the role or whether it’s paid — just want to gain experience, contribute to something real, and be around smart, driven people.\n If you’re working on something and need an extra pair of hands, feel free to DM or reply. Would love to chat!"</span>,
        <span class="hljs-string">"It seems like there are cycles of wealth creation, we see that with the robber barons who made their wealth with oil, steel, and the railroads, thanks to the industrial revolution, then if we look at the 80s, it was finance, with hedge funds, leveraged buyouts and private equity, more recently it was tech, with computers and software. What is the next cycle where captains of industries will emerge ?"</span>,
        <span class="hljs-string">"I’m the CTO and co-founder of a startup. When we first started, we built a simple MVP website. Later, my CEO asked me to develop a complete web solution that included user, chef, and admin panels. I was the only person handling the technical side including backend frontend and full architecture , but I managed to build the entire solution by myself. He also pressured me to finish everything within 2 months. I worked day and night, sleeping only 4–5 hours a day, because I believed that in a startup, you have to give it your all. Eventually, I completed the full application on my own.\n After that, he kept asking me to add new features. I implemented most of them, only to later realize that many weren’t being used by the chef and user. From the beginning, I suggested we talk to our users first.\n Now I have to maintain the entire platform, which has become more advanced than some of our competitors. Because I’m still working alone, fixing bugs and keeping things running takes a lot of time and effort.\n Recently, my CEO has also started forcing me to attend his meetings some of which I have no interest in. This is taking away valuable time I need for coding. I told him that if things continue like this, we need to bring in another co-founder who will help him. My ceo job so bring user and talk to investors. Instead, he insisted that I should attend two-hour meetings and code at the same time, arguing that since I’m a co-founder, I have to handle everything. When i get tired he told me i hit my limit.\n What should I do? Should I give up some of my equity and just stay on as the CTO.\n His last message: You should be working on your laptop now. Unless someone is dying ( i was at the hospital )."</span>,
        <span class="hljs-string">"I have seen startups in every segment with every possible ideas, but why not in stock market ? Why are YCs or founders, entrepreneurs not going for something in the field of stock market ?\n Lack of domain expertise?????\n Let me know your thoughts..\n Planning to build an ai agent that will assist the trader in live market like a coach. ( zerodha’s recent MCP made path much clear) We are already a team of 2 moving close to the launch of MVP If any ai ml engineers are up for discussion, dm me or comment here"</span>,
        <span class="hljs-string">"For the curious: First 5 were weather forecasting, then 1 social, the last 3 are my AI coding tool. Trying again this batch."</span>,
        <span class="hljs-string">"Wanted to understand the process of hiring in startups, which do not have dedicated hiring teams. How do you all manage it?"</span>,
        <span class="hljs-string">"So, for the last, what 20 years Y combinator has backed hundred of companies, some that work and some that didn't. That's a pretty big network, especially when you look at airbnb, instacart, reddit, etc. So is it what they teach or who they can connect you with? Who looks at your stuff? Is it all about their network or is their actual expertise their?"</span>,
        <span class="hljs-string">"Hey everyone\n So few months ago, I was hired by a guy to develop an app on a freelancing marketplace.\n The idea was like a “Rizz Calculator.” Basically, the user logs in and gets on a short voice call with a “mean girl” , and after 3–4 minutes, it scores your confidence or \"game\" out of 10.\n The point for him was to help people break the ice and get more comfortable in conversations with girls.\n I built it over ~3-4 months time frame and got fairly good compensated for it as well.\n Fast forward: the client recently hired an influencer with 120k followers on TikTok to make a UGC video for the app. I checked the backend today and noticed he’s actually gotten a few paying users and made $430 in revenue. Small numbers, but interesting considering no major marketing.\n Now the guy wants me to come on as CTO and double down on development. I'm honestly torn.\n On one hand, I already got paid for the original work, and I'm usually heads-down on freelance gigs that pay the bills. On the other hand… I have this proposal from his end with equity.\n Would love to hear thoughts from others who’ve been in a similar situation. When do you decide to go from “freelancer for hire” to “I guess I’m a cofounder now”?"</span>,
        <span class="hljs-string">"I am sure the answer is I’ll be fine, but I’ve been building out an idea I was super happy about. But then seems like YC funded a competitor within the last couple batches. They’re not direct, but in the same small space. What are my chances here - how can I answer how I’m different from competitors?"</span>,
        <span class="hljs-string">"I have recently been hired as an investor relations intern at a startup. They are asking me to pitch the company to VCs without much instruction. I want to cold email/message analysts and interns on LinkedIn, get in good with them, and eventually schedule a call with partners. What materials should I prepare for those meetings?"</span>,
        <span class="hljs-string">"Hey all!\n Since our inception as a company we’ve all used ai pretty extensively as a leverage multiplier.\n It’s (generally) worked great - but we are all very very experienced at what we do, so catching hallucinations/ proper prompting / direction has never been an issue.\n A couple of months ago we finalized a round and did some hiring.\n Yesterday, production crashed because some ai code that looked good enough to pass through our internal code review process got deployed.\n Obviously there are things to tighten up outside of an AI SOP, but certainly as we continue to expand, issues like this are going to continue to come up.\n Anybody in a similar situation?"</span>,
        <span class="hljs-string">"There are plenty of articles about how to split equity in a startup. For example, setting up vesting schedules, vesting cliffs, employee equity plans, etc.\n This seems geared towards traditional startups: one to a few full time founders who hire full time employees after raising their pre-seed round, etc.\n What about startups who are shooting for an unorthodox approach. Example: something like an open-sourced model with many part time contributors and a monetization strategy, but where the contributors are ultimately compensated with equity? There are many small investors who are product champions vs. institutional investors.\n How would you provide equity in a situation like this? Would piggybacking off of a crowdsourcing platform make sense? If so, which ones? It doesn't seem that they are really designed for something like this."</span>,
        <span class="hljs-string">"My last role was as a pre-sales solutions architect, have years of experience and was handling strategic accounts US-West, that means I spent 50% of my time coding, doing architecture design reviews and general technical stuff while the remaining 50% was sales, building champions, user interviews, scoping, qualifying and even pipeline generation.\n I feel like I am technical enough that I can build tools from ground up with the help of coding tools and I can also take care of sales when I am not coding at least in the initial phase.\n Like many others I am building in Enterprise AI and the people(ex-colleagues, friends etc) who believe in my vision are also building stuff and working on their ideas and people who are ready to work with me dont have the tools required and complement my skillset so I figured its better to work alone that having an eventual break up\n For anyone interested I am working on a tool which turns any website into an MCP server!"</span>,
        <span class="hljs-string">"Questions to small successful teams that operate in fast-moving environment. How do you deal with setting goals/OKRs?\n Are your goals super-aggressive and hard to achieve or rather more reachable?\n Do you discuss OKRs within whole team (dev/product and business together) or separately? How long does it take to decide on goals?\n Do you have weekly OKRs too? Do you discuss it with whole team?\n Plus - Do you organize daily? Is it for whole team (dev/product and business together) or separetely?\n Asking how to do that effectively when we have small team, want to be super effective and everything is changing so fast"</span>,
        <span class="hljs-string">"I’m a non-technical solo founder working on a two-sided marketplace in the creator economy. It targets a large and growing pain point for both sides of the market, and I’ve validated a strong emotional pull around the problem.\n I’m planning to apply to YC but I don’t have a tech cofounder (yet), and the product is still pre-MVP. I’ve been focused on user research, story building, and market insights. Monetization is clear, and I have a plan for early traction, but no product built yet.\n I know YC prefers teams and early traction — but I believe this is a genuinely large opportunity with a strong narrative.\nAnyone here have experience applying solo, pre-product?\n How much does not having a technical cofounder hurt?\n How do I best frame my application to highlight the opportunity and my strengths?\n Any tips for making the video stand out?\n Appreciate any honest advice."</span>,
        <span class="hljs-string">"Hi guys,\n I started working on an ai automation/ workflow product together with 2 others almost 4w ago.\n What started with a cool idea on how to make our own life's easier pretty much turned quite quickly in a product that can solve a lot of people their problems.\n If done correctly we can solve most businesses their automation requests in just natural language.\n We have had quite some interests from different professional fields already.\n i kind have this gut feeling we have something different here, i have worked on 6 business startups ideas before, most of them never scaled besides my last try. And this one just feels different in potential. Like i know we can do it.\n So how do you kind of deal with the performance anxiety?\n Like currently the imposter syndrome is just creeping in since i know we made something amazing. But execution on this is going to be very important in going to market etc.\n I know that its all about going to market and how to market / sale it. Knowing that we have a good product just makes me feel uneasy since i think this is going to turn into something quite serious quickly for us.\n Any advice's would be really appreciated !"</span>,
        <span class="hljs-string">"My cofounder and I vibe code with lovable, cursor, firebase studio. We have GCP credits from Google. We acknowledge vibe coding isn’t enough to be prod ready. Advise welcome. TIA"</span>,
        <span class="hljs-string">"I am not a YC but I heard this question in a podcast from an other YC grad. I loved it! and I'm curious to hear your answers."</span>,
        <span class="hljs-string">"Hi all,\n We’re currently working with a former CEO of a company that we hope to sell to. He’s already made valuable introductions and is helping us navigate early conversations (moderate intent so far). We’ve had three meetings with him and would like to keep him engaged as an advisor.\n However, he hasn’t asked for anything in return so far. I’d like your advice:\n Should we offer him the opportunity to angel invest in our round (perhaps at a discount)?\n Or should we offer some equity outright as an advisory grant?\n Is there a typical structure you use for this kind of lightweight engagement?\n Any best practices for nurturing advisor relationships early on?\n He may not become a major game-changer, but he’s clearly helpful and credible. I want to handle this professionally without over- or under-committing.\n Thanks in advance for any guidance!"</span>,
        <span class="hljs-string">"Hey everyone :)\n Super pumped to be heading to YC’s AI Startup School in San Francisco (June 16–17). I’ve heard a bunch of student founders are gonna be there, so I figured, t’d be cool to get a groupchat going!\n Idea is to make it easier to meet up before/after the events, plan some hangouts, and just connect with other builders who are in town.\n If you're going (or will be in SF that weekend), I made a LinkedIn Post, drop a comment there and I’ll DM you the GC link or just dm me here on Reddit :)https://www.linkedin.com/posts/harsha-not-hiring-gaddipati-032bb820a_whos-heading-to-yc-ai-startup-school-in-activity-7330238089426063361-fEAT\n So excited for June!!!!"</span>,
        <span class="hljs-string">"Hey all — I’m looking to level up on product-led growth and would love to tap into this community’s wisdom.\n What are the best books, essays, or frameworks you’ve found most helpful for truly understanding and executing PLG? I’m especially interested in tactical advice or stories from early-stage founders, particularly in B2B SaaS and AI infrastructure — but open to anything insightful.\n Big thanks in advance — happy to compile and share a summary here if there’s interest."</span>,
        <span class="hljs-string">"The recent layoffs of folks working on CPython and the TypeScript compiler have been sitting heavily with me—not because those engineers weren’t brilliant, but because their roles didn’t translate into enough real-world value (at least from their employers' perspectives).\n It brings up a few uncomfortable questions I wanted to throw out to this community:\nDeep Technical Expertise vs. Delivering Value\n These teams were working on the core infrastructure of tools used by millions of developers daily. Yet they were let go. Why?\n Their work didn’t drive clear, short-term business outcomes.\n The tools are already “good enough” for most use cases.\n Optimization beyond this point didn’t move key metrics.\n If you’re not building product or directly improving revenue/user experience, is it just too easy to be seen as \"non-essential\"?\n“Use Boring Tech” Principle Hits Different Now\n YC has always advised founders to:\n Use boring, proven tools.\n Avoid over-engineering.\n Focus on delivering value fast."</span>,
        <span class="hljs-string">"The idea I'm working on right now is pretty closely tied to a few active state bills, so I’ve been way more aware of policy/regulation than I have in past projects.\n For those of you in similar spots or in heavily regulated spaces, do you track legislation, work with a policy person/lobbying firm of some sort, or just deal with things as they come up?\n Curious how other early-stage teams handle this without it becoming a full-time job. It’s just me and my cofounder so we’re not trying to get too deep into it."</span>,
        <span class="hljs-string">"Hi all, I’d love some real feedback on my AI agent demo. I'm building a smart real estate ai agent in Arabic (specifically Egyptian dialect). The goal is to help users find properties by having a natural conversation — budget, location, needs, suggestions, etc. and closing deals\n What I Tried So Far:\n I first tried no-code tools like Voiceflow, but they were too limited and not smart enough for multi-turn logic.it was a generic chatbot and just wanted to see the workflow\n Then I tried building the entire thing offline in Python — full state management, memory, reasoning, rules, CSV property data, and response templates. It works, but it’s still rigid and not truly \"chatbot smart.\" And yes have to feed it messages related to the keywords in the ai logic\n I moved to Colab and integrated open-source models like Yehia-7B, DeepSeek, Meraj-Mini, etc. Some were too large for free-tier, others didn't respond naturally in Egyptian dialect or ignored the character prompt. I can’t afford GPT-4/ChatGPT API, and I have no proprietary data.\n So here’s my current setup:\n I’m going to record a full demo video of a “real” chat.\n The user prompts will be pre-written (scripted input).\n The AI agent’s answers will also be scripted (pre-written responses injected manually).\n I’ll use Gradio to simulate a real UI and type the demo lines live if needed.\n My Questions:\n Is this kind of demo good enough to show investors?\n I’m honest that it’s scripted.\n The backend code is real (the agent logic exists, it's just not fully AI-driven without good models).\n I just don’t have the specs, funds, or model power to run LLMs properly now.\n I don’t have real customer data to fine-tune.\n Is this smart bootstrapping or just over-engineering?\n Would you be convinced if you saw this demo video or tried it live with scripted responses behind the scenes?"</span>,
        <span class="hljs-string">"I run a service that uses AI to handle 95% of user interactions successfully. However, we've noticed that 75% of our exceptions come from users who expect our service to be fully responsible for their outcomes, even when they make mistakes or don't follow instructions.\n For example, users will blame the AI when they input incorrect information or skip reading important setup instructions, despite clear guidance being provided.\n We've improved our UX flows and created specialized AI agents for common issues, but we can't anticipate every edge case, and our price point doesn't support extensive human intervention.\n I've noticed these issues often come from users who:\n Have high control needs\n Want to dictate specific solutions\n Expect us to make their prescribed approach work\n Struggle with following sequential instructions\n Three specific challenges:\n Our AI isn't assertive enough with these difficult users\n The AI underestimates the probability of user error/confusion\n The users are not our customers, but they are the customers of our customers. So we don't get to choose them.\nQuestions:\n Has anyone developed effective messaging that sets appropriate service expectations for AI-delivered services?\n How do you communicate limitations without saying \"you're on your own if something goes wrong\"?\n What techniques help AI systems think more critically about user-reported issues (e.g., \"75% of wifi problems are password errors\") without becoming dismissive of legitimate problems?"</span>,
        <span class="hljs-string">"Bit of an unusual situation.\n I've identified a real pain point amongst researchers within academic publishing and a software/web app solution that would address them.\n I have prior experience in small startups and brand name startups prior to starting my PhD, and from that time I recall investors want you to be full time on the venture.\n However, I'm not as sure this applies in my unusual situation.\n Below is a list of context points why I think it might make more sense to do this part time and am wondering how I might raise money for this.\n the tool being built is an alternative platform to academic publishing meant to compete against open access and private journals by providing quality control mechanisms while monetizing rich statistics and AI training data. It is far easier to talk and convince academics to try this if I am also within academia and have academic credentials. Academics are going to be more skeptical of my credentials if I drop out of PhD to work on this.\n the R1 university I'm in has a interdisciplinary project funding program and this idea was judged by a panel of faculty to be very high potential for societal impact. As a result, it won a small grant that's enough to cover travel an tool expenses for the team. In addition, this also allows students here work on it for academic credit, giving access to very part time (10hrs/week) but talented labor. This would disappear if I left academia to do this full time.\n There are multiple people on the team right now who are faculty that can only commit part time.\n Given the above, does it make sense to try raising from VCs? What kind of VCs go for situations like this if any? Am I correct in my assessment that I would actually have a higher chance of pulling this off remaining in PhD and working on this part time with university resources instead of dropping out and going full time on this?"</span>,
        <span class="hljs-string">"I've been noticing that a growing number of YC startups are integrating RAGs in one form or another into their products—especially in SaaS tools that involve search, documentation, or support automation mainly in the B2B space\n Curious to know:\n Are most of these startups building their own RAG pipelines (e.g. custom vector databases, chunking strategies, ranking logic)?\n Or are they relying on third-party platforms like Vectara, LlamaIndex, Azure Search AI, etc.?\n Also, any insights on what pushed you toward one approach over the other. More concretely I am not getting the results I am looking for with a custom pipeline that I have built. And finetuning it is taking a lot longer than I expected to."</span>,
        <span class="hljs-string">"Hey everyone, We're starting to land some bigger clients in the FinTech space. We haven’t raised any money, but we’ve reached the point where compliance and business insurance are becoming necessary. A SOC 2 audit alone might cost more than the entire value of a 1-year contract — and that’s not even counting insurance and other requirements. How do other bootstrapped startups handle this? We've told the client we're in the process of getting these in place, but would love to hear how others have navigated this phase."</span>,
        <span class="hljs-string">"Hi, super noob founder here. We’re seeing that people are responding to our outbound and actually booking calls. For bigger companies (500-1k headcount), we’d like to quote 50-85k. We’re building browser agents for e2e testing and this price is usually based on how “big” their product is.\n However, we’d also like to fundraise. So closing deals fast so that we can show revenue is a priority for us.\n My question is, how long does it usually take for u as a founder to close deals where the customer is paying around 50-85k."</span>,
        <span class="hljs-string">"Have any founders here been able to get super-voting shares in their company? How did you pull it off? When did you institute it? Preseed, Seed etc. How did you justify it to investors? Any comment on the subject you would like to add to share would be greatly appreciated."</span>,
        <span class="hljs-string">"Anytime I see a headline of some iconic name investing in a technology company like:\n \"Howard Schultz (Starbucks CEO) invests in Wiz\"\"Bernard Arnault (LVMH) invests in AirBnB\"\n I imagine it's allocators at their family office heavily involved in the decision making, vetting, due diligence, etc...\n With that, how much involvement does the actual principal owner of the family office have?\n Like are Bernard Arnault/Howard Schultz/etc... literally unaware of the allocation until it appears as a line item on the funds holdings? Do they even meet with the founders at least once before closing out as a formality?"</span>,
        <span class="hljs-string">"Obviously it would be MIT license and appropriately designated in said app docs, etc. However I am wondering if there are any issues with this approach with essentially building on top of open source software, primarily for the MVP stage? I assume 90% of the code being spit out of Cursor is open source =] But I wanted to see if YC has funded companies approaching their initial product(s) with this strategy? Anything I should be aware of? If anyone has experience building on top of open source software I would appreciate hearing from you"</span>
      ],
      <span class="hljs-attr">"username"</span>: [
        <span class="hljs-string">"u/doublescoop24"</span>,
        <span class="hljs-string">"u/Hot-Conversation-437"</span>,
        <span class="hljs-string">"u/SignificantFig8856"</span>,
        <span class="hljs-string">"u/ten-stickers"</span>,
        <span class="hljs-string">"u/prism678"</span>,
        <span class="hljs-string">"u/chatgpt-undetected"</span>,
        <span class="hljs-string">"u/Dismal_Ad_6547"</span>,
        <span class="hljs-string">"u/tanzilhasan110"</span>,
        <span class="hljs-string">"u/eh-tk"</span>,
        <span class="hljs-string">"u/sigma_crusader"</span>,
        <span class="hljs-string">"u/Furious-Scientist"</span>,
        <span class="hljs-string">"u/Lupexlol"</span>,
        <span class="hljs-string">"u/Extension-Ad-174"</span>,
        <span class="hljs-string">"u/twotokers"</span>,
        <span class="hljs-string">"u/Smart-Hat-4679"</span>,
        <span class="hljs-string">"u/Cottonmouth6-9"</span>,
        <span class="hljs-string">"u/Superb_Syrup9532"</span>,
        <span class="hljs-string">"u/kealystudio"</span>,
        <span class="hljs-string">"u/Due-Tangelo-8704"</span>,
        <span class="hljs-string">"u/grandimam"</span>,
        <span class="hljs-string">"u/concernedhelp123"</span>,
        <span class="hljs-string">"u/Few-Cow-7149"</span>,
        <span class="hljs-string">"u/shoman30"</span>,
        <span class="hljs-string">"u/cjrun"</span>,
        <span class="hljs-string">"u/0xm3k"</span>,
        <span class="hljs-string">"u/Delicious-Exit-1194"</span>,
        <span class="hljs-string">"u/Murmurads"</span>,
        <span class="hljs-string">"u/valkla123"</span>,
        <span class="hljs-string">"u/Square-Hat7921"</span>,
        <span class="hljs-string">"u/Worldly-Box6080"</span>,
        <span class="hljs-string">"u/TheMinarctics"</span>,
        <span class="hljs-string">"u/redditugo"</span>,
        <span class="hljs-string">"u/mylifeforthehorde"</span>,
        <span class="hljs-string">"u/jdquey"</span>,
        <span class="hljs-string">"u/Electronic_Diver4841"</span>,
        <span class="hljs-string">"u/ExtraCharity"</span>,
        <span class="hljs-string">"u/general_learning"</span>,
        <span class="hljs-string">"u/Battlewombat"</span>,
        <span class="hljs-string">"u/uhmwtfxd"</span>,
        <span class="hljs-string">"u/Intelligent_Lab374"</span>,
        <span class="hljs-string">"u/zariyat_yaisn"</span>,
        <span class="hljs-string">"u/pavan_kona"</span>,
        <span class="hljs-string">"u/10ForwardShift"</span>,
        <span class="hljs-string">"u/No-Communication122"</span>,
        <span class="hljs-string">"u/Hot-League3088"</span>,
        <span class="hljs-string">"u/Comfortable-Visual-5"</span>,
        <span class="hljs-string">"u/gopnikchapri"</span>,
        <span class="hljs-string">"u/Flimsy-Revenue8579"</span>,
        <span class="hljs-string">"u/structured_obscurity"</span>,
        <span class="hljs-string">"u/dca12345"</span>,
        <span class="hljs-string">"u/lladhibhutall"</span>,
        <span class="hljs-string">"u/Agreeable_Release549"</span>,
        <span class="hljs-string">"u/Soft_Sorbet3447"</span>,
        <span class="hljs-string">"u/unknownstudentoflife"</span>,
        <span class="hljs-string">"u/Alternative-Cake7509"</span>,
        <span class="hljs-string">"u/n0thxbye"</span>,
        <span class="hljs-string">"u/penguinothepenguin"</span>,
        <span class="hljs-string">"u/dmpiergiacomo"</span>,
        <span class="hljs-string">"u/Oozzpp"</span>,
        <span class="hljs-string">"u/Ok-Watercress-451"</span>,
        <span class="hljs-string">"u/airhome_"</span>,
        <span class="hljs-string">"u/Hanuser"</span>,
        <span class="hljs-string">"u/krtcl"</span>,
        <span class="hljs-string">"u/Namhto"</span>,
        <span class="hljs-string">"u/shafinlearns2jam"</span>,
        <span class="hljs-string">"u/Westernleaning"</span>,
        <span class="hljs-string">"u/DoubleSkew"</span>,
        <span class="hljs-string">"u/Lucky-Astronomer-601"</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"post_titles"</span>: [
        <span class="hljs-string">"shreddit-post &gt; a[id^='post-title-']"</span>,
        <span class="hljs-string">"shreddit-post a.block.text-neutral-content-strong.font-semibold"</span>,
        <span class="hljs-string">"shreddit-post a[id^='post-title-'].block"</span>,
        <span class="hljs-string">"article[aria-label] a[id^='post-title-']"</span>,
        <span class="hljs-string">"shreddit-post &gt; a.block.text-neutral-content-strong"</span>
      ],
      <span class="hljs-attr">"post_descriptions"</span>: [
        <span class="hljs-string">"shreddit-post div.feed-card-text-preview"</span>,
        <span class="hljs-string">"shreddit-post div[id$='-post-rtjson-content']"</span>,
        <span class="hljs-string">"shreddit-post .feed-card-text-preview"</span>,
        <span class="hljs-string">"shreddit-post div.md.feed-card-text-preview"</span>,
        <span class="hljs-string">"shreddit-post div.text-14"</span>
      ],
      <span class="hljs-attr">"username"</span>: [
        <span class="hljs-string">"shreddit-post faceplate-hovercard a[href^='/user/'] span.whitespace-nowrap"</span>,
        <span class="hljs-string">"shreddit-post a[href^='/user/'] span.whitespace-nowrap"</span>,
        <span class="hljs-string">"shreddit-post faceplate-hovercard a[href^='/user/']"</span>,
        <span class="hljs-string">"shreddit-post faceplate-hovercard faceplate-tracker a[href^='/user/']"</span>,
        <span class="hljs-string">"shreddit-post .flex.items-center.text-neutral-content.font-bold span.whitespace-nowrap"</span>
      ]
    }
    <span class="hljs-comment">// Additional lines truncated to fit</span>
  }
</code></pre>
<p>Firecrawl failed to scrape the site, while JigsawStack accurately extracted the subreddit content into the structured keys we defined.</p>
<h2 id="heading-long-sitelist">Long site/list</h2>
<p>Site: <a target="_blank" href="https://startups.gallery/investors">https://startups.gallery/investors</a><br />Prompt: <code>["listing_names"]</code></p>
<p><strong>Firecrawl</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">"metadata"</span>: {
      <span class="hljs-attr">"ogImage"</span>: <span class="hljs-string">"https://framerusercontent.com/images/yGfVtptqyubkjpMwaBHkqSMic.jpg"</span>,
      <span class="hljs-attr">"viewport"</span>: <span class="hljs-string">"width=device-width"</span>,
      <span class="hljs-attr">"ogUrl"</span>: <span class="hljs-string">"https://startups.gallery/investors"</span>,
      <span class="hljs-attr">"og:type"</span>: <span class="hljs-string">"website"</span>,
      <span class="hljs-attr">"ogDescription"</span>: <span class="hljs-string">"Browse a list of today's top venture captial firms and angel investors actively investing in early-stage startups, from pre-seed to Series D. Top funds include Sequoia, Y Combinator, a16z, Accel, and more."</span>,
      <span class="hljs-attr">"og:title"</span>: <span class="hljs-string">"Top Startup Investors &amp; VC Firms | startups.gallery"</span>,
      <span class="hljs-attr">"twitter:title"</span>: <span class="hljs-string">"Top Startup Investors &amp; VC Firms | startups.gallery"</span>,
      <span class="hljs-attr">"title"</span>: <span class="hljs-string">"Top Startup Investors &amp; VC Firms | startups.gallery"</span>,
      <span class="hljs-attr">"og:url"</span>: <span class="hljs-string">"https://startups.gallery/investors"</span>,
      <span class="hljs-attr">"favicon"</span>: <span class="hljs-string">"https://framerusercontent.com/images/1OE6K46y0V4w9iTk6GUmIGkWO8k.png"</span>,
      <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Browse a list of today's top venture captial firms and angel investors actively investing in early-stage startups, from pre-seed to Series D. Top funds include Sequoia, Y Combinator, a16z, Accel, and more."</span>,
      <span class="hljs-attr">"ogTitle"</span>: <span class="hljs-string">"Top Startup Investors &amp; VC Firms | startups.gallery"</span>,
      <span class="hljs-attr">"robots"</span>: <span class="hljs-string">"max-image-preview:large"</span>,
      <span class="hljs-attr">"og:image"</span>: <span class="hljs-string">"https://framerusercontent.com/images/yGfVtptqyubkjpMwaBHkqSMic.jpg"</span>,
      <span class="hljs-attr">"twitter:image"</span>: <span class="hljs-string">"https://framerusercontent.com/images/yGfVtptqyubkjpMwaBHkqSMic.jpg"</span>,
      <span class="hljs-attr">"twitter:card"</span>: <span class="hljs-string">"summary_large_image"</span>,
      <span class="hljs-attr">"framer-search-index"</span>: <span class="hljs-string">"https://framerusercontent.com/sites/eQ8EfGgqmp8FpeXNnf1bo/searchIndex-CD1BcJMsvzGM.json"</span>,
      <span class="hljs-attr">"generator"</span>: <span class="hljs-string">"Framer 5b26096"</span>,
      <span class="hljs-attr">"og:description"</span>: <span class="hljs-string">"Browse a list of today's top venture captial firms and angel investors actively investing in early-stage startups, from pre-seed to Series D. Top funds include Sequoia, Y Combinator, a16z, Accel, and more."</span>,
      <span class="hljs-attr">"twitter:description"</span>: <span class="hljs-string">"Browse a list of today's top venture captial firms and angel investors actively investing in early-stage startups, from pre-seed to Series D. Top funds include Sequoia, Y Combinator, a16z, Accel, and more."</span>,
      <span class="hljs-attr">"language"</span>: <span class="hljs-string">"en-US"</span>,
      <span class="hljs-attr">"scrapeId"</span>: <span class="hljs-string">"c4ab89bf-c03e-4e46-8963-f4204c93cb66"</span>,
      <span class="hljs-attr">"sourceURL"</span>: <span class="hljs-string">"https://startups.gallery/investors"</span>,
      <span class="hljs-attr">"url"</span>: <span class="hljs-string">"https://startups.gallery/investors"</span>,
      <span class="hljs-attr">"statusCode"</span>: <span class="hljs-number">200</span>,
      <span class="hljs-attr">"proxyUsed"</span>: <span class="hljs-string">"stealth"</span>
    },
    <span class="hljs-attr">"json"</span>: {
      <span class="hljs-attr">"listing_names"</span>: [
        <span class="hljs-string">"01 Advisors"</span>,
        <span class="hljs-string">"1984 Ventures"</span>,
        <span class="hljs-string">"20SALES"</span>,
        <span class="hljs-string">"20VC"</span>,
        <span class="hljs-string">"42CAP"</span>,
        <span class="hljs-string">"468 Capital"</span>,
        <span class="hljs-string">"500 Global"</span>,
        <span class="hljs-string">"53 Stations"</span>,
        <span class="hljs-string">"62 Ventures"</span>,
        <span class="hljs-string">"8090 Industries"</span>,
        <span class="hljs-string">"83North"</span>,
        <span class="hljs-string">"8VC"</span>,
        <span class="hljs-string">"A*"</span>,
        <span class="hljs-string">"a16z"</span>,
        <span class="hljs-string">"Abstract Ventures"</span>,
        <span class="hljs-string">"Accel"</span>,
        <span class="hljs-string">"Accenture Ventures"</span>,
        <span class="hljs-string">"Accomplice VC"</span>,
        <span class="hljs-string">"ACME"</span>,
        <span class="hljs-string">"Acrew Capital"</span>,
        <span class="hljs-string">"Activant Capital"</span>,
        <span class="hljs-string">"Active Capital"</span>,
        <span class="hljs-string">"Adams Street Partners"</span>,
        <span class="hljs-string">"Addition"</span>,
        <span class="hljs-string">"Adjacent"</span>,
        <span class="hljs-string">"Adobe Ventures"</span>,
        <span class="hljs-string">"Adverb Ventures"</span>,
        <span class="hljs-string">"Afore Capital"</span>,
        <span class="hljs-string">"Aglaé Ventures"</span>,
        <span class="hljs-string">"AI Grant"</span>,
        <span class="hljs-string">"Align Ventures"</span>,
        <span class="hljs-string">"Alkeon Capital"</span>,
        <span class="hljs-string">"AlleyCorp"</span>,
        <span class="hljs-string">"Alpaca VC"</span>,
        <span class="hljs-string">"Alpha Square Group"</span>,
        <span class="hljs-string">"Alt Capital"</span>,
        <span class="hljs-string">"AltaiR Capital"</span>,
        <span class="hljs-string">"Altimeter Capital"</span>,
        <span class="hljs-string">"Altos Ventures"</span>,
        <span class="hljs-string">"Alumni Ventures"</span>,
        <span class="hljs-string">"Alven"</span>,
        <span class="hljs-string">"Amazon"</span>,
        <span class="hljs-string">"AMD"</span>,
        <span class="hljs-string">"Amplify Partners"</span>,
        <span class="hljs-string">"Anthos Capital"</span>,
        <span class="hljs-string">"Array VC"</span>,
        <span class="hljs-string">"Atlassian Ventures"</span>,
        <span class="hljs-string">"Atomic"</span>,
        <span class="hljs-string">"Atomico"</span>,
        <span class="hljs-string">"Audacious Ventures"</span>,
        <span class="hljs-string">"Avenir"</span>,
        <span class="hljs-string">"Avid Ventures"</span>,
        <span class="hljs-string">"Axeleo Capital"</span>,
        <span class="hljs-string">"Backstage Capital"</span>,
        <span class="hljs-string">"Bain Capital Ventures"</span>,
        <span class="hljs-string">"Balderton Capital"</span>,
        <span class="hljs-string">"Base10 Partners"</span>,
        <span class="hljs-string">"basecase capital"</span>,
        <span class="hljs-string">"Baseline Ventures"</span>,
        <span class="hljs-string">"Basis Set Ventures"</span>,
        <span class="hljs-string">"Battery Ventures"</span>,
        <span class="hljs-string">"Bedrock Capital"</span>,
        <span class="hljs-string">"Benchmark"</span>,
        <span class="hljs-string">"Benhamou Global Ventures"</span>,
        <span class="hljs-string">"Bessemer Venture Partners"</span>,
        <span class="hljs-string">"Betaworks Ventures"</span>,
        <span class="hljs-string">"Better Tomorrow Ventures"</span>,
        <span class="hljs-string">"Bezos Expeditions"</span>,
        <span class="hljs-string">"BFG Partners"</span>,
        <span class="hljs-string">"BGZ"</span>,
        <span class="hljs-string">"BITKRAFT"</span>,
        <span class="hljs-string">"Blackbird"</span>,
        <span class="hljs-string">"BlackRock"</span>,
        <span class="hljs-string">"Blackstone"</span>,
        <span class="hljs-string">"Blank Ventures"</span>,
        <span class="hljs-string">"Bling Capital"</span>,
        <span class="hljs-string">"Blitzscaling Ventures"</span>,
        <span class="hljs-string">"Bloomberg Beta"</span>,
        <span class="hljs-string">"Blossom Capital"</span>,
        <span class="hljs-string">"Blume Ventures"</span>,
        <span class="hljs-string">"boldstart ventures"</span>,
        <span class="hljs-string">"BOND Capital"</span>,
        <span class="hljs-string">"BoxGroup"</span>,
        <span class="hljs-string">"Breega"</span>,
        <span class="hljs-string">"Broadhaven Ventures"</span>,
        <span class="hljs-string">"Bungalow Capital"</span>,
        <span class="hljs-string">"Butterfly VC"</span>,
        <span class="hljs-string">"Caffeinated Capital"</span>,
        <span class="hljs-string">"Cambrian"</span>,
        <span class="hljs-string">"Canaan Partners"</span>,
        <span class="hljs-string">"Canapi Ventures"</span>,
        <span class="hljs-string">"Canvas Ventures"</span>,
        <span class="hljs-string">"CapitalG"</span>,
        <span class="hljs-string">"Cathay Innovation"</span>,
        <span class="hljs-string">"Charge Ventures"</span>,
        <span class="hljs-string">"Cherry Ventures"</span>,
        <span class="hljs-string">"Cintrifuse"</span>,
        <span class="hljs-string">"Citi Ventures"</span>,
        <span class="hljs-string">"City Light Capital"</span>,
        <span class="hljs-string">"Clocktower Ventures"</span>,
        <span class="hljs-string">"Coatue"</span>,
        <span class="hljs-string">"Coefficient Capital"</span>,
        <span class="hljs-string">"Collaborative Fund"</span>,
        <span class="hljs-string">"Commerce Ventures"</span>,
        <span class="hljs-string">"CommerzVentures"</span>,
        <span class="hljs-string">"Company Ventures"</span>,
        <span class="hljs-string">"Companyon Ventures"</span>,
        <span class="hljs-string">"Connect Ventures"</span>,
        <span class="hljs-string">"Construct Capital"</span>,
        <span class="hljs-string">"Contrary Capital"</span>,
        <span class="hljs-string">"Conversion Capital"</span>,
        <span class="hljs-string">"Conviction Capital"</span>,
        <span class="hljs-string">"Correlation Ventures"</span>,
        <span class="hljs-string">"Cortado Ventures"</span>,
        <span class="hljs-string">"Costanoa Ventures"</span>,
        <span class="hljs-string">"Courtside Ventures"</span>,
        <span class="hljs-string">"Cowboy Ventures"</span>,
        <span class="hljs-string">"Craft Ventures"</span>,
        <span class="hljs-string">"Crane Venture Partners"</span>,
        <span class="hljs-string">"Creandum"</span>,
        <span class="hljs-string">"Cross Creek"</span>,
        <span class="hljs-string">"CrowdStrike Ventures"</span>,
        <span class="hljs-string">"CRV"</span>,
        <span class="hljs-string">"Cursor Capital"</span>,
        <span class="hljs-string">"D1 Capital Partners"</span>,
        <span class="hljs-string">"Daring Ventures"</span>,
        <span class="hljs-string">"Day One Ventures"</span>,
        <span class="hljs-string">"Decent Capital"</span>,
        <span class="hljs-string">"Decibel Partners"</span>,
        <span class="hljs-string">"Deciens Capital"</span>,
        <span class="hljs-string">"Defined Capital"</span>,
        <span class="hljs-string">"Definition"</span>,
        <span class="hljs-string">"defy.vc"</span>,
        <span class="hljs-string">"Designer Fund"</span>,
        <span class="hljs-string">"DFJ Growth"</span>,
        <span class="hljs-string">"DG Daiwa Ventures"</span>,
        <span class="hljs-string">"Distributed Global"</span>,
        <span class="hljs-string">"Distributed Ventures"</span>,
        <span class="hljs-string">"DivcoWest"</span>,
        <span class="hljs-string">"Dragonfly"</span>,
        <span class="hljs-string">"Drive Capital"</span>,
        <span class="hljs-string">"Dropbox Ventures"</span>,
        <span class="hljs-string">"DST Global"</span>,
        <span class="hljs-string">"DVC"</span>,
        <span class="hljs-string">"e&amp; capital"</span>,
        <span class="hljs-string">"Earlybird VC"</span>,
        <span class="hljs-string">"EBRD VC"</span>,
        <span class="hljs-string">"Eclipse"</span>,
        <span class="hljs-string">"Educapital"</span>,
        <span class="hljs-string">"Eight Roads"</span>,
        <span class="hljs-string">"Elad Gil"</span>,
        <span class="hljs-string">"Elevation Capital"</span>,
        <span class="hljs-string">"Emblem"</span>,
        <span class="hljs-string">"Emergence Capital"</span>,
        <span class="hljs-string">"Energy Impact Partners"</span>,
        <span class="hljs-string">"Eniac Ventures"</span>,
        <span class="hljs-string">"Entrée Capital"</span>,
        <span class="hljs-string">"Epic Ventures"</span>,
        <span class="hljs-string">"EQT Ventures"</span>,
        <span class="hljs-string">"Equal Ventures"</span>,
        <span class="hljs-string">"Essence VC"</span>,
        <span class="hljs-string">"Evolution Equity Partners"</span>,
        <span class="hljs-string">"Expa"</span>,
        <span class="hljs-string">"Exponent"</span>,
        <span class="hljs-string">"F-Prime Capital"</span>,
        <span class="hljs-string">"F4 Fund"</span>,
        <span class="hljs-string">"Felicis"</span>,
        <span class="hljs-string">"Fidelity International Strategic Ventures"</span>,
        <span class="hljs-string">"Fifth Down Capital"</span>,
        <span class="hljs-string">"Fifth Wall"</span>,
        <span class="hljs-string">"Fin Capital"</span>,
        <span class="hljs-string">"FinTech Collective"</span>,
        <span class="hljs-string">"Firestreak Ventures"</span>,
        <span class="hljs-string">"First Round Capital"</span>,
        <span class="hljs-string">"First Spark Ventures"</span>,
        <span class="hljs-string">"FirstMark"</span>,
        <span class="hljs-string">"Firstminute Capital"</span>,
        <span class="hljs-string">"FJ Labs"</span>,
        <span class="hljs-string">"Floodgate"</span>,
        <span class="hljs-string">"Flourish Ventures"</span>,
        <span class="hljs-string">"Flume Ventures"</span>,
        <span class="hljs-string">"Flybridge"</span>,
        <span class="hljs-string">"Footwork VC"</span>,
        <span class="hljs-string">"Forerunner Ventures"</span>,
        <span class="hljs-string">"Foundation Capital"</span>,
        <span class="hljs-string">"Founders"</span>,
        <span class="hljs-string">"Founders Fund"</span>,
        <span class="hljs-string">"Founders Inc."</span>,
        <span class="hljs-string">"Foundry"</span>,
        <span class="hljs-string">"Framework Ventures"</span>,
        <span class="hljs-string">"Friends &amp; Family Capital"</span>,
        <span class="hljs-string">"Frontline Ventures"</span>,
        <span class="hljs-string">"FundersClub"</span>,
        <span class="hljs-string">"Future Positive"</span>,
        <span class="hljs-string">"Future Ventures"</span>,
        <span class="hljs-string">"G Squared"</span>,
        <span class="hljs-string">"Galaxy Ventures"</span>,
        <span class="hljs-string">"Garage"</span>,
        <span class="hljs-string">"Garuda Ventures"</span>,
        <span class="hljs-string">"General Atlantic"</span>,
        <span class="hljs-string">"General Catalyst"</span>,
        <span class="hljs-string">"Geodesic Capital"</span>,
        <span class="hljs-string">"Georgian"</span>,
        <span class="hljs-string">"Glade Brook Capital"</span>,
        <span class="hljs-string">"Glilot Capital Partners"</span>,
        <span class="hljs-string">"Goldman Sachs"</span>,
        <span class="hljs-string">"Goodwater Capital"</span>,
        <span class="hljs-string">"Gradient Ventures"</span>,
        <span class="hljs-string">"Grand Ventures"</span>,
        <span class="hljs-string">"GreatPoint Ventures"</span>,
        <span class="hljs-string">"Greenfield Partners"</span>,
        <span class="hljs-string">"Greenoaks"</span>,
        <span class="hljs-string">"Greycroft"</span>,
        <span class="hljs-string">"Greylock"</span>,
        <span class="hljs-string">"Grid Capital"</span>,
        <span class="hljs-string">"GV"</span>,
        <span class="hljs-string">"Hack VC"</span>,
        <span class="hljs-string">"Harlem Capital"</span>,
        <span class="hljs-string">"Harpoon Ventures"</span>,
        <span class="hljs-string">"Haun Ventures"</span>,
        <span class="hljs-string">"Hawke Ventures"</span>,
        <span class="hljs-string">"Haystack Ventures"</span>,
        <span class="hljs-string">"Headline"</span>,
        <span class="hljs-string">"Heartcore Capital"</span>,
        <span class="hljs-string">"Heavybit"</span>,
        <span class="hljs-string">"Hedosophia"</span>,
        <span class="hljs-string">"HF0"</span>,
        <span class="hljs-string">"High Alpha"</span>,
        <span class="hljs-string">"Highland Capital Partners"</span>,
        <span class="hljs-string">"Highland Europe"</span>,
        <span class="hljs-string">"HOF Capital"</span>,
        <span class="hljs-string">"Homebrew"</span>,
        <span class="hljs-string">"Horizons Ventures"</span>,
        <span class="hljs-string">"HubSpot Ventures"</span>,
        <span class="hljs-string">"Human Capital"</span>,
        <span class="hljs-string">"Human Ventures"</span>,
        <span class="hljs-string">"Hummingbird VC"</span>,
        <span class="hljs-string">"Hustle Fund"</span>,
        <span class="hljs-string">"HV Capital"</span>,
        <span class="hljs-string">"Hyphen Partners"</span>,
        <span class="hljs-string">"Icon Ventures"</span>,
        <span class="hljs-string">"ICONIQ Growth"</span>,
        <span class="hljs-string">"IDC Ventures"</span>,
        <span class="hljs-string">"Incore"</span>,
        <span class="hljs-string">"Index Ventures"</span>,
        <span class="hljs-string">"Indico Capital Partners"</span>,
        <span class="hljs-string">"Industry Ventures"</span>,
        <span class="hljs-string">"Infinity Ventures"</span>,
        <span class="hljs-string">"Initialized Capital"</span>,
        <span class="hljs-string">"Innovation Endeavors"</span>,
        <span class="hljs-string">"Inovia Capital"</span>,
        <span class="hljs-string">"Inovo VC"</span>,
        <span class="hljs-string">"Insight Partners"</span>,
        <span class="hljs-string">"Inspired Capital"</span>,
        <span class="hljs-string">"Intel Capital"</span>,
        <span class="hljs-string">"Irregular Expressions"</span>,
        <span class="hljs-string">"IVP"</span>,
        <span class="hljs-string">"J.P. Morgan"</span>,
        <span class="hljs-string">"Javelin Venture Partners"</span>,
        <span class="hljs-string">"Karman Ventures"</span>,
        <span class="hljs-string">"Khosla Ventures"</span>,
        <span class="hljs-string">"Kickstart Fund"</span>,
        <span class="hljs-string">"Kin Ventures"</span>,
        <span class="hljs-string">"Kindred Ventures"</span>,
        <span class="hljs-string">"Kleiner Perkins"</span>,
        <span class="hljs-string">"Koch Investments"</span>,
        <span class="hljs-string">"Korelya Capital"</span>,
        <span class="hljs-string">"KT"</span>,
        <span class="hljs-string">"L Catterton"</span>,
        <span class="hljs-string">"Lachy Groom"</span>,
        <span class="hljs-string">"Lakestar"</span>,
        <span class="hljs-string">"Latitude Capital"</span>,
        <span class="hljs-string">"Laude Ventures"</span>,
        <span class="hljs-string">"Lead Edge Capital"</span>,
        <span class="hljs-string">"Leadout Capital"</span>,
        <span class="hljs-string">"Left Lane Capital"</span>,
        <span class="hljs-string">"Lerer Hippeau"</span>,
        <span class="hljs-string">"LifeX Ventures"</span>,
        <span class="hljs-string">"Lightspeed"</span>,
        <span class="hljs-string">"Liquid 2 Ventures"</span>,
        <span class="hljs-string">"LiveOak Ventures"</span>,
        <span class="hljs-string">"Lobby Capital"</span>,
        <span class="hljs-string">"LocalGlobe"</span>,
        <span class="hljs-string">"Lone Pine Capital"</span>,
        <span class="hljs-string">"Long Journey Ventures"</span>,
        <span class="hljs-string">"Look Up Ventures"</span>,
        <span class="hljs-string">"Lorimer Ventures"</span>,
        <span class="hljs-string">"Lowercarbon Capital"</span>,
        <span class="hljs-string">"Lunar Ventures"</span>,
        <span class="hljs-string">"Lux Capital"</span>,
        <span class="hljs-string">"M12"</span>,
        <span class="hljs-string">"M13"</span>,
        <span class="hljs-string">"Madrona"</span>,
        <span class="hljs-string">"Mango Capital"</span>,
        <span class="hljs-string">"Mantis VC"</span>,
        <span class="hljs-string">"Matchstick Ventures"</span>,
        <span class="hljs-string">"Matrix Partners"</span>,
        <span class="hljs-string">"Maven Ventures"</span>,
        <span class="hljs-string">"Mayfield Fund"</span>,
        <span class="hljs-string">"Menlo Ventures"</span>,
        <span class="hljs-string">"Mercury Fund"</span>,
        <span class="hljs-string">"Meritech Capital"</span>,
        <span class="hljs-string">"MHS Capital"</span>,
        <span class="hljs-string">"Microsoft"</span>,
        <span class="hljs-string">"Moderne Ventures"</span>,
        <span class="hljs-string">"Molten Ventures"</span>,
        <span class="hljs-string">"Monogram Capital Partners"</span>,
        <span class="hljs-string">"Mosaic Ventures"</span>,
        <span class="hljs-string">"Motivate Venture Capital"</span>,
        <span class="hljs-string">"Motive Ventures"</span>,
        <span class="hljs-string">"Motley Fool Ventures"</span>,
        <span class="hljs-string">"Mouro Capital"</span>,
        <span class="hljs-string">"Move Capital"</span>,
        <span class="hljs-string">"Multicoin Capital"</span>,
        <span class="hljs-string">"MVP Ventures"</span>,
        <span class="hljs-string">"Mythos Ventures"</span>,
        <span class="hljs-string">"NAP VC"</span>,
        <span class="hljs-string">"Navitas Capital"</span>,
        <span class="hljs-string">"NEA"</span>,
        <span class="hljs-string">"Necessary Ventures"</span>,
        <span class="hljs-string">"Neo"</span>,
        <span class="hljs-string">"Neotribe Ventures"</span>,
        <span class="hljs-string">"Netflix"</span>,
        <span class="hljs-string">"New Wave VC"</span>,
        <span class="hljs-string">"Newion"</span>,
        <span class="hljs-string">"Next Play Ventures"</span>,
        <span class="hljs-string">"Next Ventures"</span>,
        <span class="hljs-string">"Next47"</span>,
        <span class="hljs-string">"Nexus Venture Partners"</span>,
        <span class="hljs-string">"NFDG Ventures"</span>,
        <span class="hljs-string">"NFX"</span>,
        <span class="hljs-string">"Northzone"</span>,
        <span class="hljs-string">"Norwest Venture Partners"</span>,
        <span class="hljs-string">"Notable Capital"</span>,
        <span class="hljs-string">"Notion Capital"</span>,
        <span class="hljs-string">"NVentures (Nvidia)"</span>,
        <span class="hljs-string">"O'Shaughnessy Ventures"</span>,
        <span class="hljs-string">"Oak HC/FT"</span>,
        <span class="hljs-string">"Obvious Ventures"</span>,
        <span class="hljs-string">"Octave"</span>,
        <span class="hljs-string">"Octopus Ventures"</span>,
        <span class="hljs-string">"Offline Ventures"</span>,
        <span class="hljs-string">"Okta Ventures"</span>,
        <span class="hljs-string">"Oliver Jung"</span>,
        <span class="hljs-string">"ONEVC"</span>,
        <span class="hljs-string">"OpenAI Startup Fund"</span>,
        <span class="hljs-string">"OpenView"</span>,
        <span class="hljs-string">"Operator Collective"</span>,
        <span class="hljs-string">"Operator Partners"</span>,
        <span class="hljs-string">"Oregon Venture Fund"</span>,
        <span class="hljs-string">"Origin Ventures"</span>,
        <span class="hljs-string">"Original Capital"</span>
      ]
    }
  }
</code></pre>
<p><strong>JigsawStack</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">5</span>,
    <span class="hljs-attr">"context"</span>: {
      <span class="hljs-attr">"listing_names"</span>: [
        <span class="hljs-string">"01 Advisors"</span>,
        <span class="hljs-string">"1984 Ventures"</span>,
        <span class="hljs-string">"20SALES"</span>,
        <span class="hljs-string">"20VC"</span>,
        <span class="hljs-string">"42CAP"</span>,
        <span class="hljs-string">"468 Capital"</span>,
        <span class="hljs-string">"500 Global"</span>,
        <span class="hljs-string">"53 Stations"</span>,
        <span class="hljs-string">"62 Ventures"</span>,
        <span class="hljs-string">"8090 Industries"</span>,
        <span class="hljs-string">"83North"</span>,
        <span class="hljs-string">"8VC"</span>,
        <span class="hljs-string">"A*"</span>,
        <span class="hljs-string">"a16z"</span>,
        <span class="hljs-string">"Abstract Ventures"</span>,
        <span class="hljs-string">"Accel"</span>,
        <span class="hljs-string">"Accenture Ventures"</span>,
        <span class="hljs-string">"Accomplice VC"</span>,
        <span class="hljs-string">"ACME"</span>,
        <span class="hljs-string">"Acrew Capital"</span>,
        <span class="hljs-string">"Activant Capital"</span>,
        <span class="hljs-string">"Active Capital"</span>,
        <span class="hljs-string">"Adams Street Partners"</span>,
        <span class="hljs-string">"Addition"</span>,
        <span class="hljs-string">"Adjacent"</span>,
        <span class="hljs-string">"Adobe Ventures"</span>,
        <span class="hljs-string">"Adverb Ventures"</span>,
        <span class="hljs-string">"Afore Capital"</span>,
        <span class="hljs-string">"Aglaé Ventures"</span>,
        <span class="hljs-string">"AI Grant"</span>,
        <span class="hljs-string">"Align Ventures"</span>,
        <span class="hljs-string">"Alkeon Capital"</span>,
        <span class="hljs-string">"AlleyCorp"</span>,
        <span class="hljs-string">"Alpaca VC"</span>,
        <span class="hljs-string">"Alpha Square Group"</span>,
        <span class="hljs-string">"Alt Capital"</span>,
        <span class="hljs-string">"AltaiR Capital"</span>,
        <span class="hljs-string">"Altimeter Capital"</span>,
        <span class="hljs-string">"Altos Ventures"</span>,
        <span class="hljs-string">"Alumni Ventures"</span>,
        <span class="hljs-string">"Alven"</span>,
        <span class="hljs-string">"Amazon"</span>,
        <span class="hljs-string">"AMD"</span>,
        <span class="hljs-string">"Amplify Partners"</span>,
        <span class="hljs-string">"Anthos Capital"</span>,
        <span class="hljs-string">"Array VC"</span>,
        <span class="hljs-string">"Atlassian Ventures"</span>,
        <span class="hljs-string">"Atomic"</span>,
        <span class="hljs-string">"Atomico"</span>,
        <span class="hljs-string">"Audacious Ventures"</span>,
        <span class="hljs-string">"Avenir"</span>,
        <span class="hljs-string">"Avid Ventures"</span>,
        <span class="hljs-string">"Axeleo Capital"</span>,
        <span class="hljs-string">"Backstage Capital"</span>,
        <span class="hljs-string">"Bain Capital Ventures"</span>,
        <span class="hljs-string">"Balderton Capital"</span>,
        <span class="hljs-string">"Base10 Partners"</span>,
        <span class="hljs-string">"basecase capital"</span>,
        <span class="hljs-string">"Baseline Ventures"</span>,
        <span class="hljs-string">"Basis Set Ventures"</span>,
        <span class="hljs-string">"Battery Ventures"</span>,
        <span class="hljs-string">"Bedrock Capital"</span>,
        <span class="hljs-string">"Benchmark"</span>,
        <span class="hljs-string">"Benhamou Global Ventures"</span>,
        <span class="hljs-string">"Bessemer Venture Partners"</span>,
        <span class="hljs-string">"Betaworks Ventures"</span>,
        <span class="hljs-string">"Better Tomorrow Ventures"</span>,
        <span class="hljs-string">"Bezos Expeditions"</span>,
        <span class="hljs-string">"BFG Partners"</span>,
        <span class="hljs-string">"BGZ"</span>,
        <span class="hljs-string">"BITKRAFT"</span>,
        <span class="hljs-string">"Blackbird"</span>,
        <span class="hljs-string">"BlackRock"</span>,
        <span class="hljs-string">"Blackstone"</span>,
        <span class="hljs-string">"Blank Ventures"</span>,
        <span class="hljs-string">"Bling Capital"</span>,
        <span class="hljs-string">"Blitzscaling Ventures"</span>,
        <span class="hljs-string">"Bloomberg Beta"</span>,
        <span class="hljs-string">"Blossom Capital"</span>,
        <span class="hljs-string">"Blume Ventures"</span>,
        <span class="hljs-string">"boldstart ventures"</span>,
        <span class="hljs-string">"BOND Capital"</span>,
        <span class="hljs-string">"BoxGroup"</span>,
        <span class="hljs-string">"Breega"</span>,
        <span class="hljs-string">"Broadhaven Ventures"</span>,
        <span class="hljs-string">"Bungalow Capital"</span>,
        <span class="hljs-string">"Butterfly VC"</span>,
        <span class="hljs-string">"Caffeinated Capital"</span>,
        <span class="hljs-string">"Cambrian"</span>,
        <span class="hljs-string">"Canaan Partners"</span>,
        <span class="hljs-string">"Canapi Ventures"</span>,
        <span class="hljs-string">"Canvas Ventures"</span>,
        <span class="hljs-string">"CapitalG"</span>,
        <span class="hljs-string">"Cathay Innovation"</span>,
        <span class="hljs-string">"Charge Ventures"</span>,
        <span class="hljs-string">"Cherry Ventures"</span>,
        <span class="hljs-string">"Cintrifuse"</span>,
        <span class="hljs-string">"Citi Ventures"</span>,
        <span class="hljs-string">"City Light Capital"</span>,
        <span class="hljs-string">"Clocktower Ventures"</span>,
        <span class="hljs-string">"Coatue"</span>,
        <span class="hljs-string">"Coefficient Capital"</span>,
        <span class="hljs-string">"Collaborative Fund"</span>,
        <span class="hljs-string">"Commerce Ventures"</span>,
        <span class="hljs-string">"CommerzVentures"</span>,
        <span class="hljs-string">"Company Ventures"</span>,
        <span class="hljs-string">"Companyon Ventures"</span>,
        <span class="hljs-string">"Connect Ventures"</span>,
        <span class="hljs-string">"Construct Capital"</span>,
        <span class="hljs-string">"Contrary Capital"</span>,
        <span class="hljs-string">"Conversion Capital"</span>,
        <span class="hljs-string">"Conviction Capital"</span>,
        <span class="hljs-string">"Correlation Ventures"</span>,
        <span class="hljs-string">"Cortado Ventures"</span>,
        <span class="hljs-string">"Costanoa Ventures"</span>,
        <span class="hljs-string">"Courtside Ventures"</span>,
        <span class="hljs-string">"Cowboy Ventures"</span>,
        <span class="hljs-string">"Craft Ventures"</span>,
        <span class="hljs-string">"Crane Venture Partners"</span>,
        <span class="hljs-string">"Creandum"</span>,
        <span class="hljs-string">"Cross Creek"</span>,
        <span class="hljs-string">"CrowdStrike Ventures"</span>,
        <span class="hljs-string">"CRV"</span>,
        <span class="hljs-string">"Cursor Capital"</span>,
        <span class="hljs-string">"D1 Capital Partners"</span>,
        <span class="hljs-string">"Daring Ventures"</span>,
        <span class="hljs-string">"Day One Ventures"</span>,
        <span class="hljs-string">"Decent Capital"</span>,
        <span class="hljs-string">"Decibel Partners"</span>,
        <span class="hljs-string">"Deciens Capital"</span>,
        <span class="hljs-string">"Defined Capital"</span>,
        <span class="hljs-string">"Definition"</span>,
        <span class="hljs-string">"defy.vc"</span>,
        <span class="hljs-string">"Designer Fund"</span>,
        <span class="hljs-string">"DFJ Growth"</span>,
        <span class="hljs-string">"DG Daiwa Ventures"</span>,
        <span class="hljs-string">"Distributed Global"</span>,
        <span class="hljs-string">"Distributed Ventures"</span>,
        <span class="hljs-string">"DivcoWest"</span>,
        <span class="hljs-string">"Dragonfly"</span>,
        <span class="hljs-string">"Drive Capital"</span>,
        <span class="hljs-string">"Dropbox Ventures"</span>,
        <span class="hljs-string">"DST Global"</span>,
        <span class="hljs-string">"DVC"</span>,
        <span class="hljs-string">"e&amp; capital"</span>,
        <span class="hljs-string">"Earlybird VC"</span>,
        <span class="hljs-string">"EBRD VC"</span>,
        <span class="hljs-string">"Eclipse"</span>,
        <span class="hljs-string">"Educapital"</span>,
        <span class="hljs-string">"Eight Roads"</span>,
        <span class="hljs-string">"Elad Gil"</span>,
        <span class="hljs-string">"Elevation Capital"</span>,
        <span class="hljs-string">"Emblem"</span>,
        <span class="hljs-string">"Emergence Capital"</span>,
        <span class="hljs-string">"Energy Impact Partners"</span>,
        <span class="hljs-string">"Eniac Ventures"</span>,
        <span class="hljs-string">"Entrée Capital"</span>,
        <span class="hljs-string">"Epic Ventures"</span>,
        <span class="hljs-string">"EQT Ventures"</span>,
        <span class="hljs-string">"Equal Ventures"</span>,
        <span class="hljs-string">"Essence VC"</span>,
        <span class="hljs-string">"Evolution Equity Partners"</span>,
        <span class="hljs-string">"Expa"</span>,
        <span class="hljs-string">"Exponent"</span>,
        <span class="hljs-string">"F-Prime Capital"</span>,
        <span class="hljs-string">"F4 Fund"</span>,
        <span class="hljs-string">"Felicis"</span>,
        <span class="hljs-string">"Fidelity International Strategic Ventures"</span>,
        <span class="hljs-string">"Fifth Down Capital"</span>,
        <span class="hljs-string">"Fifth Wall"</span>,
        <span class="hljs-string">"Fin Capital"</span>,
        <span class="hljs-string">"FinTech Collective"</span>,
        <span class="hljs-string">"Firestreak Ventures"</span>,
        <span class="hljs-string">"First Round Capital"</span>,
        <span class="hljs-string">"First Spark Ventures"</span>,
        <span class="hljs-string">"FirstMark"</span>,
        <span class="hljs-string">"Firstminute Capital"</span>,
        <span class="hljs-string">"FJ Labs"</span>,
        <span class="hljs-string">"Floodgate"</span>,
        <span class="hljs-string">"Flourish Ventures"</span>,
        <span class="hljs-string">"Flume Ventures"</span>,
        <span class="hljs-string">"Flybridge"</span>,
        <span class="hljs-string">"Footwork VC"</span>,
        <span class="hljs-string">"Forerunner Ventures"</span>,
        <span class="hljs-string">"Foundation Capital"</span>,
        <span class="hljs-string">"Founders"</span>,
        <span class="hljs-string">"Founders Fund"</span>,
        <span class="hljs-string">"Founders Inc."</span>,
        <span class="hljs-string">"Foundry"</span>,
        <span class="hljs-string">"Framework Ventures"</span>,
        <span class="hljs-string">"Friends &amp; Family Capital"</span>,
        <span class="hljs-string">"Frontline Ventures"</span>,
        <span class="hljs-string">"FundersClub"</span>,
        <span class="hljs-string">"Future Positive"</span>,
        <span class="hljs-string">"Future Ventures"</span>,
        <span class="hljs-string">"G Squared"</span>,
        <span class="hljs-string">"Galaxy Ventures"</span>,
        <span class="hljs-string">"Garage"</span>,
        <span class="hljs-string">"Garuda Ventures"</span>,
        <span class="hljs-string">"General Atlantic"</span>,
        <span class="hljs-string">"General Catalyst"</span>,
        <span class="hljs-string">"Geodesic Capital"</span>,
        <span class="hljs-string">"Georgian"</span>,
        <span class="hljs-string">"Glade Brook Capital"</span>,
        <span class="hljs-string">"Glilot Capital Partners"</span>,
        <span class="hljs-string">"Goldman Sachs"</span>,
        <span class="hljs-string">"Goodwater Capital"</span>,
        <span class="hljs-string">"Gradient Ventures"</span>,
        <span class="hljs-string">"Grand Ventures"</span>,
        <span class="hljs-string">"GreatPoint Ventures"</span>,
        <span class="hljs-string">"Greenfield Partners"</span>,
        <span class="hljs-string">"Greenoaks"</span>,
        <span class="hljs-string">"Greycroft"</span>,
        <span class="hljs-string">"Greylock"</span>,
        <span class="hljs-string">"Grid Capital"</span>,
        <span class="hljs-string">"GV"</span>,
        <span class="hljs-string">"Hack VC"</span>,
        <span class="hljs-string">"Harlem Capital"</span>,
        <span class="hljs-string">"Harpoon Ventures"</span>,
        <span class="hljs-string">"Haun Ventures"</span>,
        <span class="hljs-string">"Hawke Ventures"</span>,
        <span class="hljs-string">"Haystack Ventures"</span>,
        <span class="hljs-string">"Headline"</span>,
        <span class="hljs-string">"Heartcore Capital"</span>,
        <span class="hljs-string">"Heavybit"</span>,
        <span class="hljs-string">"Hedosophia"</span>,
        <span class="hljs-string">"HF0"</span>,
        <span class="hljs-string">"High Alpha"</span>,
        <span class="hljs-string">"Highland Capital Partners"</span>,
        <span class="hljs-string">"Highland Europe"</span>,
        <span class="hljs-string">"HOF Capital"</span>,
        <span class="hljs-string">"Homebrew"</span>,
        <span class="hljs-string">"Horizons Ventures"</span>,
        <span class="hljs-string">"HubSpot Ventures"</span>,
        <span class="hljs-string">"Human Capital"</span>,
        <span class="hljs-string">"Human Ventures"</span>,
        <span class="hljs-string">"Hummingbird VC"</span>,
        <span class="hljs-string">"Hustle Fund"</span>,
        <span class="hljs-string">"HV Capital"</span>,
        <span class="hljs-string">"Hyphen Partners"</span>,
        <span class="hljs-string">"Icon Ventures"</span>,
        <span class="hljs-string">"ICONIQ Growth"</span>,
        <span class="hljs-string">"IDC Ventures"</span>,
        <span class="hljs-string">"Incore"</span>,
        <span class="hljs-string">"Index Ventures"</span>,
        <span class="hljs-string">"Indico Capital Partners"</span>,
        <span class="hljs-string">"Industry Ventures"</span>,
        <span class="hljs-string">"Infinity Ventures"</span>,
        <span class="hljs-string">"Initialized Capital"</span>,
        <span class="hljs-string">"Innovation Endeavors"</span>,
        <span class="hljs-string">"Inovia Capital"</span>,
        <span class="hljs-string">"Inovo VC"</span>,
        <span class="hljs-string">"Insight Partners"</span>,
        <span class="hljs-string">"Inspired Capital"</span>,
        <span class="hljs-string">"Intel Capital"</span>,
        <span class="hljs-string">"Irregular Expressions"</span>,
        <span class="hljs-string">"IVP"</span>,
        <span class="hljs-string">"J.P. Morgan"</span>,
        <span class="hljs-string">"Javelin Venture Partners"</span>,
        <span class="hljs-string">"Karman Ventures"</span>,
        <span class="hljs-string">"Khosla Ventures"</span>,
        <span class="hljs-string">"Kickstart Fund"</span>,
        <span class="hljs-string">"Kin Ventures"</span>,
        <span class="hljs-string">"Kindred Ventures"</span>,
        <span class="hljs-string">"Kleiner Perkins"</span>,
        <span class="hljs-string">"Koch Investments"</span>,
        <span class="hljs-string">"Korelya Capital"</span>,
        <span class="hljs-string">"KT"</span>,
        <span class="hljs-string">"L Catterton"</span>,
        <span class="hljs-string">"Lachy Groom"</span>,
        <span class="hljs-string">"Lakestar"</span>,
        <span class="hljs-string">"Latitude Capital"</span>,
        <span class="hljs-string">"Laude Ventures"</span>,
        <span class="hljs-string">"Lead Edge Capital"</span>,
        <span class="hljs-string">"Leadout Capital"</span>,
        <span class="hljs-string">"Left Lane Capital"</span>,
        <span class="hljs-string">"Lerer Hippeau"</span>,
        <span class="hljs-string">"LifeX Ventures"</span>,
        <span class="hljs-string">"Lightspeed"</span>,
        <span class="hljs-string">"Liquid 2 Ventures"</span>,
        <span class="hljs-string">"LiveOak Ventures"</span>,
        <span class="hljs-string">"Lobby Capital"</span>,
        <span class="hljs-string">"LocalGlobe"</span>,
        <span class="hljs-string">"Lone Pine Capital"</span>,
        <span class="hljs-string">"Long Journey Ventures"</span>,
        <span class="hljs-string">"Look Up Ventures"</span>,
        <span class="hljs-string">"Lorimer Ventures"</span>,
        <span class="hljs-string">"Lowercarbon Capital"</span>,
        <span class="hljs-string">"Lunar Ventures"</span>,
        <span class="hljs-string">"Lux Capital"</span>,
        <span class="hljs-string">"M12"</span>,
        <span class="hljs-string">"M13"</span>,
        <span class="hljs-string">"Madrona"</span>,
        <span class="hljs-string">"Mango Capital"</span>,
        <span class="hljs-string">"Mantis VC"</span>,
        <span class="hljs-string">"Matchstick Ventures"</span>,
        <span class="hljs-string">"Matrix Partners"</span>,
        <span class="hljs-string">"Maven Ventures"</span>,
        <span class="hljs-string">"Mayfield Fund"</span>,
        <span class="hljs-string">"Menlo Ventures"</span>,
        <span class="hljs-string">"Mercury Fund"</span>,
        <span class="hljs-string">"Meritech Capital"</span>,
        <span class="hljs-string">"MHS Capital"</span>,
        <span class="hljs-string">"Microsoft"</span>,
        <span class="hljs-string">"Moderne Ventures"</span>,
        <span class="hljs-string">"Molten Ventures"</span>,
        <span class="hljs-string">"Monogram Capital Partners"</span>,
        <span class="hljs-string">"Mosaic Ventures"</span>,
        <span class="hljs-string">"Motivate Venture Capital"</span>,
        <span class="hljs-string">"Motive Ventures"</span>,
        <span class="hljs-string">"Motley Fool Ventures"</span>,
        <span class="hljs-string">"Mouro Capital"</span>,
        <span class="hljs-string">"Move Capital"</span>,
        <span class="hljs-string">"Multicoin Capital"</span>,
        <span class="hljs-string">"MVP Ventures"</span>,
        <span class="hljs-string">"Mythos Ventures"</span>,
        <span class="hljs-string">"NAP VC"</span>,
        <span class="hljs-string">"Navitas Capital"</span>,
        <span class="hljs-string">"NEA"</span>,
        <span class="hljs-string">"Necessary Ventures"</span>,
        <span class="hljs-string">"Neo"</span>,
        <span class="hljs-string">"Neotribe Ventures"</span>,
        <span class="hljs-string">"Netflix"</span>,
        <span class="hljs-string">"New Wave VC"</span>,
        <span class="hljs-string">"Newion"</span>,
        <span class="hljs-string">"Next Play Ventures"</span>,
        <span class="hljs-string">"Next Ventures"</span>,
        <span class="hljs-string">"Next47"</span>,
        <span class="hljs-string">"Nexus Venture Partners"</span>,
        <span class="hljs-string">"NFDG Ventures"</span>,
        <span class="hljs-string">"NFX"</span>,
        <span class="hljs-string">"Northzone"</span>,
        <span class="hljs-string">"Norwest Venture Partners"</span>,
        <span class="hljs-string">"Notable Capital"</span>,
        <span class="hljs-string">"Notion Capital"</span>,
        <span class="hljs-string">"NVentures (Nvidia)"</span>,
        <span class="hljs-string">"O'Shaughnessy Ventures"</span>,
        <span class="hljs-string">"Oak HC/FT"</span>,
        <span class="hljs-string">"Obvious Ventures"</span>,
        <span class="hljs-string">"Octave"</span>,
        <span class="hljs-string">"Octopus Ventures"</span>,
        <span class="hljs-string">"Offline Ventures"</span>,
        <span class="hljs-string">"Okta Ventures"</span>,
        <span class="hljs-string">"Oliver Jung"</span>,
        <span class="hljs-string">"ONEVC"</span>,
        <span class="hljs-string">"OpenAI Startup Fund"</span>,
        <span class="hljs-string">"OpenView"</span>,
        <span class="hljs-string">"Operator Collective"</span>,
        <span class="hljs-string">"Operator Partners"</span>,
        <span class="hljs-string">"Oregon Venture Fund"</span>,
        <span class="hljs-string">"Origin Ventures"</span>,
        <span class="hljs-string">"Original Capital"</span>,
        <span class="hljs-string">"OSS Capital"</span>,
        <span class="hljs-string">"OTB Ventures"</span>,
        <span class="hljs-string">"Outset Capital"</span>,
        <span class="hljs-string">"Outsiders Fund"</span>,
        <span class="hljs-string">"Pace Capital"</span>,
        <span class="hljs-string">"Pale blue dot"</span>,
        <span class="hljs-string">"Panache Ventures"</span>,
        <span class="hljs-string">"Pantera Capital"</span>,
        <span class="hljs-string">"Paradigm"</span>,
        <span class="hljs-string">"Parkway Venture Capital"</span>,
        <span class="hljs-string">"Partech"</span>,
        <span class="hljs-string">"Passion Capital"</span>,
        <span class="hljs-string">"Peak XV"</span>,
        <span class="hljs-string">"PeakSpan Capital"</span>,
        <span class="hljs-string">"Pear VC"</span>,
        <span class="hljs-string">"pebblebed"</span>,
        <span class="hljs-string">"Pelion Venture Partners"</span>,
        <span class="hljs-string">"PHX Ventures"</span>,
        <span class="hljs-string">"Picus Capital"</span>,
        <span class="hljs-string">"Pillar VC"</span>,
        <span class="hljs-string">"Pioneer Fund"</span>,
        <span class="hljs-string">"Plural"</span>,
        <span class="hljs-string">"Point Nine"</span>,
        <span class="hljs-string">"Point72 Ventures"</span>,
        <span class="hljs-string">"Polaris Partners"</span>,
        <span class="hljs-string">"Polychain Capital"</span>,
        <span class="hljs-string">"Portage"</span>,
        <span class="hljs-string">"Powerhouse Ventures"</span>,
        <span class="hljs-string">"Precursor Ventures"</span>,
        <span class="hljs-string">"Premji Invest"</span>,
        <span class="hljs-string">"Preston-Werner Ventures"</span>,
        <span class="hljs-string">"Primary"</span>,
        <span class="hljs-string">"Project A"</span>,
        <span class="hljs-string">"Prometheus Fund"</span>,
        <span class="hljs-string">"Prosus Ventures"</span>,
        <span class="hljs-string">"Pruven Capital"</span>,
        <span class="hljs-string">"Prysm Capital"</span>,
        <span class="hljs-string">"QED"</span>,
        <span class="hljs-string">"Quad Partners"</span>,
        <span class="hljs-string">"Quadrille Capital"</span>,
        <span class="hljs-string">"Quiet Capital"</span>,
        <span class="hljs-string">"Race Capital"</span>,
        <span class="hljs-string">"Radical Ventures"</span>,
        <span class="hljs-string">"Reach Capital"</span>,
        <span class="hljs-string">"Rebel Fund"</span>,
        <span class="hljs-string">"Rebellion Ventures"</span>,
        <span class="hljs-string">"Redpoint Ventures"</span>,
        <span class="hljs-string">"Renegade Partners"</span>,
        <span class="hljs-string">"Ribbit Capital"</span>,
        <span class="hljs-string">"Ridge Ventures"</span>,
        <span class="hljs-string">"Riot Ventures"</span>,
        <span class="hljs-string">"Ritual Capital"</span>,
        <span class="hljs-string">"Robot Ventures"</span>,
        <span class="hljs-string">"Roche Venture Fund"</span>,
        <span class="hljs-string">"Rogue Capital"</span>,
        <span class="hljs-string">"Root Ventures"</span>,
        <span class="hljs-string">"RSquared VC"</span>,
        <span class="hljs-string">"RTP Global"</span>,
        <span class="hljs-string">"Rubio Impact Ventures"</span>,
        <span class="hljs-string">"S32"</span>,
        <span class="hljs-string">"Saga Ventures"</span>,
        <span class="hljs-string">"Sam Altman"</span>,
        <span class="hljs-string">"Sapphire Ventures"</span>,
        <span class="hljs-string">"Scale Venture Partners"</span>,
        <span class="hljs-string">"SciFi VC"</span>,
        <span class="hljs-string">"ScOp Venture Capital"</span>,
        <span class="hljs-string">"Scribble Ventures"</span>,
        <span class="hljs-string">"Script Capital"</span>,
        <span class="hljs-string">"Seedcamp"</span>,
        <span class="hljs-string">"SemperVirens"</span>,
        <span class="hljs-string">"Sequoia"</span>,
        <span class="hljs-string">"Seven Seven Six"</span>,
        <span class="hljs-string">"SHAKTI"</span>,
        <span class="hljs-string">"Shield Capital"</span>,
        <span class="hljs-string">"Shinhan Venture Investment"</span>,
        <span class="hljs-string">"Shopify Ventures"</span>,
        <span class="hljs-string">"SIERRA Ventures"</span>,
        <span class="hljs-string">"SignalFire"</span>,
        <span class="hljs-string">"Silas Capital"</span>,
        <span class="hljs-string">"Silicon Catalyst"</span>,
        <span class="hljs-string">"Singular VC"</span>,
        <span class="hljs-string">"Slow Ventures"</span>,
        <span class="hljs-string">"SNR"</span>,
        <span class="hljs-string">"Socii Capital"</span>,
        <span class="hljs-string">"SoftBank Vision Fund"</span>,
        <span class="hljs-string">"Soma Capital"</span>,
        <span class="hljs-string">"Sorenson Capital"</span>,
        <span class="hljs-string">"Sound Ventures"</span>,
        <span class="hljs-string">"South Park Commons"</span>,
        <span class="hljs-string">"Sozo Ventures"</span>,
        <span class="hljs-string">"Spark Capital"</span>,
        <span class="hljs-string">"Speedinvest"</span>,
        <span class="hljs-string">"Sprints Capital"</span>,
        <span class="hljs-string">"Square Peg"</span>,
        <span class="hljs-string">"Stage 2 Capital"</span>,
        <span class="hljs-string">"StageOne Ventures"</span>,
        <span class="hljs-string">"Starship Ventures"</span>,
        <span class="hljs-string">"Steadview Capital"</span>,
        <span class="hljs-string">"Stellation Capital"</span>,
        <span class="hljs-string">"StepStone Group"</span>,
        <span class="hljs-string">"Sterling Road"</span>,
        <span class="hljs-string">"Streamlined Ventures"</span>,
        <span class="hljs-string">"Stripe"</span>,
        <span class="hljs-string">"Stripes"</span>,
        <span class="hljs-string">"Supernode Global"</span>,
        <span class="hljs-string">"Surface Ventures"</span>,
        <span class="hljs-string">"SuRo Capital"</span>,
        <span class="hljs-string">"Susa Ventures"</span>,
        <span class="hljs-string">"SV Angel"</span>,
        <span class="hljs-string">"Sweater"</span>,
        <span class="hljs-string">"Tandem Venture Partners"</span>,
        <span class="hljs-string">"Target Global"</span>,
        <span class="hljs-string">"Team Ignite Ventures"</span>,
        <span class="hljs-string">"Telescope Partners"</span>,
        <span class="hljs-string">"Temasek"</span>,
        <span class="hljs-string">"Terrain"</span>,
        <span class="hljs-string">"The General Partnership"</span>,
        <span class="hljs-string">"The Syndicate"</span>,
        <span class="hljs-string">"Theory Ventures"</span>,
        <span class="hljs-string">"Think + Ventures"</span>,
        <span class="hljs-string">"Third Kind Venture Capital"</span>,
        <span class="hljs-string">"Third Point Ventures"</span>,
        <span class="hljs-string">"Third Prime"</span>,
        <span class="hljs-string">"Thoma Bravo"</span>,
        <span class="hljs-string">"Threshold Ventures"</span>,
        <span class="hljs-string">"Thrive Capital"</span>,
        <span class="hljs-string">"Tiger Global Management"</span>,
        <span class="hljs-string">"Titanium Ventures"</span>,
        <span class="hljs-string">"Together Fund"</span>,
        <span class="hljs-string">"Tola Capital"</span>,
        <span class="hljs-string">"Topology Ventures"</span>,
        <span class="hljs-string">"TQ Ventures"</span>,
        <span class="hljs-string">"Treble Capital"</span>,
        <span class="hljs-string">"Tribe Capital"</span>,
        <span class="hljs-string">"True Ventures"</span>,
        <span class="hljs-string">"Trust Ventures"</span>,
        <span class="hljs-string">"TSIC"</span>,
        <span class="hljs-string">"Twenty Two"</span>,
        <span class="hljs-string">"Two Sigma Ventures"</span>,
        <span class="hljs-string">"Uncork Capital"</span>,
        <span class="hljs-string">"Uncorrelated Ventures"</span>,
        <span class="hljs-string">"Underscore VC"</span>,
        <span class="hljs-string">"Union Square Ventures"</span>,
        <span class="hljs-string">"Unusual Ventures"</span>,
        <span class="hljs-string">"Upfront Ventures"</span>,
        <span class="hljs-string">"UpHonest Capital"</span>,
        <span class="hljs-string">"Valor Equity Partners"</span>,
        <span class="hljs-string">"Venrex"</span>,
        <span class="hljs-string">"Venrock"</span>,
        <span class="hljs-string">"Vesey Ventures"</span>,
        <span class="hljs-string">"Vinyl Capital"</span>,
        <span class="hljs-string">"Visionaries Club"</span>,
        <span class="hljs-string">"VMG Partners"</span>,
        <span class="hljs-string">"Vy Capital"</span>,
        <span class="hljs-string">"Wa'ed Ventures"</span>,
        <span class="hljs-string">"Wayfinder Ventures"</span>,
        <span class="hljs-string">"Weekend Fund"</span>,
        <span class="hljs-string">"Whitecap Venture Partners"</span>,
        <span class="hljs-string">"Wikus Ventures"</span>,
        <span class="hljs-string">"Wing VC"</span>,
        <span class="hljs-string">"Wireframe VC"</span>,
        <span class="hljs-string">"Wisdom Ventures"</span>,
        <span class="hljs-string">"WndrCo"</span>,
        <span class="hljs-string">"Workday Ventures"</span>,
        <span class="hljs-string">"World Innovation Lab"</span>,
        <span class="hljs-string">"XAnge"</span>,
        <span class="hljs-string">"XTX Ventures"</span>,
        <span class="hljs-string">"XYZ"</span>,
        <span class="hljs-string">"Y Combinator"</span>,
        <span class="hljs-string">"Zeev Ventures"</span>,
        <span class="hljs-string">"Zeno Partners"</span>,
        <span class="hljs-string">"Zigg Capital"</span>,
        <span class="hljs-string">"Zinal Growth"</span>
      ]
    },
    <span class="hljs-attr">"selectors"</span>: {
      <span class="hljs-attr">"listing_names"</span>: [
        <span class="hljs-string">"a.framer-sb9jpt .framer-yo1eai p.framer-text.framer-styles-preset-1lagf8y"</span>,
        <span class="hljs-string">"a.framer-sb9jpt .framer-yo1eai"</span>,
        <span class="hljs-string">"a.framer-sb9jpt p.framer-text.framer-styles-preset-1lagf8y"</span>,
        <span class="hljs-string">"a.framer-sb9jpt .framer-yo1eai &gt; p"</span>,
        <span class="hljs-string">"a.framer-sb9jpt p.framer-text"</span>
      ]
    }
    <span class="hljs-comment">// Additional lines truncated to fit</span>
  }
</code></pre>
<p>Firecrawl scraped the initial section of the site but failed to capture the full content, which required scrolling. JigsawStack automatically handled scrolling and extracted the complete data accurately, with no cutoffs or missing sections.</p>
<h2 id="heading-comparison-script-we-ran">Comparison script we ran</h2>
<div class="gist-block embed-wrapper" data-gist-show-loading="false" data-id="13ea842dc9f17522778bdc0b219e8d4c"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a href="https://gist.github.com/yoeven/13ea842dc9f17522778bdc0b219e8d4c" class="embed-card">https://gist.github.com/yoeven/13ea842dc9f17522778bdc0b219e8d4c</a></div><p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The comparison showed that JigsawStack outperformed Firecrawl in the majority of tests. Firecrawl relies heavily on LLMs like GPT-4, which can produce errors, hallucinations, and is limited by token constraints. JigsawStack, on the other hand, uses a custom trained model that mimics the steps a developer would take when scraping a site, from inspecting network logs to using CSS selectors. This results in higher quality data and greater reliability.</p>
<h3 id="heading-firecrawl-vs-jigsawstack-ai-scraper-1">Firecrawl vs JigsawStack AI Scraper</h3>
<p>◐ = partial ❌ = inaccurate/fails ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature / Goal</strong></td><td><strong>Firecrawl</strong></td><td><strong>JigsawStack AI Scraper</strong></td></tr>
</thead>
<tbody>
<tr>
<td>💽 <strong>Accurate data extractions</strong></td><td>Extracted data correctly from 1 out of 6 websites ❌</td><td>Extracted data from all tested sites accurately, following the expected schema ✅</td></tr>
<tr>
<td>❤️‍🩹 <strong>Automatic error handling</strong></td><td>Frequently threw errors or returned false positives when encountering blocked sites ❌</td><td>Automatically handles errors, retries when needed, and unblocks sites to extract complete data ✅</td></tr>
<tr>
<td>🔁 <strong>Auto unblocker</strong></td><td>Blocked on all protected sites, even with proxy and stealth mode enabled ❌</td><td>Successfully unblocked every site tested, including complex ones like LinkedIn and Reddit ✅</td></tr>
<tr>
<td>♾️ <strong>Fully managed scale</strong></td><td>Limited to 5 concurrent browsers on Hobby plan ($16/month) and 50 on Standard plan ($83/month) ❌</td><td>Supports over 10,000 concurrent browser sessions. Fully managed with no limits and usage-based pricing ✅</td></tr>
<tr>
<td>🧠 <strong>Smart actions (scrolling, etc.)</strong></td><td>Does not automatically scroll to load dynamic content. Only partial page data is scraped ❌</td><td>Automatically scrolls, detects dynamic content, and extracts all relevant values without user input ✅</td></tr>
<tr>
<td>🌐 <strong>Proxies and IP rotation</strong></td><td>Proxy feature failed to prevent blocking. Still flagged by bot detectors even in stealth mode ❌</td><td>Rarely needs proxies. When needed, it uses a built-in rotating proxy system that bypasses even Cloudflare bot checks. ✅</td></tr>
<tr>
<td>🧑‍💻 <strong>Developer control</strong></td><td>No support for advanced configuration such as custom CSS selectors, browser dimensions, or headers ❌</td><td>Offers full developer control, including custom CSS selectors, browser size, custom cookies, proxy support, and Puppeteer-level configuration options ✅</td></tr>
</tbody>
</table>
</div><h2 id="heading-how-to-get-started-with-jigsawstack-ai-scraper">How to get started with JigsawStack AI Scraper</h2>
<p>Get API here: <a target="_blank" href="https://jigsawstack.com/ai-web-scraper">https://jigsawstack.com/ai-web-scraper</a></p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> jigsaw = JigsawStack({
  apiKey: <span class="hljs-string">"your-api-key"</span>,
});

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> jigsaw.web.ai_scrape({
  url: <span class="hljs-string">"https://news.ycombinator.com"</span>,
  element_prompts: [<span class="hljs-string">"post_titles"</span>, <span class="hljs-string">"post_points"</span>, <span class="hljs-string">"post_username"</span>],
});

<span class="hljs-built_in">console</span>.log(result);
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Translate Any Image in Seconds]]></title><description><![CDATA[Ever come across a street sign, menu, or document in a foreign language and wished it could magically switch to one you understood? That’s exactly what image translation solves.
Unlike traditional translation tools that only work on typed text, image...]]></description><link>https://blogdata.jigsawstack.com/translate-any-image</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/translate-any-image</guid><category><![CDATA[image to image translation]]></category><category><![CDATA[translation]]></category><category><![CDATA[AI]]></category><category><![CDATA[#ai-tools]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Tue, 20 May 2025 16:40:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746834358180/7ef682a6-e4a8-4aed-949b-05188acb35d4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever come across a street sign, menu, or document in a foreign language and wished it could magically switch to one you understood? That’s exactly what image translation solves.</p>
<p>Unlike traditional translation tools that only work on typed text, image translation detects and translates embedded text in real-world images, preserving both the meaning and visual design.</p>
<p>Today, we'll explore the challenges of image translation, how we tackle this problem, and how you can implement this capability in your applications using our <a target="_blank" href="https://jigsawstack.com/translation">translation model</a>.</p>
<h2 id="heading-the-challenge-of-translating-text-in-images">The Challenge of Translating Text in Images</h2>
<p>Translating text within images is considerably more complex than standard text translation for several reasons:</p>
<ol>
<li><p><strong>Text Detection and Extraction</strong>: Unlike plain text, systems must first identify where text appears within an image, handling various fonts, sizes, orientations, and backgrounds.</p>
</li>
<li><p><strong>Visual Context Preservation</strong>: After translation, the text needs to be reintegrated into the original image while preserving visual context, maintaining the original styling, and ensuring it looks natural.</p>
</li>
<li><p><strong>Handling Complex Backgrounds</strong>: Text often appears over varied backgrounds, making clean extraction and replacement challenging.</p>
</li>
</ol>
<p>Traditional OCR (Optical Character Recognition) tools can extract text, but typically don't handle the complete end-to-end process required for high-quality image translation.</p>
<p><strong>Google Translate:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747379447141/9164d9cf-abfa-496f-b7eb-2af179ee3f3a.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack Translate:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747379310766/dd3da294-dc1a-46e9-9f0d-ba1dff1403b3.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-how-jigsawstack-solves-image-translation">How JigsawStack Solves Image Translation</h2>
<p>Our approach to image translation involves a sophisticated multi-step pipeline combining computer vision, machine learning, and natural language processing:</p>
<h3 id="heading-step-1-visual-ocr">Step 1: Visual OCR</h3>
<p>Our <a target="_blank" href="https://jigsawstack.com/vocr">vOCR</a> model identifies every piece of text in the image with bounding boxes, orientation, and confidence scores.</p>
<h3 id="heading-step-2-inpainting">Step 2: Inpainting</h3>
<p>We remove the original text while preserving background texture using advanced inpainting models.</p>
<h3 id="heading-step-3-translation">Step 3: Translation</h3>
<p>The extracted text is translated to your target language using out <a target="_blank" href="https://jigsawstack.com/translation">translation model</a>, while maintaining nuance and context.</p>
<h3 id="heading-step-4-text-reintegration">Step 4: Text Reintegration</h3>
<p>We match the font, style, color, and position, so the translated image still looks like the original.</p>
<p><strong>Google Translate:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747380821968/15559b50-7955-4fdf-a5b2-b82ab332a2b3.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack Translate:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747380678457/4099f332-d55a-4bf4-b86f-f2582e7ae6a4.png" alt class="image--center mx-auto" /></p>
<p>This entire process happens within seconds, providing a seamless experience for users.</p>
<h2 id="heading-use-cases-and-applications">Use Cases and Applications</h2>
<p>Image translation has numerous practical applications:</p>
<ul>
<li><p><strong>Travel and Tourism</strong>: Instantly translate signs, menus, and maps while traveling</p>
</li>
<li><p><strong>E-commerce</strong>: Make product images with foreign text accessible to global audiences</p>
</li>
<li><p><strong>Education</strong>: Translate educational materials, diagrams, and infographics</p>
</li>
<li><p><strong>Content Localization</strong>: Efficiently localize marketing materials, advertisements, and social media content</p>
</li>
<li><p><strong>Document Processing</strong>: Translate visual elements in documents while maintaining layout integrity</p>
</li>
<li><p><strong>Research</strong>: Access and understand foreign research materials with visual elements</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747381228656/33fa96f3-afd4-40d8-9dd7-991bfe063dde.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-how-to-use-jigsawstacks-image-translation-model">How to Use JigsawStack's Image Translation Model</h2>
<p>Our <a target="_blank" href="https://jigsawstack.com/translation">API</a> makes it easy to implement image translation in your application. Here's a simple example using JavaScript:</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-comment">// Initialize with your API key</span>
<span class="hljs-keyword">const</span> jigsaw = JigsawStack({ <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"JIGSAWSTACK_API_KEY"</span> });

<span class="hljs-comment">// Translate text in an image</span>
<span class="hljs-keyword">const</span> translatedImage = <span class="hljs-keyword">await</span> jigsaw.translate.image({
  <span class="hljs-attr">url</span>: <span class="hljs-string">"&lt;https://images.unsplash.com/photo-1566657817181-c69e4a8eeb1e?q=80&amp;w=3087&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&gt;"</span>,
  <span class="hljs-attr">target_language</span>: <span class="hljs-string">"hi"</span>  <span class="hljs-comment">// translate to Hindi</span>
});

<span class="hljs-keyword">if</span> (translatedImage &amp;&amp; translatedImage.file) {
      <span class="hljs-comment">//get the buffer from the async buffer function</span>
      <span class="hljs-keyword">const</span> buffer = <span class="hljs-keyword">await</span> translated.buffer();
      <span class="hljs-comment">//write to a file with the proper filename</span>
      fs.writeFileSync(<span class="hljs-string">"translated_image.png"</span>, buffer);
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Translated image saved as translated_image.png"</span>);
}
</code></pre>
<p><strong>Results:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746713887517/f7435c3e-af52-48a3-bead-d0c0de76b1a5.png" alt class="image--center mx-auto" /></p>
<p>Our API supports two main methods for providing input images:</p>
<ol>
<li><p><strong>URL</strong> - Simply provide a link to the image online (as showcased above).</p>
</li>
<li><p><strong>File Store Key</strong> - Reference a previously uploaded image in our storage system</p>
</li>
<li><p><strong>Blob (or) Buffer</strong> - You can pass the image directly to our API.</p>
</li>
</ol>
<p>You can also customize the translation process with optional parameters:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//using file_store_key</span>
<span class="hljs-keyword">const</span> translatedImage = <span class="hljs-keyword">await</span> jigsaw.translate.image({
  <span class="hljs-attr">file_store_key</span>: <span class="hljs-string">"your_file_key"</span>,
  <span class="hljs-attr">target_language</span>: <span class="hljs-string">"en"</span>,
});

<span class="hljs-comment">//using imageBuffer</span>
<span class="hljs-keyword">const</span> imageBuffer = fs.readFileSync(<span class="hljs-string">"path_to_image_on_disk.png"</span>);
<span class="hljs-keyword">const</span> translatedImage = <span class="hljs-keyword">await</span> jigsaw.translate.image(imageBuffer, {
      <span class="hljs-attr">target_language</span>: <span class="hljs-string">"es"</span>,
});
</code></pre>
<h2 id="heading-future-enhancements">Future Enhancements</h2>
<p>We're continuously improving our image translation capabilities and also cooking a native image generation model to enable the same task ;). Current development areas for this version include:</p>
<ul>
<li><p><strong>Enhanced Font Matching</strong>: More precise font detection and matching for even more natural results</p>
</li>
<li><p><strong>Improved Erasure Models</strong>: Research into better inpainting technologies for challenging backgrounds</p>
</li>
<li><p><strong>Style Preservation</strong>: Better preservation of text styles, colors, and effects</p>
</li>
<li><p><strong>Layout Understanding</strong>: Deeper comprehension of document layouts and text relationships</p>
</li>
<li><p><strong>Expanded Language Support</strong>: Adding more language pairs with specialized handling for different writing systems</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>JigsawStack's <a target="_blank" href="https://jigsawstack.com/translation">Image Translation model</a> represents marks a step forward in breaking down language barriers in visual content. By combining advanced computer vision, machine learning, and translation technology, we've created a solution that can transform how people and businesses interact with foreign language content.</p>
<p>Ready to add image translation to your application? Check out our <a target="_blank" href="https://jigsawstack.com/docs/ai/translate-image">API documentation</a> to get started with just a few lines of code.</p>
]]></content:encoded></item><item><title><![CDATA[Gemini OCR vs JigsawStack vOCR]]></title><description><![CDATA[Following our previous benchmarking of Mistral OCR, we now rigorously evaluate Google's Gemini OCR against JigsawStack vOCR. Both technologies boast strong text extraction capabilities, but which offers practical, reliable performance across diverse,...]]></description><link>https://blogdata.jigsawstack.com/gemini-vs-jigsawstack-ocr</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/gemini-vs-jigsawstack-ocr</guid><category><![CDATA[OCR ]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[google gemini]]></category><category><![CDATA[#ai-tools]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Tue, 20 May 2025 16:39:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746834283814/a9f8cce9-02cf-429d-85f5-a88b14e34860.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Following our previous benchmarking of Mistral OCR, we now rigorously evaluate Google's Gemini OCR against JigsawStack vOCR. Both technologies boast strong text extraction capabilities, but which offers practical, reliable performance across diverse, real-world scenarios? We've conducted extensive testing across multilingual texts, structured PDFs, handwritten documents, and standard receipts to uncover their strengths and limitations.</p>
<h2 id="heading-what-makes-a-great-ocr-solution">What Makes a Great OCR Solution?</h2>
<p>Before diving into the results, let's remember the key factors that differentiate exceptional OCR solutions from basic ones:</p>
<ul>
<li><p>Multilingual text recognition capability</p>
</li>
<li><p>Ability to process both handwritten and printed text</p>
</li>
<li><p>Provision of precise bounding boxes for spatial positioning</p>
</li>
<li><p>Structured data extraction and formatting</p>
</li>
<li><p>Context understanding and intelligent interpretation</p>
</li>
<li><p>Consistency and accuracy across various document types</p>
</li>
</ul>
<h2 id="heading-ensuring-a-fair-comparison">Ensuring a Fair Comparison</h2>
<p>For fair comparison, Gemini OCR was given structured JSON prompts matching JigsawStack vOCR’s native output. Both OCR systems returned:</p>
<ul>
<li><p>Bounding boxes (words, lines)</p>
</li>
<li><p>Structured text sections</p>
</li>
<li><p>Metadata (dimensions, tags)</p>
</li>
</ul>
<p>This ensured comparability and clarity beyond default response differences.</p>
<h2 id="heading-summary-comparison">Summary Comparison:</h2>
<h3 id="heading-gemini-ocr-vs-jigsawstack-vocr"><strong>Gemini OCR vs. JigsawStack vOCR</strong></h3>
<p>◐ = partial ❌ = inaccurate/fails ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Gemini OCR</strong></td><td><strong>JigsawStack vOCR</strong></td></tr>
</thead>
<tbody>
<tr>
<td>🌐 <strong>Multilingual Support</strong></td><td>Good base coverage with standard processing times ◐</td><td>Excellent support for 70+ languages with efficient processing ✅</td></tr>
<tr>
<td>📝 <strong>Handwriting Recognition</strong></td><td>Captures basic handwritten content ❌</td><td>Strong accuracy with contextual interpretation capabilities ✅</td></tr>
<tr>
<td>⊞ <strong>Bounding Boxes</strong></td><td>Provides coordinate data for identified text ◐</td><td>Detailed positioning with comprehensive width/height measurements ✅</td></tr>
<tr>
<td>📁 <strong>Structured Output</strong></td><td>Limited, provided basic text extraction with some formatting ❌</td><td>Rich hierarchical structure with semantic and spatial integration ✅</td></tr>
<tr>
<td>⚡ <strong>Processing Speed</strong></td><td>Variable processing times (11-42 seconds) ❌</td><td>Consistently faster processing (12-32 seconds) ✅</td></tr>
<tr>
<td>🧠 <strong>Context Understanding</strong></td><td>Identifies document types and basic structure ◐</td><td>Preserves relationships between elements with dual-layer analysis ✅</td></tr>
<tr>
<td>📕 <strong>Complex Document Handling</strong></td><td>Handles standard files; may face token limits or parsing issues with complex content ❌</td><td>Excels with intricate layouts and maintains structure integrity ✅</td></tr>
</tbody>
</table>
</div><h2 id="heading-benchmarking-methodology">Benchmarking Methodology</h2>
<p>We tested Gemini OCR and JigsawStack vOCR using four document types:</p>
<ol>
<li><p>Receipt Processing</p>
</li>
<li><p>Multilingual Signage</p>
</li>
<li><p>Handwritten Text</p>
</li>
<li><p>Structured PDFs.</p>
</li>
</ol>
<h2 id="heading-interactive-testing">Interactive Testing</h2>
<p>You can run these tests yourself using this <a target="_blank" href="https://colab.research.google.com/drive/1ShY7YsU7LXK5FHzoFShMom0sUS9_-nVa?usp=sharing">Google Colab Notebook</a>.</p>
<p>Each OCR system received identical image inputs along with the corresponding prompt. We also structured the Gemini OCR request to ensure its output matched JigsawStack vOCR’s native response format using the following JSON schema:</p>
<p><strong>Structured output (JSON)</strong></p>
<pre><code class="lang-python">{
  <span class="hljs-string">"success"</span>: true,
  <span class="hljs-string">"context"</span>: {},
  <span class="hljs-string">"width"</span>: <span class="hljs-number">1000</span>,
  <span class="hljs-string">"height"</span>: <span class="hljs-number">750</span>,
  <span class="hljs-string">"tags"</span>: [<span class="hljs-string">"text"</span>, <span class="hljs-string">"document"</span>],
  <span class="hljs-string">"has_text"</span>: true,
  <span class="hljs-string">"sections"</span>: [
    {
      <span class="hljs-string">"text"</span>: <span class="hljs-string">"Extracted text here"</span>,
      <span class="hljs-string">"lines"</span>: [
        {
          <span class="hljs-string">"text"</span>: <span class="hljs-string">"Line text"</span>,
          <span class="hljs-string">"bounds"</span>: {
            <span class="hljs-string">"top_left"</span>: { <span class="hljs-string">"x"</span>: <span class="hljs-number">100</span>, <span class="hljs-string">"y"</span>: <span class="hljs-number">50</span> },
            <span class="hljs-string">"bottom_right"</span>: { <span class="hljs-string">"x"</span>: <span class="hljs-number">300</span>, <span class="hljs-string">"y"</span>: <span class="hljs-number">70</span> }
          },
          <span class="hljs-string">"words"</span>: [
            {
              <span class="hljs-string">"text"</span>: <span class="hljs-string">"Word"</span>,
              <span class="hljs-string">"bounds"</span>: {
                <span class="hljs-string">"top_left"</span>: { <span class="hljs-string">"x"</span>: <span class="hljs-number">110</span>, <span class="hljs-string">"y"</span>: <span class="hljs-number">55</span> },
                <span class="hljs-string">"bottom_right"</span>: { <span class="hljs-string">"x"</span>: <span class="hljs-number">140</span>, <span class="hljs-string">"y"</span>: <span class="hljs-number">65</span> }
              }
            }
          ]
        }
      ]
    }
  ]
}
</code></pre>
<h2 id="heading-benchmarking-setup">Benchmarking Setup</h2>
<p>Before we begin, let’s setup the environment that showcases the comparison for which we shall download the test files:</p>
<p><strong>Python</strong></p>
<pre><code class="lang-python">! pip install -q jigsawstack google-genai pydantic langchain_core matplotlib pillow

<span class="hljs-comment"># Paste your keys here:</span>
JIGSAWSTACK_API_KEY = <span class="hljs-string">""</span>
GEMINI_API_KEY = <span class="hljs-string">""</span>

billboard = <span class="hljs-string">"https://raw.githubusercontent.com/JigsawStack/ocr-test-files/refs/heads/main/sample_multilingual.jpg"</span>
handwriting = <span class="hljs-string">"https://raw.githubusercontent.com/JigsawStack/ocr-test-files/refs/heads/main/sample_handwriting.jpg"</span>
pdf = <span class="hljs-string">"https://arxiv.org/pdf/2406.04692"</span>
translate = <span class="hljs-string">"https://www.wikihow.com/images/thumb/1/1f/Learn-Telugu-Step-1.jpg/v4-728px-Learn-Telugu-Step-1.jpg"</span>
receipt= <span class="hljs-string">"https://raw.githubusercontent.com/JigsawStack/ocr-test-files/refs/heads/main/sample_receipt.jpg"</span>
sign = <span class="hljs-string">"https://raw.githubusercontent.com/JigsawStack/ocr-test-files/refs/heads/main/firesign.jpg"</span>
coke = <span class="hljs-string">"https://raw.githubusercontent.com/JigsawStack/ocr-test-files/refs/heads/main/cocacola.jpg"</span>


billboard_prompt = [<span class="hljs-string">"text_content"</span>, <span class="hljs-string">"languages_detected"</span>, <span class="hljs-string">"formatting_details"</span>]
translate_prompt = [<span class="hljs-string">"text_content"</span>, <span class="hljs-string">"languages_detected"</span>, <span class="hljs-string">"formatting_details"</span>]
receipt_prompt = [<span class="hljs-string">"total_price"</span>, <span class="hljs-string">"tax_amount"</span>, <span class="hljs-string">"itemized_entries"</span>]
handwriting_prompt = [<span class="hljs-string">"transcribed_text"</span>, <span class="hljs-string">"writing_style"</span>, <span class="hljs-string">"confidence_score"</span>]
sign_prompt = [<span class="hljs-string">"sign_text"</span>, <span class="hljs-string">"languages_detected"</span>]
pdf_prompt = [<span class="hljs-string">"document_title"</span>, <span class="hljs-string">"section_headings"</span>, <span class="hljs-string">"subsection_content"</span>, <span class="hljs-string">"tables"</span>, <span class="hljs-string">"metadata"</span>]

filepath = receipt
prompt = receipt_prompt
</code></pre>
<h3 id="heading-setting-up-gemini-for-vocr"><strong>Setting up Gemini for vOCR</strong></h3>
<p>Setting up Gemini to give structured output is fairly straight forward as part of this benchmark setup we shall be using the following response schema:</p>
<p><strong>Python</strong></p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> List, Optional, Dict, Any, Union
<span class="hljs-keyword">from</span> pydantic <span class="hljs-keyword">import</span> BaseModel, Field

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Point</span>(<span class="hljs-params">BaseModel</span>):</span>
    x: float = Field(..., description=<span class="hljs-string">"X coordinate of the point"</span>)
    y: float = Field(..., description=<span class="hljs-string">"Y coordinate of the point"</span>)

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Bounds</span>(<span class="hljs-params">BaseModel</span>):</span>
    top_left: Point = Field(..., description=<span class="hljs-string">"Top left corner of the bounding box"</span>)
    top_right: Point = Field(..., description=<span class="hljs-string">"Top right corner of the bounding box"</span>)
    bottom_left: Point = Field(..., description=<span class="hljs-string">"Bottom left corner of the bounding box"</span>)
    bottom_right: Point = Field(..., description=<span class="hljs-string">"Bottom right corner of the bounding box"</span>)
    <span class="hljs-comment"># Optional additional fields for convenience</span>
    width: Optional[float] = <span class="hljs-literal">None</span>
    height: Optional[float] = <span class="hljs-literal">None</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Word</span>(<span class="hljs-params">BaseModel</span>):</span>
    text: str = Field(..., description=<span class="hljs-string">"Text of the word"</span>)
    bounds: Bounds = Field(..., description=<span class="hljs-string">"Bounding box of the word"</span>)

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Line</span>(<span class="hljs-params">BaseModel</span>):</span>
    text: str = Field(..., description=<span class="hljs-string">"Text of the line"</span>)
    bounds: Bounds = Field(..., description=<span class="hljs-string">"Bounding box of the line"</span>)
    words: List[Word] = Field(..., description=<span class="hljs-string">"List of words in the line"</span>)

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Section</span>(<span class="hljs-params">BaseModel</span>):</span>
    text: str = Field(..., description=<span class="hljs-string">"Text of the section"</span>)
    lines: List[Line] = Field(..., description=<span class="hljs-string">"List of lines in the section"</span>)

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">VOCRResponse</span>(<span class="hljs-params">BaseModel</span>):</span>
    model_config = {
        <span class="hljs-string">"extra"</span>: <span class="hljs-string">"allow"</span>,  <span class="hljs-comment"># Allow extra fields in the model</span>
        <span class="hljs-string">"populate_by_name"</span>: <span class="hljs-literal">True</span>,  <span class="hljs-comment"># Allow populating by field name</span>
    }

    context: Dict[str, Any] = Field(
        ...,
        description=<span class="hljs-string">"Dynamic structured information extracted from the image, fields vary based on the document type"</span>
    )
    width: int = Field(..., description=<span class="hljs-string">"Width of the image"</span>)
    height: int = Field(..., description=<span class="hljs-string">"Height of the image"</span>)
    tags: List[str] = Field(..., description=<span class="hljs-string">"Tags associated with the image"</span>)
    has_text: bool = Field(..., description=<span class="hljs-string">"Indicates if the image contains text"</span>)
    sections: List[Section] = Field(..., description=<span class="hljs-string">"List of sections in the image"</span>)

    <span class="hljs-comment"># Optional fields</span>
    total_pages: Optional[int] = <span class="hljs-literal">None</span>  <span class="hljs-comment"># Only available for PDFs</span>
    page_range: Optional[List[int]] = <span class="hljs-literal">None</span>  <span class="hljs-comment"># Only available when page_range is specified</span>
    success: Optional[bool] = <span class="hljs-literal">None</span>  <span class="hljs-comment"># To indicate successful processing</span>
</code></pre>
<h2 id="heading-results">Results</h2>
<h3 id="heading-test-1-receipt-processing"><strong>Test 1: Receipt Processing</strong></h3>
<p>We evaluated both systems on a standard Walmart receipt containing multiple line items, taxes, and totals.<br />View the full response <a target="_blank" href="https://gist.github.com/gitpichardo/1ab05871cdbc9e547e5039e21c6a4750">here</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741819852493/10b20478-03da-4ed9-be86-0dc33e97a673.jpeg" alt /></p>
<p><strong>Response - Gemini OCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"total_price"</span>: [
      <span class="hljs-string">"144.02"</span>
    ],
    <span class="hljs-attr">"tax_amount"</span>: [
      <span class="hljs-string">"4.58"</span>
    ],
    <span class="hljs-attr">"itemized_entries"</span>: [
      <span class="hljs-string">"TATER TOTS 2.96"</span>,
      <span class="hljs-string">"HARD/PROV/DC 2.68"</span>,
      <span class="hljs-string">"SNACK BARS 4.98"</span>,
      <span class="hljs-string">"HRI CL CHS 5.88"</span>,
      <span class="hljs-string">"HRI CL CHS 6.88"</span>,
      <span class="hljs-string">"HRI CL CHS 5.88"</span>,
      <span class="hljs-string">"HRI 12 USG 5.88"</span>,
      <span class="hljs-string">"HRI CL PEP 5.88"</span>,
      <span class="hljs-string">"EARBUDS 4.88"</span>,
      <span class="hljs-string">"SC BCN CHDDR 6.98"</span>,
      <span class="hljs-string">"ABF THINBRST 9.72"</span>,
      <span class="hljs-string">"HARD/PROV/DC 2.68"</span>,
      <span class="hljs-string">"DV RSE OIL M 5.94"</span>,
      <span class="hljs-string">"APPLE 3 BAG 6.47"</span>,
      <span class="hljs-string">"STOK LT SWT 4.42"</span>,
      <span class="hljs-string">"PEANUT BUTTR 5.44"</span>,
      <span class="hljs-string">"AVO VERDE 2.98"</span>,
      <span class="hljs-string">"ROLLS 1.28"</span>,
      <span class="hljs-string">"BTS DRY BLON 6.68"</span>,
      <span class="hljs-string">"GALE 32.00"</span>,
      <span class="hljs-string">"TR HS FRM 4 2.74"</span>,
      <span class="hljs-string">"BAGELS 4.66"</span>,
      <span class="hljs-string">"GV SLIDERS 2.98"</span>,
      <span class="hljs-string">"ACCESSORY 0.97"</span>,
      <span class="hljs-string">"CHEEZE IT 4.00"</span>,
      <span class="hljs-string">"RITZ 2.78"</span>,
      <span class="hljs-string">"RUFFLES 2.50"</span>,
      <span class="hljs-string">"GV HNY GRMS 1.28"</span>
    ]
  },
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">800</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">1200</span>,
  <span class="hljs-attr">"tags"</span>: [
    <span class="hljs-string">"receipt"</span>,
    <span class="hljs-string">"Walmart"</span>,
    <span class="hljs-string">"groceries"</span>,
    <span class="hljs-string">"shopping"</span>
  ],
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"See back of receipt for your chance\nto win $1000 ID#:7N5N1V1XCQDQ"</span>,
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"See back of receipt for your chance"</span>,
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"top_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">53</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">54</span>
            },
            <span class="hljs-attr">"top_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">555</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">54</span>
            },
            <span class="hljs-attr">"bottom_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">53</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">80</span>
            },
            <span class="hljs-attr">"bottom_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">555</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">80</span>
            }
          },
          <span class="hljs-attr">"words"</span>: []
        } <span class="hljs-comment">// Additional lines truncated</span>
      ]
    }
  ]
}
</code></pre>
<p><em>Processed in 41 seconds</em></p>
<p><strong>Response - JigsawStack vOCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"itemized_entries"</span>: [
      <span class="hljs-string">"TATER TOTS 2.96"</span>,
      <span class="hljs-string">"HARD/PROV/DC"</span>,
      <span class="hljs-string">"SNACK BARS 2.68"</span>,
      <span class="hljs-string">"HRI CL CHS 5.88"</span>,
      <span class="hljs-string">"HRI CL CHS 4.98"</span>,
      <span class="hljs-string">"HRI CL CHS 6.88"</span>,
      <span class="hljs-string">"** VOIDED ENTRY ## HRI CL CHS 5.88-"</span>,
      <span class="hljs-string">"HRI 12 U SG 5.88"</span>,
      <span class="hljs-string">"HRI CL PEP 5.88"</span>,
      <span class="hljs-string">"EARBUDS 4.88"</span>,
      <span class="hljs-string">"SC BCN CHDDR"</span>,
      <span class="hljs-string">"ABF THINBRST 6.98"</span>,
      <span class="hljs-string">"HARD/PROV/DC 9.72"</span>,
      <span class="hljs-string">"DV RSE OIL M 5.94"</span>,
      <span class="hljs-string">"APPLE 3 BAG 2.68"</span>,
      <span class="hljs-string">"STOK LT SWT 6.47"</span>,
      <span class="hljs-string">"PEANUT BUTTR 4.42"</span>,
      <span class="hljs-string">"AVO VERDE 6.44"</span>,
      <span class="hljs-string">"ROLLS 1.28"</span>,
      <span class="hljs-string">"BTS DRY BLON 6.58"</span>,
      <span class="hljs-string">"GALE 32.00"</span>,
      <span class="hljs-string">"TR HS FRM 4 2.74"</span>,
      <span class="hljs-string">"BAGELS 4.66"</span>,
      <span class="hljs-string">"GV SLIDERS 2.98"</span>,
      <span class="hljs-string">"ACCESSORY 0.97"</span>,
      <span class="hljs-string">"CHEEZE IT 4.00"</span>,
      <span class="hljs-string">"RITZ 2.78"</span>,
      <span class="hljs-string">"RUFFLES 2.50"</span>,
      <span class="hljs-string">"GV HNY GRMS 1.28"</span>
    ],
    <span class="hljs-attr">"tax_amount"</span>: [<span class="hljs-string">"4.58"</span>],
    <span class="hljs-attr">"total_price"</span>: [<span class="hljs-string">"144.02"</span>]
  },
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">960</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"bottom_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">184</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">84</span>
            },
            <span class="hljs-attr">"bottom_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">459</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">93</span>
            },
            <span class="hljs-attr">"height"</span>: <span class="hljs-number">19</span>,
            <span class="hljs-attr">"top_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">185</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">63</span>
            },
            <span class="hljs-attr">"top_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">459</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">76</span>
            },
            <span class="hljs-attr">"width"</span>: <span class="hljs-number">274.5</span>
          },
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"See back of receipt for your chance"</span>,
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"bottom_left"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">186</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">79</span>
                },
                <span class="hljs-attr">"bottom_right"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">209</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">82</span>
                },
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">15.5</span>,
                <span class="hljs-attr">"top_left"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">187</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">64</span>
                },
                <span class="hljs-attr">"top_right"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">211</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">66</span>
                },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">23.5</span>
              },
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"See"</span>
            }
          ]
        }
      ]
    }
  ]
}
</code></pre>
<p><em>Processed in 16 seconds</em></p>
<h3 id="heading-gemini-ocr-performance">Gemini OCR Performance</h3>
<ul>
<li><p><strong>Accuracy</strong>: Good extraction of full receipt text with complete transaction details</p>
</li>
<li><p><strong>Processing Time</strong>: 41 seconds</p>
</li>
<li><p><strong>Output Quality</strong>: Basic text extraction with spatial coordinates and detailed structure</p>
</li>
<li><p><strong>Organization</strong>: Simple text format with minimal structure; no word-level breakdown or contextual grouping</p>
</li>
</ul>
<h3 id="heading-jigsawstack-vocr-performance">JigsawStack vOCR Performance</h3>
<ul>
<li><p><strong>Accuracy</strong>: Complete extraction with precise word-level detail and comprehensive contextual data</p>
</li>
<li><p><strong>Processing Time</strong>: 16 seconds</p>
</li>
<li><p><strong>Output Quality</strong>: Rich structured data with multiple representations (raw text, itemized entries, financial summaries)</p>
</li>
<li><p><strong>Organization</strong>: Sophisticated hierarchical structure with sections, lines, words, and precise spatial coordinates for each element</p>
</li>
</ul>
<h3 id="heading-test-2-multilingual-text-recognition"><strong>Test 2: Multilingual Text Recognition</strong></h3>
<p><strong>Part 1.</strong> We evaluated a multilingual street sign containing Japanese characters and directional information.<br />View the full response <a target="_blank" href="https://gist.github.com/gitpichardo/7972d51ac23f5526665275e1b6d7b3f6">here</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741819876932/aba099ac-58ad-4781-b442-1b842256e19b.jpeg" alt /></p>
<p><strong>Response - Gemini OCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"formatting_details"</span>: <span class="hljs-literal">null</span>,
    <span class="hljs-attr">"languages_detected"</span>: [<span class="hljs-string">"ja"</span>],
    <span class="hljs-attr">"text_content"</span>: <span class="hljs-string">"a\n
                     a\n
                     a\n
                     a\n
                     0.2 Km\n
                     alamy\n
                     四天王寺\n
                     alamy\n
                     a\n
                     庚申堂&gt;\n
                     a\n
                     0.1km\n
                     a\n
                     竹本義太夫墓\n
                     ●(超願寺内)。すぐ。\n
                     a\n
                     alamy\n
                     Image ID: CBDNR6\n
                     www.alamy.com\n
                     a\n
                     a\n
                     a"</span>
  },
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">900</span>,
  <span class="hljs-attr">"page_range"</span>: <span class="hljs-literal">null</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"bottom_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">14.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">25.0</span>},
            <span class="hljs-attr">"bottom_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">21.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">25.0</span>},
            <span class="hljs-attr">"height"</span>: <span class="hljs-literal">null</span>,
            <span class="hljs-attr">"top_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">14.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">5.0</span>},
            <span class="hljs-attr">"top_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">21.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">5.0</span>},
            <span class="hljs-attr">"width"</span>: <span class="hljs-literal">null</span>
          },
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"a"</span>,
            <span class="hljs-comment">// Additional lines omitted for brevity</span>
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"bottom_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">14.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">25.0</span>},
                <span class="hljs-attr">"bottom_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">21.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">25.0</span>},
                <span class="hljs-attr">"height"</span>: <span class="hljs-literal">null</span>,
                <span class="hljs-attr">"top_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">14.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">5.0</span>},
                <span class="hljs-attr">"top_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">21.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">5.0</span>},
                <span class="hljs-attr">"width"</span>: <span class="hljs-literal">null</span>
              },
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"a"</span>
            }
          ]
        }
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"a\na\na"</span>
    }
  ],
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"sign"</span>, <span class="hljs-string">"Japanese"</span>, <span class="hljs-string">"temple"</span>, <span class="hljs-string">"landmark"</span>],
  <span class="hljs-attr">"total_pages"</span>: <span class="hljs-literal">null</span>,
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">700</span>
}
</code></pre>
<p><em>Processed in 38 seconds</em></p>
<p><strong>Response - JigsawStack vOCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"formatting_details"</span>: [
      <span class="hljs-string">"Yellow background with blue text"</span>,
      <span class="hljs-string">"Directional arrows (left and right)"</span>,
      <span class="hljs-string">"Distance in kilometers indicated"</span>,
      <span class="hljs-string">"Text is organized in three horizontal panels"</span>
    ],
    <span class="hljs-attr">"languages_detected"</span>: [<span class="hljs-string">"ja"</span>, <span class="hljs-string">"en"</span>],
    <span class="hljs-attr">"text_content"</span>: [
      <span class="hljs-string">"← 四天王寺 0.2Km"</span>,
      <span class="hljs-string">"→ 庚申堂 0.1km"</span>,
      <span class="hljs-string">"→ 竹本義太夫墓（超願寺内）すぐ"</span>
    ]
  },
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">951</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"← 四天王寺"</span>,
          <span class="hljs-attr">"bounds"</span>: {<span class="hljs-attr">"bottom_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">1089</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">49</span>}, <span class="hljs-attr">"bottom_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">1106</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">49</span>},
                    <span class="hljs-attr">"height"</span>: <span class="hljs-number">25</span>, <span class="hljs-attr">"top_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">1089</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">24</span>}, <span class="hljs-attr">"top_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">1106</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">24</span>},
                    <span class="hljs-attr">"width"</span>: <span class="hljs-number">17</span>}
        },
        <span class="hljs-comment">// Additional lines omitted for brevity</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"← 四天王寺\n0.2Km\n康申堂 →\n0.1km\n竹本義太夫墓 →\n（超願寺内）すぐ"</span>
    }
  ],
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"text"</span>, <span class="hljs-string">"screenshot"</span>, <span class="hljs-string">"rectangle"</span>, <span class="hljs-string">"font"</span>, <span class="hljs-string">"line"</span>, <span class="hljs-string">"number"</span>, <span class="hljs-string">"signage"</span>, <span class="hljs-string">"colorfulness"</span>],
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">1300</span>
}
</code></pre>
<p><em>Processed in 16 seconds</em></p>
<h3 id="heading-gemini-ocr">Gemini OCR</h3>
<ul>
<li><p><strong>Processing</strong>: 38 seconds</p>
</li>
<li><p><strong>Character Recognition</strong>: Successfully identifies major Japanese locations (四天王寺, 庚申堂, 竹本義太夫墓)</p>
</li>
<li><p><strong>Metadata</strong>: Provides helpful tags like "sign", "Japanese", "direction", "distance"</p>
</li>
</ul>
<h3 id="heading-jigsawstack-vocr">JigsawStack vOCR</h3>
<ul>
<li><p><strong>Processing</strong>: 12 seconds</p>
</li>
<li><p><strong>Visual Context</strong>: Includes helpful details like "Yellow background with blue text" and identifies directional arrows</p>
</li>
<li><p><strong>Direction Indicators</strong>: Preserves the relationship between text and arrows (e.g., "← 四天王寺" and "竹本義太夫墓 →")</p>
</li>
<li><p><strong>Symbol Formatting</strong>: Maintains proper Japanese formatting with correct parentheses styles</p>
</li>
<li><p><strong>Structure</strong>: Organizes content in a logical, consistent pattern</p>
</li>
</ul>
<p><strong>Part 2.</strong> We evaluated a multilingual learning example containing English &amp; Telugu</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746576859594/31e54f33-e825-4930-8fe3-8a1380ba9e16.jpeg" alt class="image--center mx-auto" /></p>
<p><strong>Response - Gemini OCR :</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"formatting_details"</span>: [],
    <span class="hljs-attr">"languages_detected"</span>: [],
    <span class="hljs-attr">"text_content"</span>: <span class="hljs-string">"he\n໙໖ (athadu)\nshe -\n໖ (aame)\nboy\n໙໙໙ (abbayi)\ngirl → ໙ (ammayi)\nhouse\na\n(illu)\nwater -\n໖ (neeru)\nfood\n໖໐໖ (tindi)\nwiki How"</span>
  },
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">853</span>,
  <span class="hljs-attr">"page_range"</span>: <span class="hljs-literal">null</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"bottom_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">294.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">100.0</span>},
            <span class="hljs-attr">"bottom_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">321.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">100.0</span>},
            <span class="hljs-attr">"height"</span>: <span class="hljs-literal">null</span>,
            <span class="hljs-attr">"top_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">294.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">77.0</span>},
            <span class="hljs-attr">"top_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">321.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">77.0</span>},
            <span class="hljs-attr">"width"</span>: <span class="hljs-literal">null</span>
          },
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"he"</span>,
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"bottom_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">294.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">100.0</span>},
                <span class="hljs-attr">"bottom_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">321.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">100.0</span>},
                <span class="hljs-attr">"height"</span>: <span class="hljs-literal">null</span>,
                <span class="hljs-attr">"top_left"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">294.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">77.0</span>},
                <span class="hljs-attr">"top_right"</span>: {<span class="hljs-attr">"x"</span>: <span class="hljs-number">321.0</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">77.0</span>},
                <span class="hljs-attr">"width"</span>: <span class="hljs-literal">null</span>
              },
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"he"</span>
            }
          ]
        },
       <span class="hljs-comment">// Additional lines omitted for brevity</span>
      <span class="hljs-string">"text"</span>: <span class="hljs-string">"he\n໙໖ (athadu)"</span>
    }
  ],
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"language learning"</span>, <span class="hljs-string">"telugu"</span>, <span class="hljs-string">"vocabulary"</span>, <span class="hljs-string">"translation"</span>],
  <span class="hljs-attr">"total_pages"</span>: <span class="hljs-literal">null</span>,
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">640</span>
}
</code></pre>
<p><em>Processed in 9 seconds</em></p>
<p><strong>Response - JigsawStack vOCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"formatting_details"</span>: [<span class="hljs-string">"List format with arrows separating "</span>
                           <span class="hljs-string">"English and Telugu words"</span>,
                           <span class="hljs-string">"Telugu script followed by Romanized "</span>
                           <span class="hljs-string">"pronunciation in parentheses"</span>,
                           <span class="hljs-string">"Consistent use of color to differentiate "</span>
                           <span class="hljs-string">"Telugu and Romanized text"</span>,
                           <span class="hljs-string">"Handwritten style on lined paper"</span>
                           <span class="hljs-string">"background with glasses illustration"</span>],
    <span class="hljs-attr">"languages_detected"</span>: [<span class="hljs-string">"English"</span>, <span class="hljs-string">"Telugu"</span>],
    <span class="hljs-attr">"text_content"</span>: [<span class="hljs-string">"he -&gt; అతడు (athadu)"</span>,
                    <span class="hljs-string">"she -&gt; ఆమె (aame)"</span>,
                    <span class="hljs-string">"boy -&gt; అబ్బాయి (abbayi)"</span>,
                    <span class="hljs-string">"girl -&gt; అమ్మాయి (ammayi)"</span>,
                    <span class="hljs-string">"house -&gt; ఇల్లు (illu)"</span>,
                    <span class="hljs-string">"water -&gt; నీరు (neeru)"</span>,
                    <span class="hljs-string">"food -&gt; తిండి (tindi)"</span>,
                    <span class="hljs-string">"wikiHow"</span>]
  },
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">728</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">546</span>,
  <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"text"</span>, <span class="hljs-string">"glasses"</span>],
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"sections"</span>: [
  {
    <span class="hljs-attr">"lines"</span>: [
      {
        <span class="hljs-attr">"bounds"</span>: {
          <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">231</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">155</span> },
          <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">515</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">157</span> },
          <span class="hljs-attr">"height"</span>: <span class="hljs-number">30.5</span>,
          <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">231</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">125</span> },
          <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">515</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">126</span> },
          <span class="hljs-attr">"width"</span>: <span class="hljs-number">284</span>
        },
        <span class="hljs-attr">"text"</span>: <span class="hljs-string">"he -&gt; esc (athadu)"</span>,
        <span class="hljs-attr">"words"</span>: [
          {
            <span class="hljs-attr">"bounds"</span>: {
              <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">231</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">155</span> },
              <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">261</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">155</span> },
              <span class="hljs-attr">"height"</span>: <span class="hljs-number">29.5</span>,
              <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">231</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">125</span> },
              <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">261</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">126</span> },
              <span class="hljs-attr">"width"</span>: <span class="hljs-number">30</span>
            },
            <span class="hljs-attr">"text"</span>: <span class="hljs-string">"he"</span>
          }
        ]
      }
        <span class="hljs-comment">// Additional lines truncated </span>
      ]
    }
  ],
 <span class="hljs-attr">"success"</span>: True,
 <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"text"</span>, <span class="hljs-string">"glasses"</span>],
 <span class="hljs-attr">"width"</span>: <span class="hljs-number">728</span>}
}
</code></pre>
<p><em>Processed in 14 seconds</em></p>
<h3 id="heading-gemini-ocr-1">Gemini OCR</h3>
<ul>
<li><p><strong>Processing Time</strong>: 9 seconds</p>
</li>
<li><p><strong>Layout Detection</strong>: Successfully captures document structure with accurate bounding box coordinates</p>
</li>
<li><p><strong>English Recognition</strong>: Correctly recognizes all English words and transliterations in parentheses (athadu, aame, etc.)</p>
</li>
<li><p><strong>Document Context</strong>: Identifies the content as language learning material with translations</p>
</li>
</ul>
<h3 id="heading-jigsawstack-vocr-1">JigsawStack vOCR</h3>
<ul>
<li><p><strong>Processing Time</strong>: 14 seconds</p>
</li>
<li><p><strong>Telugu Script Handling</strong>: Provides proper Unicode encoding for Telugu characters (అతడు, ఆమె, అబ్బాయి, etc.) in the context section</p>
</li>
<li><p><strong>Document Structure</strong>: Features dual-layer recognition with separate context and raw recognition layers</p>
</li>
<li><p><strong>Format Analysis</strong>: Includes detailed information about text color, alignment, and list formatting</p>
</li>
<li><p><strong>Layout Precision</strong>: Provides comprehensive bounding box coordinates with width/height measurements</p>
</li>
<li><p><strong>System Metrics</strong>: Delivers helpful token usage statistics for optimization</p>
</li>
</ul>
<h3 id="heading-test-3-handwritten-text-recognition"><strong>Test 3: Handwritten Text Recognition</strong></h3>
<p>We evaluated both systems on a handwritten poem with cursive and stylized text.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741819901991/945dffb5-ae5f-4c2b-ae50-6acd0de1c0a0.jpeg" alt /></p>
<p><strong>Response - Gemini OCR :</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"transcribed_text"</span>: <span class="hljs-string">"The loure\n
                        Wensome and faranell my heart\n
                        lovely Seng night mary soup hing shineg\n
                        moor\nheart was beating\n
                        love\n
                        new\n
                        th rosehush on fre\n
                        My\n
                        the violet beautiful\n
                        The artists, evening song\n
                        hiff\n
                        To behinja Holde bili marst se lang Inerell farewell\n
                        Non I leave this litle hunt where my beloved live\n
                        Walking now with wiled steps through the lenses\n
                        Luna shines throught busk and oak zephar per path\n
                        And the bich trees bowing how shed incense on the trade\n
                        How beautiful the coolness of this lovely summer night!\n
                        Hon the asl fills with happines in this tul place of quiet!\n
                        I can scarcely scarcely gross the bliss, jot Heaven I would shan\n
                        A thousand nights like this if my darling granted one."</span>,
    <span class="hljs-attr">"writing_style"</span>: <span class="hljs-string">"cursive"</span>,
    <span class="hljs-attr">"confidence_score"</span>: <span class="hljs-number">0.75</span>
  },
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">800</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">600</span>,
  <span class="hljs-attr">"tags"</span>: [
    <span class="hljs-string">"handwritten text"</span>,
    <span class="hljs-string">"cursive script"</span>,
    <span class="hljs-string">"poetry"</span>,
    <span class="hljs-string">"personal note"</span>
  ],
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The loure\nWensome and faranell my heart"</span>,
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The loure"</span>,
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">46</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">56</span> },
            <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">186</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">67</span> },
            <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">46</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">93</span> },
            <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">186</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">93</span> }
          }
        }
      ]
<span class="hljs-comment">//Error parsing response: Expecting ',' delimiter: line 1172 column 25 (char 28793)</span>
</code></pre>
<p><em>Processed in</em> 40 <em>seconds</em></p>
<p><strong>Response - JigsawStack vOCR</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"confidence_score"</span>: [
      <span class="hljs-string">"0.85"</span>,
      <span class="hljs-string">"0.90"</span>,
      <span class="hljs-string">"0.80"</span>,
      <span class="hljs-string">"0.85"</span>,
      <span class="hljs-string">"0.80"</span>,
      <span class="hljs-string">"0.75"</span>,
      <span class="hljs-string">"0.80"</span>,
      <span class="hljs-string">"0.85"</span>,
      <span class="hljs-string">"0.80"</span>,
      <span class="hljs-string">"0.95"</span>,
      <span class="hljs-string">"0.90"</span>,
      <span class="hljs-string">"0.85"</span>,
      <span class="hljs-string">"0.90"</span>
    ],
    <span class="hljs-attr">"transcribed_text"</span>: [
      <span class="hljs-string">"The lovely Seng night may song luna shines"</span>,
      <span class="hljs-string">"Welcome and farewell my heart was beating"</span>,
      <span class="hljs-string">"the rashed on the moon the violet beautiful"</span>,
      <span class="hljs-string">"The nights evening song our love new life"</span>,
      <span class="hljs-string">"To belinge holde lili must so lamo farewell"</span>,
      <span class="hljs-string">"Now I leave this little bit where my chlorid him"</span>,
      <span class="hljs-string">"Walking now with mited steps through the legrors"</span>,
      <span class="hljs-string">"luna shines through bush and oak zephar per fate"</span>,
      <span class="hljs-string">"And the lich trees howing hor shed incense on the trad"</span>,
      <span class="hljs-string">"How beautiful the coolness of this lovely summer night!"</span>,
      <span class="hljs-string">"How the old fills with happiness in this true place of gime!"</span>,
      <span class="hljs-string">"I can scarcely grasp the bliss, yet Heaven, I would shun"</span>,
      <span class="hljs-string">"A thousand nights like this if my darling granted one."</span>
    ],
    <span class="hljs-attr">"writing_style"</span>: [
      <span class="hljs-string">"cursive"</span>,
      <span class="hljs-string">"poetic"</span>,
      <span class="hljs-string">"handwritten"</span>
    ]
  },
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">360</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">27</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">51</span> },
            <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">423</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">46</span> },
            <span class="hljs-attr">"height"</span>: <span class="hljs-number">27</span>,
            <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">27</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">23</span> },
            <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">423</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">20</span> },
            <span class="hljs-attr">"width"</span>: <span class="hljs-number">396</span>
          },
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The lorey Seng night may comp ling stuing"</span>,
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">28</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">52</span> },
                <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">57</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">52</span> },
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">29</span>,
                <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">29</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">23</span> },
                <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">57</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">23</span> },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">28.5</span>
              },
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"The"</span>
            },
            {
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">73</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">51</span> },
                <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">125</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">50</span> },
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">27.5</span>,
                <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">73</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">23</span> },
                <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">126</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">23</span> },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">52.5</span>
              },
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"lorey"</span>
            }
          ]

         <span class="hljs-comment">//  Detailed line-by-line data with bounding boxes truncated</span>
      <span class="hljs-string">"lines"</span>: [
        <span class="hljs-comment">// Each line contains detailed coordinate data truncated</span>
      ]
    }
  ],

  <span class="hljs-comment">// Additional metadata about document dimensions and processing truncated</span>
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"tags"</span>: [<span class="hljs-string">"text"</span>, <span class="hljs-string">"handwriting"</span>, <span class="hljs-string">"letter"</span>, <span class="hljs-string">"calligraphy"</span>, <span class="hljs-string">"paper"</span>, <span class="hljs-string">"document"</span>, <span class="hljs-string">"font"</span>],
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">459</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">360</span>
}
</code></pre>
<p><em>Processed in 40 seconds</em></p>
<h3 id="heading-gemini-ocr-performance-1">Gemini OCR Performance</h3>
<ul>
<li><p><strong>Processing Time</strong>: 42 seconds</p>
</li>
<li><p><strong>Accuracy</strong>: Handles the handwritten words successfully, with occasional variations in challenging text portions</p>
</li>
<li><p><strong>Output Quality</strong>: Provides basic bounding box coordinates</p>
</li>
<li><p><strong>Contextual Limitations</strong>: Difficulties differentiate between phrases and meaningful content, e.g., "stuing," "mited steps," "floy Alis"</p>
</li>
</ul>
<h3 id="heading-jigsawstack-vocr-performance-1">JigsawStack vOCR Performance</h3>
<ul>
<li><p><strong>Processing Time</strong>: 32 seconds</p>
</li>
<li><p><strong>Accuracy</strong>: Demonstrates good contextual understanding with intelligent interpretation of handwritten content</p>
</li>
<li><p><strong>Output Quality</strong>: Delivers complete JSON with both raw text recognition and enhanced interpretation</p>
</li>
<li><p><strong>Linguistic Intelligence</strong>: Reconstructs likely intended phrases like "How the soul fills with happiness" instead of "Hon the sl fills with happines"</p>
</li>
</ul>
<h2 id="heading-test-4-structured-document-pdf-processing">Test 4: Structured Document (PDF) Processing</h2>
<p>We evaluated a 15 page PDF: <a target="_blank" href="https://arxiv.org/pdf/2406.04692">https://arxiv.org/pdf/2406.04692</a></p>
<p><strong>Response - Gemini OCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"document_title"</span>: <span class="hljs-string">"Mixture-of-Agents Enhances Large Language Model\nCapabilities"</span>,
    <span class="hljs-attr">"section_headings"</span>: [
      <span class="hljs-string">"1 Introduction"</span>,
      <span class="hljs-string">"2 Mixture-of-Agents Methodology"</span>,
      <span class="hljs-string">"2.1 Collaborativeness of LLMs"</span>,
      <span class="hljs-string">"2.2 Mixture-of-Agents"</span>,
      <span class="hljs-string">"2.3 Analogy to Mixture-of-Experts"</span>,
      <span class="hljs-string">"3 Evaluation"</span>,
      <span class="hljs-string">"3.1 Setup"</span>,
      <span class="hljs-string">"3.2 Benchmark Results"</span>,
      <span class="hljs-string">"3.3 What Makes Mixture-of-Agents Work Well?"</span>,
      <span class="hljs-string">"3.4 Budget and Token Analysis"</span>,
      <span class="hljs-string">"4 Related Work"</span>,
      <span class="hljs-string">"4.1 LLM Reasoning"</span>,
      <span class="hljs-string">"4.2 Model Ensemble"</span>,
      <span class="hljs-string">"5 Conclusion"</span>,
      <span class="hljs-string">"Supplementary Material"</span>,
      <span class="hljs-string">"A Spearman Correlation using Different Similarity Functions"</span>,
      <span class="hljs-string">"B LLM Ranker"</span>,
      <span class="hljs-string">"C Case Study"</span>,
      <span class="hljs-string">"D MATH Task"</span>
    ],
    <span class="hljs-attr">"subsection_content"</span>: [
      <span class="hljs-string">"Recent advances in large language models (LLMs) demonstrate substantial capa-\nbilities in natural language understanding and generation tasks. With the growing\nnumber of LLMs, how to harness the collective expertise of multiple LLMs is an\nexciting open direction. Toward this goal, we propose a new approach that lever-\nages the collective strengths of multiple LLMs through a Mixture-of-Agents (MoA)\nmethodology. In our approach, we construct a layered MoA architecture wherein\neach layer comprises multiple LLM agents. Each agent takes all the outputs from\nagents in the previous layer as auxiliary information in generating its response.\nMoA models achieves state-of-art performance on AlpacaEval 2.0, MT-Bench and\nFLASK, surpassing GPT-4 Omni. For example, our MoA using only open-source\nLLMs is the leader of AlpacaEval 2.0 by a substantial gap, achieving a score of\n65.1% compared to 57.5% by GPT-4 Omni."</span>,
      <span class="hljs-string">"We begin by demonstrating the collaborativeness of LLMs, specifically their ability to generate higher\nquality responses when they can reference outputs from other models. As we have shown in the\nintroduction and Figure 1, many of today's available LLMs exhibit this collaborative capability."</span>,
      <span class="hljs-string">"The structure of MoA is illustrated in Figure 2. It has l layers and each layer-i consists of n LLMs,\ndenoted by Ai,1, Ai,2, ..., Ai,n. It is important to note that LLMs can be reused either within the\nsame layer or across different layers. When many LLMs in a layer are identical, this configuration\nleads to a special structure that corresponds to a model generating multiple possibly different outputs\n(due to the stochasticity of temperature sampling). We refer to this setting as single-proposer, where\nonly a sparse subset of models are activated."</span>,
      <span class="hljs-string">"Mixture-of-Experts (MoE) (Shazeer et al., 2017) is a prominent and well-established technique\nin machine learning where multiple expert networks specialize in different skill sets. The MoE\napproach has shown significant success across various applications due to its ability to leverage\ndiverse model capabilities for complex problem-solving tasks. Our MoA method draws inspiration\nfrom this methodology."</span>,
      <span class="hljs-string">"We mainly evaluate models on AlpacaEval 2.0 (Dubois et al., 2024), a leading\nbenchmark for assessing the alignment of LLMs with human preferences. It contains 805 instructions\nrepresentative of real use cases. Each model's response is directly compared against that of the GPT-4\n(gpt-4-1106-preview), with a GPT-4-based evaluator determining the likelihood of preferring the\nevaluated model's response. To ensure fairness, the evaluation employs length-controlled (LC) win\nrates, effectively neutralizing length bias."</span>,
      <span class="hljs-string">"In this subsection, we conduct experiments that provide us better understandings of the internal\nmechanism of Mixture-of-Agents. We summarize key insights below."</span>,
      <span class="hljs-string">"To understand the relationship between budget, token usage, and LC win rates, we conducted a budget\nand token analysis. Figure 5a and Figure 5b illustrate these relationships."</span>,
      <span class="hljs-string">"A straightforward solution to leverage the strengths of multiple models is reranking outputs from\ndifferent models. For instance, Jiang et al. (2023) introduce PAIRRANKER, which performs pairwise\ncomparisons on candidate outputs to select the best one, showing improvements on a self-constructed\ninstruction dataset. To address the substantial computational costs associated with multi-LLM\ninference, other studies have explored training a router that predicts the best-performing model\nfrom a fixed set of LLMs for a given input (Wang et al., 2024a; Shnitzer et al., 2024; Lu et al.,\n2023). Additionally, FrugalGPT (Chen et al., 2023b) proposed reducing the cost of using LLMs\nby employing different models in a cascading manner."</span>,
      <span class="hljs-string">"This paper introduces a Mixture-of-Agents approach aimed at leveraging the capabilities of multiple\nLLMs via successive stages for iterative collaboration. Our method harnesses the collective strengths\nof agents in the Mixture-of-Agents family, and can significantly improve upon the output quality of\neach individual model. Empirical evaluations conducted on AlpacaEval 2.0, MT-Bench, and FLASK\ndemonstrated substantial improvements in response quality, with our approach achieving the LC win\nrate up to 65%. These findings validate our hypothesis that integrating diverse perspectives from\nvarious models can lead to superior performance compared to relying on a single model alone. In\naddition, we provide insights into improving the design of MoA; systematic optimization of MoA\narchitecture is an interesting direction for future work."</span>,
      <span class="hljs-string">"We present results using TF-IDF-based similarity and Levenshtein similarity when calculating the\nSpearman correlation. Specifically, within each sample of n proposed answers, we calculate Spearman\ncorrelation coefficient between the n similarity scores and the n preference scores determined by the\nGPT-4-based evaluator. As shown in Figure 6, there is indeed a positive correlation between win rate\nand both TF-IDF similarity and Levenshtein similarity."</span>,
      <span class="hljs-string">"This section introduces the setup of the LLM-Ranker used in this paper. The LLM-Ranker is designed\nto evaluate and rank the best output generated by some LLMs. Table 5 presents the template for\nprompting the model during these evaluations. We use this LLM-Ranker to pick the best answer\namong and use AlpacaEval evaluator to evaluate the best ranked answer."</span>,
      <span class="hljs-string">"We present a case study in this section. Due to the length of the responses generated by all models,\nwe will only show selected fragments for brevity. To illustrate how the aggregator synthesizes the\nresponse, we underlined similar expressions between the proposed responses and the aggregated\nresponse in different colors. We omit the content that all proposed responses have mentioned."</span>,
      <span class="hljs-string">"Here, we demonstrate that our approach is applicable to reasoning tasks, such as those in the MATH\ndataset Hendrycks et al. (2021). The results are presented in Table 8, where we show that our method\nconsistently enhances accuracy by a significant margin. This indicates that our approach is also\neffective for this type of task."</span>
    ],
    <span class="hljs-attr">"tables"</span>: [
      <span class="hljs-string">"Table 1: Aggregate-and-Synthesize Prompt to integrate responses from other models."</span>,
      <span class="hljs-string">"Table 2: Results on AlpacaEval 2.0 and MT-Bench. For AlpacaEval 2.0, MoA and MoA-Lite\ncorrespond to the 6 proposer with 3 layers and with 2 layer respectively. MoA w/ GPT-40 corresponds\nto using GPT-40 as the final aggregator in MoA. We ran our experiments three times and reported the\naverage scores along with the standard deviation. † denotes our replication of the AlpacaEval results.\nWe ran all the MT-Bench scores ourselves to get turn-based scores."</span>,
      <span class="hljs-string">"Table 3: Effects of the number of proposer models\non AlpacaEval 2.0. We denote n as either the\nnumber of agents in an MoA layer or the number\nof proposed outputs in the single-proposer setting.\nWe use Qwen1.5-110B-Chat as the aggregator\nand use 2 MoA layers for all settings in this table."</span>,
      <span class="hljs-string">"Table 4: Impact of different models serving as\nproposers vs aggregators. When evaluating differ-\nent aggregators, all six models serve as proposers;\nwhen evaluating proposers, Qwen1.5-110B-Chat\nserves as the aggregator. We use 2 MoA layers in\nthis table."</span>,
      <span class="hljs-string">"Table 5: Prompt for ranking with LLMs"</span>,
      <span class="hljs-string">"Table 6: Case: Some models produce high quality answers."</span>,
      <span class="hljs-string">"Table 7: Case: all proposed responses are not good enough."</span>,
      <span class="hljs-string">"Table 8: Results on the MATH task. We evaluate different aggregators, with all six models serving as\nproposers in each MoA layer."</span>
    ],
    <span class="hljs-attr">"metadata"</span>: []
  },
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">827</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">1169</span>,
  <span class="hljs-attr">"tags"</span>: [
    <span class="hljs-string">"large language models"</span>,
    <span class="hljs-string">"mixture of agents"</span>,
    <span class="hljs-string">"LLM collaboration"</span>,
    <span class="hljs-string">"AI"</span>,
    <span class="hljs-string">"natural language processing"</span>
  ],
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"arXiv:2406.04692v1 [cs.CL] 7 Jun 2024"</span>,
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"arXiv:2406.04692v1 [cs.CL] 7 Jun 2024"</span>,
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">37</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">104</span> },
            <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">243</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">104</span> },
            <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">37</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">121</span> },
            <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">243</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">121</span> }
          },
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"arXiv:2406.04692v1"</span>,
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"top_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">37</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">104</span> },
                <span class="hljs-attr">"top_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">166</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">104</span> },
                <span class="hljs-attr">"bottom_left"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">37</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">121</span> },
                <span class="hljs-attr">"bottom_right"</span>: { <span class="hljs-attr">"x"</span>: <span class="hljs-number">166</span>, <span class="hljs-attr">"y"</span>: <span class="hljs-number">121</span> }
              }
            }
          ]
        },
        <span class="hljs-comment">//Additional lines truncated</span>

  <span class="hljs-comment">// Processing terminated after 43 seconds due to token limit (response too large)</span>
}
</code></pre>
<p><em>Processed in</em> 43 <em>seconds</em></p>
<p><strong>Response - JigsawStack vOCR:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"context"</span>: {
    <span class="hljs-attr">"document_title"</span>: [
      <span class="hljs-string">"Mixture-of-Agents Enhances Large Language Model"</span>,
      <span class="hljs-string">"Capabilities"</span>
    ],
    <span class="hljs-attr">"metadata"</span>: [
      <span class="hljs-string">"arXiv:2406.04692v1 [cs.CL] 7 Jun 2024"</span>
    ],
    <span class="hljs-attr">"section_headings"</span>: [
      <span class="hljs-string">"Abstract"</span>,
      <span class="hljs-string">"1 Introduction"</span>,
      <span class="hljs-string">"2 Mixture-of-Agents Methodology"</span>,
      <span class="hljs-string">"2.1 Collaborativeness of LLMs"</span>,
      <span class="hljs-string">"2.2 Mixture-of-Agents"</span>,
      <span class="hljs-string">"2.3 Analogy to Mixture-of-Experts"</span>,
      <span class="hljs-string">"3 Evaluation"</span>,
      <span class="hljs-string">"3.1 Setup"</span>,
      <span class="hljs-string">"3.2 Benchmark Results"</span>,
      <span class="hljs-string">"3.3 What Makes Mixture-of-Agents Work Well?"</span>,
      <span class="hljs-string">"3.4 Budget and Token Analysis"</span>,
      <span class="hljs-string">"4 Related Work"</span>,
      <span class="hljs-string">"4.1 LLM Reasoning"</span>,
      <span class="hljs-string">"4.2 Model Ensemble"</span>,
      <span class="hljs-string">"5 Conclusion"</span>,
      <span class="hljs-string">"Limitations."</span>,
      <span class="hljs-string">"Broader Impact."</span>,
      <span class="hljs-string">"References"</span>,
      <span class="hljs-string">"Supplementary Material"</span>,
      <span class="hljs-string">"A Spearman Correlation using Different Similarity Functions"</span>,
      <span class="hljs-string">"B LLM Ranker"</span>,
      <span class="hljs-string">"C Case Study"</span>,
      <span class="hljs-string">"D MATH Task"</span>
    ],
    <span class="hljs-attr">"subsection_content"</span>: [
      <span class="hljs-string">"Recent advances in large language models (LLMs) demonstrate substantial capa- bilities in natural language understanding and generation tasks. With the growing number of LLMs, how to harness the collective expertise of multiple LLMs is an exciting open direction. Toward this goal, we propose a new approach that lever- ages the collective strengths of multiple LLMs through a Mixture-of-Agents (MoA) methodology. In our approach, we construct a layered MoA architecture wherein each layer comprises multiple LLM agents. Each agent takes all the outputs from agents in the previous layer as auxiliary information in generating its response. MoA models achieves state-of-art performance on AlpacaEval 2.0, MT-Bench and FLASK, surpassing GPT-4 Omni. For example, our MoA using only open-source LLMs is the leader of AlpacaEval 2.0 by a substantial gap, achieving a score of 65.1% compared to 57.5% by GPT-4 Omni."</span>,
      <span class="hljs-string">"Large language models (LLMs) (Zhang et al., 2022a; Chowdhery et al., 2022; Touvron et al., 2023a; Team et al., 2023; Brown et al., 2020; OpenAI, 2023) have significantly advanced the field of natural language understanding and generation in recent years. These models are pretrained on vast amounts of data and subsequently aligned with human preferences to generate helpful and coherent outputs (Ouyang et al., 2022). However, despite the plethora of LLMs and their impressive achievements, they still face inherent constraints on model size and training data. Further scaling up these models is exceptionally costly, often requiring extensive retraining on several trillion tokens."</span>,
      <span class="hljs-string">"At the same time, different LLMs possess unique strengths and specialize in various tasks aspects. For instance, some models excel at complex instruction following (Xu et al., 2023a) while others may be better suited for code generation (Roziere et al., 2023; Guo et al., 2024). This diversity in skill sets among different LLMs presents an intriguing question: Can we harness the collective expertise of multiple LLMs to create a more capable and robust model?"</span>,
      <span class="hljs-string">"Our answer to this question is Yes. We identify an inherent phenomenon we term the collaborativeness of LLMs wherein an LLM tends to generate better responses when presented with outputs from other models, even if these other models are less capable by itself. Figure 1 showcases the LC win rate on the AlpacaEval 2.0 benchmark (Dubois et al., 2024) for 6 popular LLMs."</span>,
      <span class="hljs-string">"Our code can be found in: https://github.com/togethercomputer/moa."</span>,
      <span class="hljs-string">"In this section, we present our proposed methodology for leveraging multiple models to achieve boosted performance. We begin by demonstrating that LLMs possess collaborativeness and thus can improve their responses based on the outputs of other models. Following this, we introduce the Mixture-of-Agents methodology and discuss its design implications."</span>,
      <span class="hljs-string">"We begin by demonstrating the collaborativeness of LLMs, specifically their ability to generate higher quality responses when they can reference outputs from other models. As we have shown in the introduction and Figure 1, many of today's available LLMs exhibit this collaborative capability."</span>,
      <span class="hljs-string">"An important pathway to extract maximum benefits from collaboration of multiple LLMs is to characterize how different models are good at in various aspects of collaboration. During the collaboration process, we can categorize LLMs into two distinct roles:"</span>,
      <span class="hljs-string">"Proposers excel at generating useful reference responses for use by other models. While a good proposer may not necessarily produce responses with high scores by itself, it should offer more context and diverse perspectives, ultimately contributing to better final responses when used by an aggregator."</span>,
      <span class="hljs-string">"Aggregators are models proficient in synthesizing responses from other models into a single, high- quality output. An effective aggregator should maintain or enhance output quality even when integrating inputs that are of lesser quality than its own."</span>,
      <span class="hljs-string">"Section 3.3 empirically validate the roles of aggregators and proposers. Specifically, we show that many LLMs possess capabilities both as aggregators and proposers, while certain models displayed specialized proficiencies in distinct roles. GPT-40, Qwen1.5, LLaMA-3 emerged as a versatile model effective in both assisting and aggregating tasks. In contrast, WizardLM demonstrated excellent performance as an proposer model but struggled to maintain its effectiveness in aggregating responses from other models."</span>,
      <span class="hljs-string">"Given that an aggregator can generate higher-quality responses by building upon outputs from other models, we propose further enhancing this collaborative potential by introducing additional aggregators. One intuitive idea is to replicate the exercise with multiple aggregators initially using several to aggregate better answers and then re-aggregating these aggregated answers. By incorporating more aggregators into the process, we can iteratively synthesize and refine the responses, leveraging the strengths of multiple models to produce superior outcomes. This leads to the design of our proposed Mixture-of-Agents."</span>,
      <span class="hljs-string">"The structure of MoA is illustrated in Figure 2. It has l layers and each layer-i consists of n LLMs, denoted by Ai,1, Ai,2, ..., Ai,n. It is important to note that LLMs can be reused either within the same layer or across different layers. When many LLMs in a layer are identical, this configuration leads to a special structure that corresponds to a model generating multiple possibly different outputs (due to the stochasticity of temperature sampling). We refer to this setting as single-proposer, where only a sparse subset of models are activated."</span>,
      <span class="hljs-string">"Here, each LLM Ai,j processes an input text and generates its continuation. Our method does not require any fine-tuning and only utilizes the interface of prompting and generation of LLMs. Formally, given an input prompt 21, the output of i-th MoA layer yi can be expressed as follows:"</span>,
      <span class="hljs-string">"where + here means concatenation of texts; \u2295 means application of the Aggregate-and-Synthesize prompt shown in Table 1 to these model outputs."</span>,
      <span class="hljs-string">"In practice, we do not need to concatenate prompt and all model responses so only one LLM is needed to be used in the last layer. Therefore, we use the output of an LLM from the l-th layer (A1,1(x1)) as the final output and evaluate the metrics based on it."</span>,
      <span class="hljs-string">"Mixture-of-Experts (MoE) (Shazeer et al., 2017) is a prominent and well-established technique in machine learning where multiple expert networks specialize in different skill sets. The MoE approach has shown significant success across various applications due to its ability to leverage diverse model capabilities for complex problem-solving tasks. Our MoA method draws inspiration from this methodology."</span>,
      <span class="hljs-string">"A typical MoE design consists of a stack of layers known as MoE layers. Each layer comprises a set of n expert networks alongside a gating network and includes residual connections for improved gradient flow. Formally, for layer i, this design can be expressed as follows:"</span>,
      <span class="hljs-string">"where Gij represents the output from the gating network corresponding to expert j, and Eij denotes the function computed by expert network j. The leverage of multiple experts allows the model to learn different skill sets and focus on various aspects of the task at hand."</span>,
      <span class="hljs-string">"From a high-level perspective, our proposed MoA framework extends the MoE concept to the model level by operating at the model level rather than at the activation level. Specifically, our MoA approach leverages LLMs and operates entirely through the prompt interface rather than requiring modifications to internal activations or weights. This means that instead of having specialized sub-networks within a single model like in MoE, we utilize multiple full-fledged LLMs across different layers. Note that in our approach, we consolidate the roles of the gating network and expert networks using a LLM, as the intrinsic capacity of LLMs allows them to effectively regularize inputs by interpreting prompts and generating coherent outputs without needing external mechanisms for coordination."</span>,
      <span class="hljs-string">"Moreover, since this method relies solely on prompting capabilities inherent within off-the-shelf models: (1) It eliminates computational overhead associated with fine-tuning; (2) It provides flexibility and scalability: our method can be applied to the latest LLMs regardless of their size or architecture."</span>,
      <span class="hljs-string">"This section presents a comprehensive evaluation of our proposed MoA. Our findings show that:"</span>,
      <span class="hljs-string">"We achieve significant improvements on AlpacaEval 2.0, MT-Bench, and FLASK bench- marks. Notably, with open-source models only, our approach outperforms GPT-40 on AlpacaEval 2.0 and FLASK."</span>,
      <span class="hljs-string">"We conduct extensive experiments to provide better understandings of the internal mecha- nism of MoA."</span>,
      <span class="hljs-string">"Through a detailed budget analysis, several implementations of MoA can deliver perfor- mance comparable to GPT-4 Turbo while being 2\u00d7 more cost-effective."</span>,
      <span class="hljs-string">"Benchmarks We mainly evaluate models on AlpacaEval 2.0 (Dubois et al., 2024), a leading benchmark for assessing the alignment of LLMs with human preferences. It contains 805 instructions representative of real use cases. Each model's response is directly compared against that of the GPT-4 (gpt-4-1106-preview), with a GPT-4-based evaluator determining the likelihood of preferring the evaluated model's response. To ensure fairness, the evaluation employs length-controlled (LC) win rates, effectively neutralizing length bias.2"</span>,
      <span class="hljs-string">"Additionally, we also evaluate on MT-Bench (Zheng et al., 2023) and FLASK (Ye et al., 2023). MT-Bench uses GPT-4 to grade and give a score to model's answer. FLASK, on the other hand, offers a more granular evaluation with 12 skill-specific scores."</span>,
      <span class="hljs-string">"Models In our study, we constructed our default MoA by using only open-source models to achieve competitive performance. The models included are: Qwen1.5-110B-Chat (Bai et al., 2023), Qwen1.5- 72B-Chat, WizardLM-8x22B (Xu et al., 2023a), LLaMA-3-70B-Instruct (Touvron et al., 2023b), Mixtral-8x22B-v0.1 (Jiang et al., 2024), dbrx-instruct (The Mosaic Research Team, 2024). We construct 3 MoA layers and use the same set of models in each MoA layer. We use Qwen1.5-110B- Chat as the aggregator in the last layer. We also developed a variant called MoA w/ GPT-40, which prioritizes high-quality outputs by using GPT-40 as the aggregator in the final MoA layer. Another variant, MoA-Lite, emphasizes cost-effectiveness. It uses the same set of models as proposers but includes only 2 MoA layers and employs Qwen1.5-72B-Chat as the aggregator. This makes it more cost-effective than GPT-40 while achieving a 1.8% improvement in quality on AlpacaEval 2.0. We ensure strict adherence to the licensing terms of all models utilized in this research. For open-source models, all inferences were ran through Together Inference Endpoint.3"</span>,
      <span class="hljs-string">"In this subsection, we present our evaluation results on three standard benchmarks: AlpacaEval 2.0, MT-Bench, and FLASK. These benchmarks were chosen to comprehensively assess the performance of our approach and compare with the state-of-the-art LLMs."</span>,
      <span class="hljs-string">"AlpacaEval 2.0 We conducted comparisons against leading models such as GPT-4 and other state-of-the-art open-source models. The detailed results are presented in Table 2a where our MoA methodology achieved top positions on the AlpacaEval 2.0 leaderboard, demonstrating a remarkable 8.2% absolute improvement over the previous top model, GPT-40. Moreover, it is particularly noteworthy that our model outperformed GPT-40 using solely open-source models, achieving a margin of 7.6% absolute improvement from 57.5% (GPT-40) to 65.1% (MoA). Our MoA-Lite setup uses less layers and being more cost-effective. Even with this lighter approach, we still outperform the best model by 1.8%, improving from 57.5% (GPT-40) to 59.3% (MoA-Lite). This further highlights the effectiveness of our method in leveraging open-source models capabilities with varying compute budget to their fullest potential."</span>,
      <span class="hljs-string">"MT-Bench Though improvements over individual models on the MT-Bench are rel- atively incremental, this is understandable given that current models already perform exceptionally well on this benchmark, as a single model alone can achieve scores greater than 9 out of 10. Despite the marginal enhancements, our approach still secures the top position on the leaderboard. This demonstrates that even with already highly optimized benchmarks, our method can push the boundaries further, maintain- ing the leadership."</span>,
      <span class="hljs-string">"FLASK FLASK provides fine-grained evaluation of models. Among those met- rics, MoA excels in several key aspects. Specifically, our methodology shows signif- icant improvement in robustness, correct- ness, efficiency, factuality, commonsense, insightfulness, completeness, compared to the single model score of the aggregator, Qwen-110B-Chat. Additionally, MoA also outperforms GPT-4 Omni in terms of correctness, factuality, insightfulness, completeness, and metacognition. One metric where MoA did not do as well was conciseness; the model produced outputs that were marginally more verbose."</span>,
      <span class="hljs-string">"In this subsection, we conduct experiments that provide us better understandings of the internal mechanism of Mixture-of-Agents. We summarize key insights below."</span>,
      <span class="hljs-string">"Mixture-of-Agents significantly outperforms LLM rankers. First, we compare Mixture-of- Agents with an LLM-based ranker which uses the aggregator model to select one of the answers that are generated by the proposers, instead of generating a new output. The results are shown in Figure 4, where we can observe that the MoA approach significantly outperforms an LLM-ranker baseline. The fact that MoA outperforms the ranking approach suggests that the aggregator does not simply select one of the generated answers by the proposers, but potentially performs sophisticated aggregation over all proposed generations."</span>,
      <span class="hljs-string">"MoA tends to incorporate the best proposed answers. We also compare the aggregator's response with the proposers' responses via similarity scores such as BLEU (Papineni et al., 2002) which reflects n-gram overlaps. Within each sample, given n proposed answers by the proposers, we calculate the the Spearman's rank correlation coefficient between n similar scores and n preference scores determined by the GPT-4 based evaluator. The results in Figure 4 indeed confirms a positive correlation between the win rate and the BLEU score. We also provide results with Levenshtein similarity (RapidFuzz, 2023) or TF-IDF as opposed to BLEU scores in Appendix A. where both alternative approaches for textual similarities also yield positive correlation with the preference scores."</span>,
      <span class="hljs-string">"To understand the relationship between budget, token usage, and LC win rates, we conducted a budget and token analysis. Figure 5a and Figure 5b illustrate these relationships."</span>,
      <span class="hljs-string">"In order to improve generation quality of LLMs, recent researches have experienced great progresses in optimizing LLMs to various downstream tasks through prompt engineering. Chain of Thought (CoT) (Wei et al., 2022; Kojima et al., 2022) prompting techniques represent a linear problem- solving approach where each step builds upon the previous one. Fu et al. (2022) applied CoT to multi-step reasoning tasks. To automate CoT prompting, Auto-CoT (Zhang et al., 2022b) constructs demonstrations by sampling diverse questions and generating reasoning chains. Active-Prompt (Diao"</span>,
      <span class="hljs-string">"A straightforward solution to leverage the strengths of multiple models is reranking outputs from different models. For instance, Jiang et al. (2023) introduce PAIRRANKER, which performs pairwise comparisons on candidate outputs to select the best one, showing improvements on a self-constructed instruction dataset. To address the substantial computational costs associated with multi-LLM inference, other studies have explored training a router that predicts the best-performing model from a fixed set of LLMs for a given input (Wang et al., 2024a; Shnitzer et al., 2024; Lu et al., 2023). Additionally, FrugalGPT (Chen et al., 2023b) proposed reducing the cost of using LLMs by employing different models in a cascading manner. In order to better leverage the responses of multiple models, Jiang et al. (2023) trained a GENFUSER, a model that was trained to generate an improved response to capitalize on the strengths of multiple candidates. Huang et al. (2024) proposed to fuse the outputs of different models by averaging their output probability distributions."</span>,
      <span class="hljs-string">"Another line of work is multi-agent collaboration. Several studies explore using multiple large language models as agents that collectively discuss and reason through given problems interactively. Du et al. (2023) establishes a mechanism for symmetric discussions among agents. Around the same time, MAD (Liang et al., 2023) introduces an asymmetric mechanism design, with different roles, i.e., debater and judge. Other similar works include (Chan et al., 2023). Moreover, ReConcile (Chen et al., 2023a) exemplifies an asymmetric discussion involving weighted voting. To understand discussion more deeply, Zhang et al. (2023) aim to explain such collaboration mechanism in a social psychology view. Wang et al. (2024b) systematically compared multi-agent approaches and found a single agent with a strong prompt including detailed demonstrations can achieve comparable response quality to multi-agent approaches."</span>,
      <span class="hljs-string">"This paper introduces a Mixture-of-Agents approach aimed at leveraging the capabilities of multiple LLMs via successive stages for iterative collaboration. Our method harnesses the collective strengths of agents in the Mixture-of-Agents family, and can significantly improve upon the output quality of each individual model. Empirical evaluations conducted on AlpacaEval 2.0, MT-Bench, and FLASK demonstrated substantial improvements in response quality, with our approach achieving the LC win rate up to 65%. These findings validate our hypothesis that integrating diverse perspectives from various models can lead to superior performance compared to relying on a single model alone. In addition, we provide insights into improving the design of MoA; systematic optimization of MoA architecture is an interesting direction for future work."</span>,
      <span class="hljs-string">"Our proposed method requires iterative aggregation of model responses, which means the model cannot decide the first token until the last MoA layer is reached. This potentially results in a high Time to First Token (TTFT), which can negatively impact user experience. To mitigate this issue, we can limit the number of MoA layers, as the first response aggregation has the most significant boost on generation quality. Future work could explore chunk-wise aggregation instead of aggregating entire responses at once, which can reduce TTFT while maintaining response quality."</span>,
      <span class="hljs-string">"This study holds the potential to enhance the effectiveness of LLM-driven chat assistants, thereby making AI more accessible. Moreover, since the intermediate outputs that are expressed in natural language, MoA presented improves the interpretability of models. This enhanced interpretability facilitates better alignment with human reasoning."</span>,
      <span class="hljs-string">"We present results using TF-IDF-based similarity and Levenshtein similarity when calculating the Spearman correlation. Specifically, within each sample of n proposed answers, we calculate Spearman correlation coefficient between the n similarity scores and the n preference scores determined by the GPT-4-based evaluator. As shown in Figure 6, there is indeed a positive correlation between win rate and both TF-IDF similarity and Levenshtein similarity."</span>,
      <span class="hljs-string">"This section introduces the setup of the LLM-Ranker used in this paper. The LLM-Ranker is designed to evaluate and rank the best output generated by some LLMs. Table 5 presents the template for prompting the model during these evaluations. We use this LLM-Ranker to pick the best answer among and use AlpacaEval evaluator to evaluate the best ranked answer."</span>,
      <span class="hljs-string">"We present a case study in this section. Due to the length of the responses generated by all models, we will only show selected fragments for brevity. To illustrate how the aggregator synthesizes the response, we underlined similar expressions between the proposed responses and the aggregated response in different colors. We omit the content that all proposed responses have mentioned."</span>,
      <span class="hljs-string">"Table 6 showcases the responses generated by different proposers. The aggregated response generated by Qwen1.5-110B-Chat reflects a high preference for its own content but also incorporates key points from Llama-3-70B-Instruct and WizardLM 8x22B. Notably, GPT-4's preference score for WizardLM 8x22B's response is 0.99, and the final aggregated answer also achieves a preference score of 0.99."</span>,
      <span class="hljs-string">"Meanwhile, Table 7 presents another case where none of the proposed responses achieve a high GPT-4 preference score. Despite this, the aggregator successfully identifies and incorporates the strong points from these responses, achieving a preference score of 0.33."</span>,
      <span class="hljs-string">"Here, we demonstrate that our approach is applicable to reasoning tasks, such as those in the MATH dataset Hendrycks et al. (2021). The results are presented in Table 8, where we show that our method consistently enhances accuracy by a significant margin. This indicates that our approach is also effective for this type of task. Notably, our method is complementary to existing reasoning techniques such as Chain of Thought Wei et al. (2022) and Self-consistency Wang et al. (2022)."</span>
    ],
    <span class="hljs-attr">"tables"</span>: [
      <span class="hljs-string">"Table 2: Results on AlpacaEval 2.0 and MT-Bench. For AlpacaEval 2.0, MoA and MoA-Lite correspond to the 6 proposer with 3 layers and with 2 layer respectively. MoA w/ GPT-40 corresponds to using GPT-40 as the final aggregator in MoA. We ran our experiments three times and reported the average scores along with the standard deviation. \u2020 denotes our replication of the AlpacaEval results. We ran all the MT-Bench scores ourselves to get turn-based scores."</span>,
      <span class="hljs-string">"Table 1: Aggregate-and-Synthesize Prompt to integrate responses from other models."</span>,
      <span class="hljs-string">"Table 5: Prompt for ranking with LLMs"</span>,
      <span class="hljs-string">"Table 6: Case: Some models produce high quality answers."</span>,
      <span class="hljs-string">"Table 7: Case: all proposed responses are not good enough."</span>,
      <span class="hljs-string">"Table 8: Results on the MATH task. We evaluate different aggregators, with all six models serving as proposers in each MoA layer."</span>
    ]
  },
  <span class="hljs-attr">"total_pages"</span>: <span class="hljs-number">15</span>,
  <span class="hljs-attr">"width"</span>: <span class="hljs-number">612</span>,
  <span class="hljs-attr">"height"</span>: <span class="hljs-number">11880</span>,
  <span class="hljs-attr">"tags"</span>: [
    <span class="hljs-string">"text"</span>,
    <span class="hljs-string">"font"</span>,
    <span class="hljs-string">"screenshot"</span>,
    <span class="hljs-string">"letter"</span>,
    <span class="hljs-string">"paper"</span>,
    <span class="hljs-string">"document"</span>,
    <span class="hljs-string">"black and white"</span>,
    <span class="hljs-string">"printing"</span>,
    <span class="hljs-string">"circle"</span>,
    <span class="hljs-string">"parallel"</span>,
    <span class="hljs-string">"diagram"</span>,
    <span class="hljs-string">"number"</span>,
    <span class="hljs-string">"ink"</span>
  ],
  <span class="hljs-attr">"has_text"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"sections"</span>: [
    {
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Mixture-of-Agents Enhances Large Language Model\nCapabilities\nJunlin Wang Jue Wang Ben Athiwaratkun\nDuke University Together AI Together AI\nTogether AI jue@together.ai ben@together.ai\njunlin.wang2@duke.edu\nCe Zhang James Zou\nUniversity of Chicago Stanford University\nTogether Al Together Al\ncez@uchicago.edu jamesz@stanford.edu\nAbstract\nRecent advances in large language models (LLMs) demonstrate substantial capa-\nbilities in natural language understanding and generation tasks. With the growing\nnumber of LLMs, how to harness the collective expertise of multiple LLMs is an\nexciting open direction. Toward this goal, we propose a new approach that lever-\nages the collective strengths of multiple LLMs through a Mixture-of-Agents (MoA)\nmethodology. In our approach, we construct a layered MoA architecture wherein\neach layer comprises multiple LLM agents. Each agent takes all the outputs from\nagents in the previous layer as auxiliary information in generating its response,\nMoA models achieves state-of-art performance on AlpacaEval 2.0, MT-Bench and\nFLASK, surpassing GPT-4 Omni. For example, our MoA using only open-source\nLLMs is the leader of AlpacaEval 2.0 by a substantial gap, achieving a score of\n65.1% compared to 57.5% by GPT-4 Omni.1\n1 Introduction\nLarge language models (LLMs) (Zhang et al., 2022a; Chowdhery et al., 2022; Touvron et al., 2023a;\nTeam et al., 2023; Brown et al., 2020; OpenAI, 2023) have significantly advanced the field of natural\nlanguage understanding and generation in recent years. These models are pretrained on vast amounts\nof data and subsequently aligned with human preferences to generate helpful and coherent outputs\narXiv:2406.04692v1 [cs.CL] 7 Jun 2024\n(Ouyang et al., 2022). However, despite the plethora of LLMs and their impressive achievements,\nthey still face inherent constraints on model size and training data. Further scaling up these models is\nexceptionally costly, often requiring extensive retraining on several trillion tokens.\nAt the same time, different LLMs possess unique strengths and specialize in various tasks aspects.\nFor instance, some models excel at complex instruction following (Xu et al., 2023a) while others may\nbe better suited for code generation (Roziere et al., 2023; Guo et al., 2024). This diversity in skill sets\namong different LLMs presents an intriguing question: Can we harness the collective expertise of\nmultiple LLMs to create a more capable and robust model?\nOur answer to this question is Yes. We identify an inherent phenomenon we term the collaborativeness\nof LLMs - wherein an LLM tends to generate better responses when presented with outputs\nfrom other models, even if these other models are less capable by itself. Figure I showcases\nthe LC win rate on the AlpacaEval 2.0 benchmark (Dubois et al., 2024) for 6 popular LLMs.\n'Our code can be found in: https://github.com/togethercomputer/noa.\nPreprint Under review."</span>,
      <span class="hljs-attr">"lines"</span>: [
        {
          <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Mixture-of-Agents Enhances Large Language Model"</span>,
          <span class="hljs-attr">"bounds"</span>: {
            <span class="hljs-attr">"top_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">109</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">97</span>
            },
            <span class="hljs-attr">"top_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">502</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">97</span>
            },
            <span class="hljs-attr">"bottom_right"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">502</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">117</span>
            },
            <span class="hljs-attr">"bottom_left"</span>: {
              <span class="hljs-attr">"x"</span>: <span class="hljs-number">109</span>,
              <span class="hljs-attr">"y"</span>: <span class="hljs-number">117</span>
            },
            <span class="hljs-attr">"width"</span>: <span class="hljs-number">393</span>,
            <span class="hljs-attr">"height"</span>: <span class="hljs-number">20</span>
          },
          <span class="hljs-attr">"words"</span>: [
            {
              <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Mixture-of-Agents"</span>,
              <span class="hljs-attr">"bounds"</span>: {
                <span class="hljs-attr">"top_left"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">109</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">98</span>
                },
                <span class="hljs-attr">"top_right"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">247</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">98</span>
                },
                <span class="hljs-attr">"bottom_right"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">247</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">118</span>
                },
                <span class="hljs-attr">"bottom_left"</span>: {
                  <span class="hljs-attr">"x"</span>: <span class="hljs-number">109</span>,
                  <span class="hljs-attr">"y"</span>: <span class="hljs-number">118</span>
                },
                <span class="hljs-attr">"width"</span>: <span class="hljs-number">138</span>,
                <span class="hljs-attr">"height"</span>: <span class="hljs-number">20</span>
              }
            }, 
            {
                <span class="hljs-comment">//Detailed line-by-line data with bounding boxes</span>
            },
                <span class="hljs-string">"width"</span>: <span class="hljs-number">9</span>,
                <span class="hljs-string">"height"</span>: <span class="hljs-number">9.5</span>
              }
            }
          ]
        }
      ]
    }
  ],
}
</code></pre>
<p><em>Processed in 37 seconds</em></p>
<h3 id="heading-gemini-ocr-performance-2">Gemini OCR Performance</h3>
<ul>
<li><p><strong>Processing Time</strong>: 43 seconds</p>
</li>
<li><p><strong>Accuracy</strong>: Incomplete extraction due to running out of tokens, processing only a fraction of the document</p>
</li>
<li><p><strong>Output Quality</strong>: Limited to extracting metadata and first page elements before encountering errors</p>
</li>
<li><p><strong>Coordinate Precision</strong>: High precision for elements it processed but failed to maintain throughout</p>
</li>
<li><p><strong>Reliability</strong>: Encountered processing limitations leading to incomplete output</p>
</li>
</ul>
<h3 id="heading-jigsawstack-vocr-performance-2">JigsawStack vOCR Performance</h3>
<ul>
<li><p><strong>Processing Time</strong>: 37 seconds</p>
</li>
<li><p><strong>Accuracy</strong>: Comprehensive extraction of all 15 pages with complete contextual information</p>
</li>
<li><p><strong>Output Quality</strong>: Well-structured JSON with hierarchical organization of document elements</p>
</li>
<li><p><strong>Coordinate Precision</strong>: Detailed bounding box coordinates with width/height measurements for every text element</p>
</li>
<li><p><strong>Reliability</strong>: Successfully processed over 350,000 tokens of content with no degradation</p>
</li>
</ul>
<h2 id="heading-key-findings">Key Findings</h2>
<ul>
<li><p><strong>Processing Efficiency</strong>: JigsawStack vOCR consistently delivers faster processing times across various document types while maintaining high-quality results</p>
</li>
<li><p><strong>Structured Data Organization</strong>: JigsawStack provides comprehensive output structures with hierarchical formatting that makes information immediately actionable</p>
</li>
<li><p><strong>Multilingual Capabilities</strong>: JigsawStack shows particular strength in handling non-Latin scripts like Japanese and Telugu with proper Unicode encoding</p>
</li>
<li><p><strong>Contextual Understanding</strong>: JigsawStack offers dual-layer recognition that provides both raw text and enhanced interpretations for challenging content</p>
</li>
<li><p><strong>Document Intelligence</strong>: JigsawStack includes valuable metadata about document formatting, language detection, and visual presentation</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Our benchmarking shows that both systems offer effective OCR capabilities with different strengths. Gemini OCR provides good basic text recognition with solid performance for straightforward content. JigsawStack vOCR delivers enhanced functionality through its structured output formats, superior multilingual support, and comprehensive document analysis.</p>
<p>Run these tests yourself here: <a target="_blank" href="https://colab.research.google.com/drive/1ShY7YsU7LXK5FHzoFShMom0sUS9_-nVa?usp=sharing"><strong>Google Colab Notebook</strong></a><strong>.</strong></p>
<h3 id="heading-gemini-ocr-vs-jigsawstack-vocr-1"><strong>Gemini OCR vs. JigsawStack vOCR</strong></h3>
<p>◐ = partial ❌ = inaccurate/fails ✅ = accurate/succeeds</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Gemini OCR</strong></td><td><strong>JigsawStack vOCR</strong></td></tr>
</thead>
<tbody>
<tr>
<td>🌐 <strong>Multilingual Support</strong></td><td>Good base coverage with standard processing times ◐</td><td>Excellent support for 70+ languages with efficient processing ✅</td></tr>
<tr>
<td>📝 <strong>Handwriting Recognition</strong></td><td>Captures basic handwritten content ❌</td><td>Strong accuracy with contextual interpretation capabilities ✅</td></tr>
<tr>
<td>⊞ <strong>Bounding Boxes</strong></td><td>Provides coordinate data for identified text ◐</td><td>Detailed positioning with comprehensive width/height measurements ✅</td></tr>
<tr>
<td>📁 <strong>Structured Output</strong></td><td>Limited, provided basic text extraction with some formatting ❌</td><td>Rich hierarchical structure with semantic and spatial integration ✅</td></tr>
<tr>
<td>⚡ <strong>Processing Speed</strong></td><td>Variable processing times (11-42 seconds) ❌</td><td>Consistently faster processing (12-32 seconds) ✅</td></tr>
<tr>
<td>🧠 <strong>Context Understanding</strong></td><td>Identifies document types and basic structure ◐</td><td>Preserves relationships between elements with dual-layer analysis ✅</td></tr>
<tr>
<td>📕 <strong>Complex Document Handling</strong></td><td>Handles standard files; may face token limits or parsing issues with complex content ❌</td><td>Excels with intricate layouts and maintains structure integrity ✅</td></tr>
</tbody>
</table>
</div><h3 id="heading-recommended-use"><strong>Recommended Use:</strong></h3>
<ul>
<li><p><strong>Basic Text Recognition</strong>: Both systems perform effectively for simple English text extraction</p>
</li>
<li><p><strong>Detailed Document Analysis</strong>: JigsawStack vOCR offers more comprehensive structured data with spatial positioning and formatting details</p>
</li>
<li><p><strong>Multilingual Processing</strong>: JigsawStack demonstrates notable advantages for non-Latin scripts and complex language handling</p>
</li>
<li><p><strong>Time-Sensitive Applications</strong>: JigsawStack's consistently faster processing times provide efficiency benefits for high-volume document processing</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[JigsawStack Pricing Updates & v3 Focus!]]></title><description><![CDATA[JigsawStack began with a simple goal: make infrastructure automation accessible to everyone. Along the way, we connected deeply with developers and discovered the critical aspects of infrastructure that truly matter.

Full video walkthrough with the ...]]></description><link>https://blogdata.jigsawstack.com/pricing-and-v3-updates</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/pricing-and-v3-updates</guid><category><![CDATA[pricing update]]></category><category><![CDATA[updates v3]]></category><category><![CDATA[pricing]]></category><category><![CDATA[Tokenization]]></category><category><![CDATA[token]]></category><dc:creator><![CDATA[Yoeven D Khemlani]]></dc:creator><pubDate>Wed, 02 Apr 2025 02:20:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743557346731/ee0a33dc-5ae1-4456-bcc5-be48ada036ce.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>JigsawStack began with a simple goal: <strong>make infrastructure automation accessible to everyone</strong>. Along the way, we connected deeply with developers and discovered the critical aspects of infrastructure that truly matter.</p>
<blockquote>
<p>Full video walkthrough with the JigsawStack team <a target="_blank" href="https://www.youtube.com/watch?v=NxNdhmV0KS0&amp;t=49s">here</a>.</p>
</blockquote>
<h2 id="heading-if-youre-not-gonna-read-everything-read-this">If you’re not gonna read everything, read this 👇</h2>
<ul>
<li><p><strong>Rollout Date:</strong> April 11th<br />  <em>(No action required on your part; the switch to the new pricing is automatic.)</em></p>
</li>
<li><p><strong>Notifications:</strong><br />  Two additional emails and a dashboard notice will be sent as we approach the update.</p>
</li>
<li><p><strong>Enterprise Customers:</strong><br />  Custom pricing for the commitment tier remains unchanged until the next contract cycle (unless requested otherwise).</p>
</li>
<li><p><strong>v3 updates</strong></p>
<p>  Progressive weekly updates from April 11th</p>
</li>
</ul>
<h2 id="heading-from-v1-to-v2-delivering-real-value">From v1 to v2: Delivering Real Value</h2>
<p>When we launched <strong>JigsawStack v2</strong>, we adopted a clear mantra:</p>
<blockquote>
<p><em>If a feature only adds convenience, we won't build it.</em></p>
</blockquote>
<p>Instead, we focused on delivering features that save developers months of work. This meant streamlining our services—removing those that didn’t provide tangible value and honing in on the essentials.</p>
<h3 id="heading-our-three-key-model-categories">Our Three Key Model Categories</h3>
<ul>
<li><p><strong>Data Extraction</strong></p>
<ul>
<li><p>AI Scraper</p>
</li>
<li><p>vOCR</p>
</li>
<li><p>Speech-to-Text</p>
</li>
</ul>
</li>
<li><p><strong>Data Transformation</strong></p>
<ul>
<li><p>Translation</p>
</li>
<li><p>Prompt Engine</p>
</li>
<li><p>Text-to-Speech</p>
</li>
</ul>
</li>
<li><p><strong>Data Validation</strong></p>
<ul>
<li><p>NSFW Check</p>
</li>
<li><p>Spell Check</p>
</li>
</ul>
</li>
</ul>
<p>Our approach is simple yet powerful:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743558667970/9864c575-fb9d-4cd1-bdad-1ebba0df0cb1.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><strong>Base Infra + SLM/Deep Learning Model (trained/fine-tuned for base infra) + ML Model (grounding) = JigsawStack</strong></p>
</blockquote>
<p>Training our models to manage underlying infrastructure opened up new possibilities, reduced limitations, and increased accuracy.</p>
<h2 id="heading-introducing-jigsawstack-v3">Introducing JigsawStack v3</h2>
<p>JigsawStack v3 builds on our commitment to real value by:</p>
<ul>
<li><p><strong>Merging and removing services</strong> to eliminate redundancy.</p>
</li>
<li><p><strong>Improving accessibility</strong> with major updates.</p>
</li>
<li><p><strong>Lowering costs and scaling solutions</strong> for developers at every stage.</p>
</li>
</ul>
<p>We emphasize <strong>data</strong> because infrastructure is fundamentally about data movement, driving our commitment to our three key categories.</p>
<h3 id="heading-upcoming-service-updates">Upcoming Service Updates</h3>
<h4 id="heading-service-merges">Service Merges</h4>
<ul>
<li><p><strong>AI Scraper &amp; Web Scraper</strong> combined</p>
</li>
<li><p><strong>AI Web Search &amp; Geo Search</strong> combined</p>
</li>
</ul>
<p><strong>Deprecation</strong></p>
<ul>
<li><p>Web Scraper (Merged with AI Scraper)</p>
</li>
<li><p>Geo Search (Merged with Web Search)</p>
</li>
</ul>
<h4 id="heading-new-model-launches">New Model Launches</h4>
<ul>
<li><p><strong>Embedding model</strong> (v1 beta)</p>
</li>
<li><p><strong>Image-to-Image Translation model</strong></p>
<ul>
<li><p>V1: In-scene machine translation</p>
</li>
<li><p>V2: Diffusion based</p>
</li>
</ul>
</li>
<li><p><strong>Speaker Diarization model</strong> (faster, cheaper, and more accurate)</p>
</li>
<li><p><strong>SOTA Object detection</strong> by combing SAM2 + Object Labeling + OmniParserv2 + vLLM</p>
</li>
</ul>
<h4 id="heading-enhanced-features">Enhanced Features</h4>
<ul>
<li><p>Updated image generation service with native support for:</p>
<ul>
<li><p>Image-to-image</p>
</li>
<li><p>Text-to-image</p>
</li>
<li><p>Image-to-video</p>
</li>
<li><p>Prompt-based editing</p>
</li>
</ul>
</li>
<li><p>Improved Python SDK (upcoming breaking change)</p>
</li>
<li><p>Usable apps built on JigsawStack models</p>
</li>
</ul>
<h2 id="heading-pricing-updates-scalable-and-developer-friendly">Pricing Updates: Scalable and Developer-Friendly</h2>
<p>Accessibility means having <strong>predictable and scalable pricing</strong>. In v1, a fixed usage-based pricing model on API calls worked well. However, with our enhanced models in v2, usage is truly driven by your input.</p>
<p>Now, we’ve moved to a <strong>token-based pricing model</strong> that is granular enough for developers to control their costs while scaling dynamically with usage. This model aligns with market standards for many AI companies.</p>
<h3 id="heading-new-pricing-tiers">New Pricing Tiers</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Tier</td><td>Price</td><td>Tokens Included</td><td>Additional Cost</td></tr>
</thead>
<tbody>
<tr>
<td>Free tier</td><td>$0/month</td><td>1 million tokens</td><td>-</td></tr>
<tr>
<td>Pro tier</td><td>$27/month</td><td>8 million tokens</td><td>$1.40 per million tokens</td></tr>
</tbody>
</table>
</div><p>Tokens are calculated across three dimensions:</p>
<ul>
<li><p><strong>Input &amp; Output Tokens:</strong> $1.40/million tokens</p>
</li>
<li><p><strong>Inference Time Tokens:</strong> 1 millisecond (ms) processing = 1 token</p>
</li>
</ul>
<blockquote>
<p><em>A consistent rate of $1.40 per million tokens applies across all models</em></p>
</blockquote>
<h3 id="heading-how-token-based-pricing-works">How Token-Based Pricing Works</h3>
<p>Every request now includes a <code>_usage</code> key providing the token breakdown, so you can better estimate costs based on:</p>
<ul>
<li><p><strong>Input tokens</strong></p>
</li>
<li><p><strong>Output tokens</strong></p>
</li>
<li><p><strong>Inference time tokens</strong></p>
</li>
</ul>
<pre><code class="lang-json">{
  <span class="hljs-attr">"_usage"</span>: {
    <span class="hljs-attr">"input_tokens"</span>: <span class="hljs-number">43</span>,
    <span class="hljs-attr">"output_tokens"</span>: <span class="hljs-number">9470</span>,
    <span class="hljs-attr">"inference_time_tokens"</span>: <span class="hljs-number">16569</span>,
    <span class="hljs-attr">"total_tokens"</span>: <span class="hljs-number">26082</span>
  }
}
</code></pre>
<h4 id="heading-example-1">Example 1</h4>
<ul>
<li><p><strong>Input:</strong> 100 tokens</p>
</li>
<li><p><strong>Processing:</strong> 3 seconds (3000 ms)</p>
</li>
<li><p><strong>Output:</strong> 20 tokens</p>
</li>
</ul>
<p>Calculation:</p>
<pre><code class="lang-plaintext">Cost per token (CPT) = 1.40 / 1,000,000
Total cost ≈ 100 * CPT + 20 * CPT + 3000 * CPT ≈ $0.004368
</code></pre>
<h4 id="heading-example-2">Example 2</h4>
<ul>
<li><p><strong>Input:</strong> 3 tokens (URL only)</p>
</li>
<li><p><strong>Output:</strong> 100 tokens</p>
</li>
<li><p><strong>Processing:</strong> 5 seconds (5000 ms)</p>
</li>
</ul>
<p>Calculation:</p>
<pre><code class="lang-plaintext">Total cost ≈ 3 * CPT + 100 * CPT + 5000 * CPT ≈ $0.0071442
</code></pre>
<p>In these examples, processing time is factored into the cost—not the duration of the audio or the input size—resulting in savings of <strong>6x to 10x</strong> compared to the previous flat rate of $0.05 per request.</p>
<h2 id="heading-how-does-this-compare">How Does This Compare?</h2>
<h3 id="heading-token-based-pricing-1401m-tokens-vs-005-per-invocation">Token-Based Pricing ($1.40/1m Tokens) vs. $0.05 per Invocation</h3>
<ul>
<li><p><strong>Prediction API:</strong></p>
<pre><code class="lang-plaintext">  Token Cost = (1.40 / 1,000,000) * 984 ≈ 0.0013776  
  Savings Ratio ≈ 0.05 / 0.0013776 ≈ 36x cheaper
</code></pre>
</li>
<li><p><strong>AI Web Scraper API:</strong></p>
<pre><code class="lang-plaintext">  Token Cost = (1.40 / 1,000,000) * 13,507 ≈ 0.0189098  
  Savings Ratio ≈ 2.65x cheaper
</code></pre>
</li>
<li><p><strong>vOCR API:</strong></p>
<pre><code class="lang-plaintext">  Token Cost = (1.40 / 1,000,000) * 15,068 ≈ 0.0210952  
  Savings Ratio ≈ 2.37x cheaper
</code></pre>
</li>
<li><p><strong>NSWF API:</strong></p>
<pre><code class="lang-plaintext">  Token Cost = (1.40 / 1,000,000) * 1,524 ≈ 0.0021336  
  Savings Ratio ≈ 23.44x cheaper
</code></pre>
</li>
<li><p><strong>Image Generation API:</strong></p>
<pre><code class="lang-plaintext">  Token Cost = (1.40 / 1,000,000) * 13,297 ≈ 0.0186158  
  Savings Ratio ≈ 2.69x cheaper
</code></pre>
</li>
</ul>
<h2 id="heading-rollout-and-transition-for-existing-users">Rollout and Transition for Existing Users</h2>
<ul>
<li><p><strong>Rollout Date:</strong> April 11th<br />  <em>(No action required on your part; the switch to the new pricing is automatic.)</em></p>
</li>
<li><p><strong>Notifications:</strong><br />  Two additional emails and a dashboard notice will be sent as we approach the update.</p>
</li>
<li><p><strong>Enterprise Customers:</strong><br />  Custom pricing for the commitment tier remains unchanged until the next contract cycle (unless requested otherwise).</p>
</li>
<li><p><strong>v3 updates</strong></p>
<p>  Progressive weekly updates from April 11th</p>
</li>
</ul>
<h2 id="heading-we-value-your-feedback">We Value Your Feedback</h2>
<p>JigsawStack v3 is built with a developer-first mindset—improving everything from developer experience (DX) to cost efficiency. Your honest and direct feedback helped shape v3, and we’re eager to hear your thoughts on how we can continue to improve.</p>
<p>Our small, passionate team of engineers is growing, and we’re always looking for talented, “cracked” engineers to join us. If you're interested, check out our <a target="_blank" href="https://jigsawstack.com/careers">careers page</a> or reach out—even if no current role fits your profile, you might just be the perfect addition to our team!</p>
<p>Thank you for being part of our journey! If you encounter any issues during this transition or notice any bugs, please email us at <strong>support@jigsawstack.com</strong> or drop a message on our <a target="_blank" href="https://discord.gg/dj8fMBpnqd">Discord</a>. We're here to help.</p>
]]></content:encoded></item><item><title><![CDATA[OpenAI Audio STT vs JigsawStack STT]]></title><description><![CDATA[The past few weeks have been awesome in the AI Audio space, with a new ASR model from ElevenLabs, to the open source launch of Nvidia’s 1b Canary model.
OpenAI’s open-source model Whisper 3 large/turbo has been the gold standard for transcription whi...]]></description><link>https://blogdata.jigsawstack.com/openai-audio-stt-vs-jigsawstack-stt</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/openai-audio-stt-vs-jigsawstack-stt</guid><category><![CDATA[openai audio]]></category><category><![CDATA[openai stt]]></category><category><![CDATA[openai speech to text]]></category><category><![CDATA[speech to text]]></category><category><![CDATA[Speech Recognition]]></category><category><![CDATA[openai]]></category><category><![CDATA[Transcription]]></category><category><![CDATA[Audio Transcription]]></category><dc:creator><![CDATA[Yoeven D Khemlani]]></dc:creator><pubDate>Fri, 21 Mar 2025 13:13:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742561161876/f7f5bf0b-e397-4ab9-bc6b-c3bae446651a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The past few weeks have been awesome in the AI Audio space, with a new ASR model from ElevenLabs, to the open source launch of <a target="_blank" href="https://huggingface.co/nvidia/canary-1b">Nvidia’s 1b Canary model</a>.</p>
<p>OpenAI’s open-source model Whisper 3 large/turbo has been the gold standard for transcription which in our eyes remains pretty much undefeated when you compare the full feature set of languages, word level timestamps, and the ability the tune the model to add more languages and improve performance!</p>
<p>Many optimizations exist like <a target="_blank" href="https://github.com/SYSTRAN/faster-whisper">faster whisper</a> and our version <a target="_blank" href="https://github.com/JigsawStack/insanely-fast-whisper-api">Insanely Fast Whisper API</a> which beats the base Whisper 3 &amp; 2 provided by OpenAI through their API way out of the park.</p>
<p>OpenAI <a target="_blank" href="https://openai.com/index/introducing-our-next-generation-audio-models/">launched a closed-source</a> model <code>gpt-4o-transcribe</code> that claims to be the “next-generation” of audio models, outperforming the best in the market by benchmarking themselves against Whisper 3, Gemini 2 and Nova.</p>
<p>What is Speech-to-Text/ ASR / Transcription? It’s a type of model that takes in an audio file of a speaker or multiple speakers and transcribes that into text. Some basic features all good Transcription models should have:</p>
<ul>
<li><p>Time stamps (Either word-level or sentence-level)</p>
</li>
<li><p>Speaker recognition</p>
</li>
<li><p>Large files &amp; long audio support</p>
</li>
<li><p>Blazing fast speeds for short audio (Real-time use case)</p>
</li>
<li><p>Multilingual support &amp; Translation</p>
</li>
<li><p>High accuracy (WER)</p>
</li>
</ul>
<p>We’ll be comparing <a target="_blank" href="https://platform.openai.com/docs/guides/speech-to-text?lang=javascript">OpenAI gpt-4o-transcribe</a> against <a target="_blank" href="https://jigsawstack.com/speech-to-text">JigsawStack Speech-to-text</a> in a series of real-world examples.</p>
<h2 id="heading-sneak-peek-if-you-cant-wait">Sneak peek if you can’t wait 👇</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>OpenAI gpt-4o-transcribe</strong></td><td><strong>JigsawStack Speech-to-text</strong></td></tr>
</thead>
<tbody>
<tr>
<td>⏳ Timestamps</td><td>No support was found on their docs. ❌</td><td>Sentence level timestamp by default and speaker level timestamp available. ✅</td></tr>
<tr>
<td>💬 Speaker recognition</td><td>No support was found on their docs. ❌</td><td>Speaker recognition through diarization is available with timestamp support per speaker. Up to 50 speakers supported. ✅</td></tr>
<tr>
<td>⛰️ Large file &amp; long audio support</td><td>Supported up to 25 MB file size and 25 mins of audio per request. ❌</td><td>Supports up to 100 MB file size and 4 hours of audio per request. ✅</td></tr>
<tr>
<td>⚡ Performance</td><td>Almost ~2.4x slower than JigsawStack ❌</td><td>~2.4x faster transcription on all audio lengths while providing more data like timestamps ✅</td></tr>
<tr>
<td>🌍 Multilingual support</td><td>Great support for transcribing most popular languages ✅</td><td>JigsawStack came in close second for Native multilingual transcription ◐✅</td></tr>
<tr>
<td>🔄 Translation</td><td>No support was found on their docs ❌</td><td>Built it translation support with over 100+ languages ✅</td></tr>
<tr>
<td>📝 Accuracy</td><td>No exact WER data but got a 93% accurate transcription on our real-world test. ❌</td><td>Got 97% accurate transcription on real-world test. ✅</td></tr>
<tr>
<td>👯‍♀️ Team Size</td><td>~5,300 people working at OpenAI</td><td>3 people working at JigsawStack</td></tr>
</tbody>
</table>
</div><p>Here’s the simple JS/TS script we’re gonna use to test everything</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;
<span class="hljs-keyword">import</span> OpenAI <span class="hljs-keyword">from</span> <span class="hljs-string">"openai"</span>;
<span class="hljs-keyword">import</span> fs <span class="hljs-keyword">from</span> <span class="hljs-string">"fs"</span>;

<span class="hljs-keyword">const</span> jigsaw = JigsawStack({
  apiKey: <span class="hljs-string">"your-api-key"</span>,
});

<span class="hljs-keyword">const</span> openai = <span class="hljs-keyword">new</span> OpenAI({
  apiKey: <span class="hljs-string">"your-api-key"</span>
});

<span class="hljs-comment">// Replace this with any audio file</span>
<span class="hljs-keyword">const</span> testAudioURL = <span class="hljs-string">"https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/preview/stt-examples/stt_very_short_audio_sample_2.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3ByZXZpZXcvc3R0LWV4YW1wbGVzL3N0dF92ZXJ5X3Nob3J0X2F1ZGlvX3NhbXBsZV8yLm1wMyIsImlhdCI6MTc0MjUzOTkwOCwiZXhwIjoxNzc0MDc1OTA4fQ.7Ru6dD-3iaFOox2sqQgzmZH5pAs_RJnH3RfL00yGHqE"</span>;

<span class="hljs-keyword">const</span> run = <span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-comment">//download the file locally first before running the test</span>
    <span class="hljs-keyword">const</span> file = <span class="hljs-keyword">await</span> fetch(testAudioURL);
    <span class="hljs-keyword">const</span> fileBuffer = <span class="hljs-keyword">await</span> file.arrayBuffer();
    <span class="hljs-keyword">const</span> buffer = Buffer.from(fileBuffer);
    fs.writeFileSync(<span class="hljs-string">"test-audio.mp3"</span>, buffer <span class="hljs-keyword">as</span> <span class="hljs-built_in">any</span>);

    <span class="hljs-keyword">const</span> jigsawStart = performance.now();
    <span class="hljs-keyword">const</span> jigsawResp = <span class="hljs-keyword">await</span> jigsaw.audio.speech_to_text({
      url: testAudioURL,
    });
    fs.writeFileSync(<span class="hljs-string">"transcript-jigsaw.json"</span>, <span class="hljs-built_in">JSON</span>.stringify(jigsawResp, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>));
    <span class="hljs-keyword">const</span> jigsawEnd = performance.now();
    <span class="hljs-keyword">const</span> jigsawTimeTaken = jigsawEnd - jigsawStart;
    <span class="hljs-keyword">const</span> jigsawTimeTakenSeconds = jigsawTimeTaken / <span class="hljs-number">1000</span>;
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Jigsaw time taken: <span class="hljs-subst">${jigsawTimeTakenSeconds}</span> seconds`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Jigsaw time taken: <span class="hljs-subst">${jigsawTimeTaken}</span> milliseconds`</span>);

    <span class="hljs-keyword">const</span> openAIstart = performance.now();
    <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> openai.audio.transcriptions.create({
      file: fs.createReadStream(<span class="hljs-string">"test-audio.mp3"</span>),
      model: <span class="hljs-string">"gpt-4o-transcribe"</span>,
      response_format: <span class="hljs-string">"json"</span>,
    });
    <span class="hljs-keyword">const</span> openAIEnd = performance.now();
    fs.writeFileSync(<span class="hljs-string">"transcript-openai.json"</span>, <span class="hljs-built_in">JSON</span>.stringify(res, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>));
    <span class="hljs-keyword">const</span> openAITimeTaken = openAIEnd - openAIstart;
    <span class="hljs-keyword">const</span> openAITimeTakenSeconds = openAITimeTaken / <span class="hljs-number">1000</span>;

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`OpenAI Time taken: <span class="hljs-subst">${openAITimeTakenSeconds}</span> seconds`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`OpenAI Time taken: <span class="hljs-subst">${openAITimeTaken}</span> milliseconds`</span>);
  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-built_in">console</span>.error(error);
  }
};

run();
</code></pre>
<h2 id="heading-timestamps">Timestamps</h2>
<h3 id="heading-5-seconds-short-audio-timestamp-example">5 seconds Short Audio Timestamp Example</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/preview/stt-examples/stt_very_short_audio_sample_2.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3ByZXZpZXcvc3R0LWV4YW1wbGVzL3N0dF92ZXJ5X3Nob3J0X2F1ZGlvX3NhbXBsZV8yLm1wMyIsImlhdCI6MTc0MjUzOTkwOCwiZXhwIjoxNzc0MDc1OTA4fQ.<span class="hljs-number">7</span>Ru6dD-<span class="hljs-number">3</span>iaFOox2sqQgzmZH5pAs_RJnH3RfL00yGHqE
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I like them round,\" said Mary, \"and they are exactly the color of the sky over the moor."</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I like them round, said Mary, and they are exactly the colour of the sky over the moor."</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0</span>,
        <span class="hljs-number">5.14</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I like them round, said Mary, and they are exactly the colour of the sky over the moor."</span>
    }
  ]
}
</code></pre>
<p>Both gave 100% accurate results, however OpenAI currently doesn’t support timestamps.</p>
<h3 id="heading-4-minutes-audio-timestamp">4 minutes Audio Timestamp</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/Stevejobs.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L1N0ZXZlam9icy5tcDMiLCJpYXQiOjE3NDI1NDI0OTUsImV4cCI6MzE1NTMxMTAwNjQ5NX0.iRf2231k11dHVYv0GsUf3zQlSFAuMRV-BqmTtVU0m-<span class="hljs-number">0</span>
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thank you. Today, I want to tell you three stories from my life. That's it. No big deal, just three stories. The first story is about connecting the dots. I dropped out of Reed College after the first six months, but then stayed around as a drop-in for another 18 months or so before I really quit. It was pretty scary at the time, but looking back, it was one of the best decisions I ever made. The minute I dropped out, I could stop taking the required classes that didn't interest me and begin dropping in on the ones that looked far more interesting. Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus, every poster, every label on every drawer was beautifully hand calligraphed, and I found it fascinating. None of this had even a hope of any practical application in my life. But ten years later, when we were designing the first Macintosh computer, it all came back to me. If I had never dropped out, personal computers might not have the wonderful typography that they do. Of course, it was impossible to connect the dots looking forward when I was in college, but it was very, very clear looking backwards. So you have to trust that the dots will somehow connect in your future, because believing that the dots will connect down the road will give you the confidence to follow your heart, even when it leads you off the well-worn path. My second story is about love and loss. I was lucky. I found what I loved to do early in life. Woz and I started Apple in my parents' garage when I was 20, and in ten years, Apple had grown from just the two of us in a garage into a $2 billion company with over 4,000 employees. And then I got fired. What had been the focus of my entire adult life was gone. I really didn't know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down. I'd been rejected, but I still loved what I did. I didn't see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again. It freed me to enter one of the most creative periods of my life. During the next five years, I started a company named Next, another company named Pixar, and is now the most successful animation studio in the world. I'm convinced that the only thing that kept me going was that I loved what I did. You've got to find what you love. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. As with all matters of the heart, you'll know when you find it. My third story is about death. If you live each day as if it was your last, someday you'll most certainly be right. For the past 33 years, I have looked in the mirror every morning and asked myself, if today were the last day of my life, would I want to do what I am about to do today? Because almost everything, all external expectations, all pride, all fear of embarrassment or failure, these things just fall away in the face of death. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. There is no reason not to follow your heart. Your time is limited, so don't waste it living someone else's life. Don't let the noise of others' opinions drown out your own inner voice. Have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary. Stay hungry, stay foolish. Thank you all very much."</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thank you. Today, I want to tell you three stories from my life. That's it. No big deal. Just three stories. The first story is about connecting the dots. I dropped out of Reed College after the first six months, but then stayed around as a drop-in for another 18 months or so before I really quit. It was pretty scary at the time, but looking back, it was one of the best decisions I ever made. The minute I dropped out, I could stop taking the required classes that didn't interest me and begin dropping in on the ones that looked far more interesting. Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus, every poster, every label on every drawer was beautifully hand calligraphed, and I found it fascinating. None of this had even a hope of any practical application in my life. But ten years later, when we were designing the first Macintosh computer, it all came back to me. If I had never dropped out, personal computers might not have the wonderful typography that they do. Of course, it was impossible to connect the dots looking forward when I was in college. But it was very, very clear looking backwards. So you have to trust that the dots will somehow connect in your future. Because believing that the dots will connect down the road will give you the confidence to follow your heart even when it leads you off the well-worn path. My second story is about love and loss. I was lucky. I found what I love to do early in life. Woz and I started Apple in my parents' garage when I was 20. And in 10 years, Apple had grown from just the two of us in a garage into a $2 billion company with over 4,000 employees. And then I got fired. What had been the focus of my entire adult life was gone. I really didn't know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down. I'd been rejected, but I still loved what I did. I didn't see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again. It freed me to enter one of the most creative periods of my life. During the next five years, I started a company named Next, another company named Pixar, and is now the most successful animation studio in the world. I'm convinced that the only thing that kept me going was that I loved what I did. You've got to find what you love. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. As with all matters of the heart, you'll know when you find it. My third story is about death. If you live each day as if it was your last, someday you'll most certainly be right. For the past 33 years, I've looked in the mirror every morning and asked myself if today were the last day of my life, would I want to do what I am about to do today? Because almost everything All external expectations, all pride, all fear of embarrassment or failure, these things just fall away in the face of death. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. There is no reason not to follow your heart. Your time is limited, so don't waste it living someone else's life. Don't let the noise of others' opinions drown out your own inner voice. have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary. Stay hungry, stay foolish. Thank you all very much."</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">2.16</span>,
        <span class="hljs-number">36.78</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Thank you. Today, I want to tell you three stories from my life. That's it. No big deal. Just three stories. The first story is about connecting the dots. I dropped out of Reed College after the first six months, but then stayed around as a drop-in for another 18 months or so before I really quit. It was pretty scary at the time, but looking back, it was one of the best decisions I ever made. The minute I dropped out,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">37.1</span>,
        <span class="hljs-number">64.42</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I could stop taking the required classes that didn't interest me and begin dropping in on the ones that looked far more interesting. Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus, every poster, every label on every drawer was beautifully hand calligraphed, and I found it fascinating. None of this had even a hope of any practical application in my life."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">65.46</span>,
        <span class="hljs-number">91.62</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"But ten years later, when we were designing the first Macintosh computer, it all came back to me. If I had never dropped out, personal computers might not have the wonderful typography that they do. Of course, it was impossible to connect the dots looking forward when I was in college. But it was very, very clear looking backwards. So you have to trust that the dots will somehow connect in your future. Because believing that the dots will connect down the road"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">91.88</span>,
        <span class="hljs-number">118.2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"will give you the confidence to follow your heart even when it leads you off the well-worn path. My second story is about love and loss. I was lucky. I found what I love to do early in life. Woz and I started Apple in my parents' garage when I was 20. And in 10 years, Apple had grown from just the two of us in a garage into a $2 billion company with over 4,000 employees. And then I got fired."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">119.14</span>,
        <span class="hljs-number">146.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"What had been the focus of my entire adult life was gone. I really didn't know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down. I'd been rejected, but I still loved what I did. I didn't see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again. It freed me to enter one of the most creative periods of my life."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">147.08</span>,
        <span class="hljs-number">172.72</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"During the next five years, I started a company named Next, another company named Pixar, and is now the most successful animation studio in the world. I'm convinced that the only thing that kept me going was that I loved what I did. You've got to find what you love. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">173.02</span>,
        <span class="hljs-number">199.3</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"If you haven't found it yet, keep looking. As with all matters of the heart, you'll know when you find it. My third story is about death. If you live each day as if it was your last, someday you'll most certainly be right. For the past 33 years, I've looked in the mirror every morning and asked myself if today were the last day of my life, would I want to do what I am about to do today? Because almost everything"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">199.56</span>,
        <span class="hljs-number">228.02</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"All external expectations, all pride, all fear of embarrassment or failure, these things just fall away in the face of death. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. There is no reason not to follow your heart. Your time is limited, so don't waste it living someone else's life. Don't let the noise of others' opinions drown out your own inner voice."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">228.26</span>,
        <span class="hljs-number">242.86</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary. Stay hungry, stay foolish. Thank you all very much."</span>
    }
  ]
}
</code></pre>
<p>JigsawStack managed to accurately break down each sentence with timestamps while OpenAI provided a large chunk of text with no breakdown.</p>
<h2 id="heading-recognizing-different-speakers-with-diarization">Recognizing different speakers with diarization</h2>
<h3 id="heading-random-yc-interview-video-from-youtube">Random YC interview video from Youtube</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=FnY89is8UkQ">https://www.youtube.com/watch?v=FnY89is8UkQ</a></div>
<p> </p>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/multispeaker-yc-interview.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L211bHRpc3BlYWtlci15Yy1pbnRlcnZpZXcubXAzIiwiaWF0IjoxNzQyNTQ0NDEwLCJleHAiOjMxNTUzMTEwMDg0MTB9.UjZ2YF-ZD9JFMPoL33dbdJn-kU2SA9DnzSlgAZRlcI4
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Who interviewed you at YC? We actually had two interviews. So YC generally does one interview. We had two. So total seven or eight people interviewed me. And I remember five or six of them. So Paul Buchheit, who's the creator of Gmail, John Levy, who's YC's general counsel. There were two more people with them in the first group who interviewed us. And it's like a rapid fire. They ask one question after the other, even if I have not finished answering or if they got the answer. It's super fast. That's first 10 minute interview. Then the second 10 minute interview, we had Jessica Livingston, who's also the co-founder of YC, Aaron Harris, Dalton Caldwell. Two separate 10 minute interviews and group interviews. What I've read about YC is they're underwriting the founder, which makes all the sense in the world because you're going to learn, you're going to discover, you're going to have to pivot. And what they're trying to find is like, hey, does this person have the potential to be the next Mark Zuckerberg in terms of like disposition, grit, mentality? What do you think that they were trying to get at with those interviews? What qualities were they trying to uncover or measure? I think they just want to understand founder's tenacity and the mindset of execution and how real the founders are. It's very counterintuitive, but a 10 minute rapid fire interview gives you a lot more insight into the founder than a very long one hour conversation. What they're trying to understand is how well this person know what they are currently building. So they're testing for subject matter, not just tenacity. But how do they test on subject matter if they themselves don't come from the industry? All YC partners review applications before their interview. So the process is you do a written application, you get selected for an interview, and then the 10 minute interview happens. So before the interview, all the partners who are interviewing you have read your application. So even if they don't have the expertise, they are very insightful and sharp at asking the right questions. In our case, I still remember this one particular question where they're talking about competitors and who Stilt is going to compete with. What's the largest company that Stilt can hope to become? What's the analogy? And I said LendingClub at the time. It had IPO at 10 billion valuation or something like that. And it's like, okay, LendingClub, what's the valuation of the company? And I said X is the valuation, Y is the stock price, so on and so forth. Paul Buchheit, I still remember, opened the computer and checked LendingClub's valuation and the stock price. And I was within 2 or 3% of what it was at that date. And I could not have prepared for that. It was nowhere mentioned in our application or anywhere else. And I did not expect them to ask me about LendingClub's stock price. You did that interview solo or did you have a co-founder join you in that? I had my co-founder CTO join me in that. And we had prepared like crazy for that interview. We write all the possible questions that Y Combinator can ask us. We write answers, airtight answers to those questions. As in, if I give you an answer, it should answer the question and it should not result in another question. And it has to be done within 15 to 30 seconds. You got to be concise, precise, on target, and answer at the appropriate level. Not too much, not too little. Within 30 seconds because they'll just cut you off after 30 seconds. They have 10 minutes, mind you. If you do 10 minute interview, 30 second question answer each, that's still a lot of questions they can get through. So their goal at that valuation is to kind of remove duds, number one, right? They want to avoid false positives. They want to do a lot of checks, though, I would say at that valuation, especially if you have traction. On the other hand, the selectivity rate for Y Combinator is very low. Yeah, I don't know what it's now, but it's about, it was 1.2 or 1.5%. Better than Harvard. Yeah, for people like me who are immigrants, who are applying for O-1 extraordinary ability and all these different types of visas, Y Combinator is more selective than Harvard."</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<p>We’ll have to update the above test script to add <code>by_speaker: true</code> to the JigsawStack SDK to generate speaker tags. It should look something like this.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> jigsawResp = <span class="hljs-keyword">await</span> jigsaw.audio.speech_to_text({
  url: testAudioURL,
  by_speaker: <span class="hljs-literal">true</span>, <span class="hljs-comment">//add this to recognize speakers and tag them</span>
});
</code></pre>
<p><strong>Result</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Who interviewed you at YC? We actually had two interviews. So YC generally does one interview. We had two. So total seven or eight people interviewed me. And I remember five or six of them. So Paul Buchheit, who's the creator of Gmail, John Levy, who's YC's general counsel. There were two more people with them in the first group who interviewed us. And it's like a rapid fire. They ask one question after the other, even if I have not finished answering or they feel they got the answer. It's super fast. That's first 10 minute interview. Then the second 10 minute interview, we had Jessica Livingston, who's also the co-founder of YC, Aaron Harris, Dalton Caldwell. Two separate 10 minute interviews and group interviews. What I've read about YC is they're underwriting the founder, which makes all the sense in the world because you're going to learn, you're going to discover, you're going to have to pivot. And what they're trying to find is like, hey, does this person have the potential to be the next Mark Zuckerberg in terms of like disposition, grit, mentality? What do you think that they were trying to get at with those interviews? What qualities were they trying to uncover or measure? I think they just trying to get at with those interviews? What qualities were they trying to uncover or measure? I think they just want to understand founder's tenacity and the mindset of execution and how real the founders are. It's very counterintuitive, but a 10-minute rapid-fire interview gives you a lot more insight into the founder than a very long one-hour conversation. What they're trying to understand is how well this person know what they are currently building. So they're testing for subject matter, not just tenacity, but how do they test on subject matter if they themselves don't come from the industry? All YC partners review applications before their interview. So the process is you do a written application, you get selected for an interview, and then the 10-minute interview happens. So before the interview, all the partners who are interviewing you have read your application. So even if they don't have the expertise, they are very insightful and sharp at asking the right questions. In our case, I still remember this one particular question where they're talking about competitors and who Stiltz is going to compete with. What's the largest company that Stiltz can hope to become? What's the analogy? And I said Lending Club at the time. It had IPO'd at 10 billion valuation or something like that. And it's like, okay, Lending Club, what's the valuation of the company? And I said, X is the valuation, Y is the stock price, so on and so forth. Paul Hookhite, I still remember, opened the computer and checked LendingClub's valuation and the stock price. And I was within two or 3% of what it was at that day. I checked you on the spot. And I could not have prepared for that. It was nowhere mentioned in our application or anywhere else. And I did not expect them to ask me about LendingClub's stock price. You did that interview solo or did you have a co-founder join you in that? I had my co-founder CTO join me in that. And we had prepared like crazy for that interview. We write all the possible questions that Y Combinator can ask us. We write answers, airtight answers to those questions. As in, if I give you an answer, it should answer the question and it should not result in another question. And it has to be done within 15 to 30 seconds. It's concise. You got to be concise, precise on target and answer at the appropriate level, not too much, not too little. Within 30 seconds, because they'll just cut you off after 30 seconds. They have 10 minutes, mind you. If you do 10 minute interview, 30 second question answer each, that's still a lot of questions they can get through. So their goal at that valuation is to kind of remove duds, number one, right? They want to avoid false positives. They want to do a lot of checks though, I would say at that valuation, especially if you have traction. On the other hand, the selectivity rate for Y Combinator is very low. Yeah, I don't know what it's now, but it's about, it was 1.2, 1.5%. Better than Harvard. Yeah, for people like me, who are immigrants, who are applying for O1, extraordinary ability, and all these different types of visas, Y Combinator is more selective than Harvard."</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0</span>,
        <span class="hljs-number">1.22</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Who interviewed you at YC?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">1.38</span>,
        <span class="hljs-number">2.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We actually had two interviews."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">2.68</span>,
        <span class="hljs-number">4.24</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So YC generally does one interview."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">4.68</span>,
        <span class="hljs-number">5.46</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We had two."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">5.6</span>,
        <span class="hljs-number">8.16</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So total seven or eight people interviewed me."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">8.6</span>,
        <span class="hljs-number">10.12</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And I remember five or six of them."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">10.28</span>,
        <span class="hljs-number">12.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So Paul Buchheit, who's the creator of Gmail,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">12.88</span>,
        <span class="hljs-number">15.26</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" John Levy, who's YC's general counsel."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">15.9</span>,
        <span class="hljs-number">17.52</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" There were two more people with them"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">17.52</span>,
        <span class="hljs-number">19.66</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" in the first group who interviewed us."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">19.68</span>,
        <span class="hljs-number">20.98</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And it's like a rapid fire."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">21.12</span>,
        <span class="hljs-number">22.64</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They ask one question after the other,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">22.76</span>,
        <span class="hljs-number">24.38</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" even if I have not finished answering"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">24.38</span>,
        <span class="hljs-number">28.76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" or they feel they got the answer. It's super fast. That's first 10 minute interview. Then the second"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">28.76</span>,
        <span class="hljs-number">34.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" 10 minute interview, we had Jessica Livingston, who's also the co-founder of YC, Aaron Harris,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">34.78</span>,
        <span class="hljs-number">43.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Dalton Caldwell. Two separate 10 minute interviews and group interviews. What I've read about YC is"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">43.54</span>,
        <span class="hljs-number">45.5</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" they're underwriting the founder, which makes"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">45.5</span>,
        <span class="hljs-number">48.22</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" all the sense in the world because you're going to learn, you're going to discover,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">48.48</span>,
        <span class="hljs-number">52.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" you're going to have to pivot. And what they're trying to find is like, hey, does this person have"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">52.96</span>,
        <span class="hljs-number">58.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the potential to be the next Mark Zuckerberg in terms of like disposition, grit, mentality?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">58.96</span>,
        <span class="hljs-number">63.26</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" What do you think that they were trying to get at with those interviews? What qualities were"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">63.26</span>,
        <span class="hljs-number">65.5</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" they trying to uncover or measure? I think they just trying to get at with those interviews? What qualities were they trying to uncover or measure?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">65.5</span>,
        <span class="hljs-number">69.76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I think they just want to understand founder's tenacity"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">69.76</span>,
        <span class="hljs-number">74.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and the mindset of execution and how real the founders are."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">74.08</span>,
        <span class="hljs-number">76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" It's very counterintuitive,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">76</span>,
        <span class="hljs-number">78.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" but a 10-minute rapid-fire interview"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">78.54</span>,
        <span class="hljs-number">82.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" gives you a lot more insight into the founder"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">82.68</span>,
        <span class="hljs-number">86.78</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" than a very long one-hour conversation. What they're trying to understand is"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">86.78</span>,
        <span class="hljs-number">92.62</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" how well this person know what they are currently building. So they're testing for subject matter,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">92.62</span>,
        <span class="hljs-number">97.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" not just tenacity, but how do they test on subject matter if they themselves don't come"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">97.4</span>,
        <span class="hljs-number">106.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" from the industry? All YC partners review applications before their interview. So the process is you do a written application,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">107.26</span>,
        <span class="hljs-number">112.2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" you get selected for an interview, and then the 10-minute interview happens. So before the interview,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">112.66</span>,
        <span class="hljs-number">117.56</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" all the partners who are interviewing you have read your application. So even if they don't have"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">117.56</span>,
        <span class="hljs-number">123.88</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the expertise, they are very insightful and sharp at asking the right questions. In our case,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">123.88</span>,
        <span class="hljs-number">125.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I still remember this one particular"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">125.6</span>,
        <span class="hljs-number">129.8</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" question where they're talking about competitors and who Stiltz is going to compete with. What's"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">129.8</span>,
        <span class="hljs-number">134.42</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the largest company that Stiltz can hope to become? What's the analogy? And I said Lending"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">134.42</span>,
        <span class="hljs-number">139.38</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Club at the time. It had IPO'd at 10 billion valuation or something like that. And it's like,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">139.44</span>,
        <span class="hljs-number">143.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" okay, Lending Club, what's the valuation of the company? And I said, X is the valuation,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">143.58</span>,
        <span class="hljs-number">148.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Y is the stock price, so on and so forth. Paul Hookhite, I still remember, opened the computer and checked"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">148.68</span>,
        <span class="hljs-number">154.2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" LendingClub's valuation and the stock price. And I was within two or 3% of what it was at that day."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">154.22</span>,
        <span class="hljs-number">155.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I checked you on the spot."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">155.92</span>,
        <span class="hljs-number">160.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And I could not have prepared for that. It was nowhere mentioned in our application or anywhere"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">160.6</span>,
        <span class="hljs-number">163.84</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" else. And I did not expect them to ask me about LendingClub's stock price."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">163.96</span>,
        <span class="hljs-number">167.48</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You did that interview solo or did you have a co-founder join you in that?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">167.84</span>,
        <span class="hljs-number">170.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I had my co-founder CTO join me in that."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">170.36</span>,
        <span class="hljs-number">173.02</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And we had prepared like crazy for that interview."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">173.62</span>,
        <span class="hljs-number">175.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We write all the possible questions"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">175.6</span>,
        <span class="hljs-number">177.66</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" that Y Combinator can ask us."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">177.8</span>,
        <span class="hljs-number">180.92</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We write answers, airtight answers to those questions."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">181.3</span>,
        <span class="hljs-number">182.64</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" As in, if I give you an answer,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">182.72</span>,
        <span class="hljs-number">183.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" it should answer the question"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">183.96</span>,
        <span class="hljs-number">189.44</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and it should not result in another question. And it has to be done within 15 to 30 seconds."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">190.38</span>,
        <span class="hljs-number">196.34</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" It's concise. You got to be concise, precise on target and answer at the appropriate level,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">196.92</span>,
        <span class="hljs-number">202.28</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" not too much, not too little. Within 30 seconds, because they'll just cut you off after 30 seconds."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">202.34</span>,
        <span class="hljs-number">205.1</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They have 10 minutes, mind you. If you do 10 minute interview,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">205.26</span>,
        <span class="hljs-number">206.94</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" 30 second question answer each,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">207.3</span>,
        <span class="hljs-number">209.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" that's still a lot of questions they can get through."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">209.4</span>,
        <span class="hljs-number">211.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So their goal at that valuation"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">211.54</span>,
        <span class="hljs-number">215.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" is to kind of remove duds, number one, right?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">215.74</span>,
        <span class="hljs-number">217.34</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They want to avoid false positives."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">219.84</span>,
        <span class="hljs-number">221.58</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They want to do a lot of checks though,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">221.66</span>,
        <span class="hljs-number">222.8</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I would say at that valuation,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">222.94</span>,
        <span class="hljs-number">224.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" especially if you have traction."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">224.28</span>,
        <span class="hljs-number">224.78</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" On the other hand,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">224.82</span>,
        <span class="hljs-number">228.72</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the selectivity rate for Y Combinator is very low. Yeah, I don't know"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">228.72</span>,
        <span class="hljs-number">235.12</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" what it's now, but it's about, it was 1.2, 1.5%. Better than Harvard. Yeah, for people like me,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">235.12</span>,
        <span class="hljs-number">238.32</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" who are immigrants, who are applying for O1, extraordinary ability,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">238.32</span>,
        <span class="hljs-number">249.04</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and all these different types of visas, Y Combinator is more selective than Harvard."</span>
    }
  ],
  <span class="hljs-attr">"speakers"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0</span>,
        <span class="hljs-number">1.22</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Who interviewed you at YC?"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">1.38</span>,
        <span class="hljs-number">2.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We actually had two interviews."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">2.68</span>,
        <span class="hljs-number">4.24</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So YC generally does one interview."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">4.68</span>,
        <span class="hljs-number">5.46</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We had two."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">5.6</span>,
        <span class="hljs-number">8.16</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So total seven or eight people interviewed me."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">8.6</span>,
        <span class="hljs-number">10.12</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And I remember five or six of them."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">10.28</span>,
        <span class="hljs-number">12.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So Paul Buchheit, who's the creator of Gmail,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">12.88</span>,
        <span class="hljs-number">15.26</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" John Levy, who's YC's general counsel."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">15.9</span>,
        <span class="hljs-number">17.52</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" There were two more people with them"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">17.52</span>,
        <span class="hljs-number">19.66</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" in the first group who interviewed us."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">19.68</span>,
        <span class="hljs-number">20.98</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And it's like a rapid fire."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">21.12</span>,
        <span class="hljs-number">22.64</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They ask one question after the other,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">22.76</span>,
        <span class="hljs-number">24.38</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" even if I have not finished answering"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">24.38</span>,
        <span class="hljs-number">28.76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" or they feel they got the answer. It's super fast. That's first 10 minute interview. Then the second"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">28.76</span>,
        <span class="hljs-number">34.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" 10 minute interview, we had Jessica Livingston, who's also the co-founder of YC, Aaron Harris,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">34.78</span>,
        <span class="hljs-number">43.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Dalton Caldwell. Two separate 10 minute interviews and group interviews. What I've read about YC is"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">43.54</span>,
        <span class="hljs-number">45.5</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" they're underwriting the founder, which makes"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">45.5</span>,
        <span class="hljs-number">48.22</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" all the sense in the world because you're going to learn, you're going to discover,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">48.48</span>,
        <span class="hljs-number">52.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" you're going to have to pivot. And what they're trying to find is like, hey, does this person have"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">52.96</span>,
        <span class="hljs-number">58.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the potential to be the next Mark Zuckerberg in terms of like disposition, grit, mentality?"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">58.96</span>,
        <span class="hljs-number">63.26</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" What do you think that they were trying to get at with those interviews? What qualities were"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">63.26</span>,
        <span class="hljs-number">65.5</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" they trying to uncover or measure? I think they just trying to get at with those interviews? What qualities were they trying to uncover or measure?"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">65.5</span>,
        <span class="hljs-number">69.76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I think they just want to understand founder's tenacity"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">69.76</span>,
        <span class="hljs-number">74.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and the mindset of execution and how real the founders are."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">74.08</span>,
        <span class="hljs-number">76</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" It's very counterintuitive,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">76</span>,
        <span class="hljs-number">78.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" but a 10-minute rapid-fire interview"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">78.54</span>,
        <span class="hljs-number">82.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" gives you a lot more insight into the founder"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">82.68</span>,
        <span class="hljs-number">86.78</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" than a very long one-hour conversation. What they're trying to understand is"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">86.78</span>,
        <span class="hljs-number">92.62</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" how well this person know what they are currently building. So they're testing for subject matter,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">92.62</span>,
        <span class="hljs-number">97.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" not just tenacity, but how do they test on subject matter if they themselves don't come"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">97.4</span>,
        <span class="hljs-number">106.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" from the industry? All YC partners review applications before their interview. So the process is you do a written application,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">107.26</span>,
        <span class="hljs-number">112.2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" you get selected for an interview, and then the 10-minute interview happens. So before the interview,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">112.66</span>,
        <span class="hljs-number">117.56</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" all the partners who are interviewing you have read your application. So even if they don't have"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">117.56</span>,
        <span class="hljs-number">123.88</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the expertise, they are very insightful and sharp at asking the right questions. In our case,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">123.88</span>,
        <span class="hljs-number">125.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I still remember this one particular"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">125.6</span>,
        <span class="hljs-number">129.8</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" question where they're talking about competitors and who Stiltz is going to compete with. What's"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">129.8</span>,
        <span class="hljs-number">134.42</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the largest company that Stiltz can hope to become? What's the analogy? And I said Lending"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">134.42</span>,
        <span class="hljs-number">139.38</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Club at the time. It had IPO'd at 10 billion valuation or something like that. And it's like,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">139.44</span>,
        <span class="hljs-number">143.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" okay, Lending Club, what's the valuation of the company? And I said, X is the valuation,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">143.58</span>,
        <span class="hljs-number">148.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Y is the stock price, so on and so forth. Paul Hookhite, I still remember, opened the computer and checked"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">148.68</span>,
        <span class="hljs-number">154.2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" LendingClub's valuation and the stock price. And I was within two or 3% of what it was at that day."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">154.22</span>,
        <span class="hljs-number">155.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I checked you on the spot."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">155.92</span>,
        <span class="hljs-number">160.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And I could not have prepared for that. It was nowhere mentioned in our application or anywhere"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">160.6</span>,
        <span class="hljs-number">163.84</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" else. And I did not expect them to ask me about LendingClub's stock price."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">163.96</span>,
        <span class="hljs-number">167.48</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You did that interview solo or did you have a co-founder join you in that?"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">167.84</span>,
        <span class="hljs-number">170.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I had my co-founder CTO join me in that."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">170.36</span>,
        <span class="hljs-number">173.02</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" And we had prepared like crazy for that interview."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">173.62</span>,
        <span class="hljs-number">175.6</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We write all the possible questions"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">175.6</span>,
        <span class="hljs-number">177.66</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" that Y Combinator can ask us."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">177.8</span>,
        <span class="hljs-number">180.92</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" We write answers, airtight answers to those questions."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">181.3</span>,
        <span class="hljs-number">182.64</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" As in, if I give you an answer,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">182.72</span>,
        <span class="hljs-number">183.96</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" it should answer the question"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">183.96</span>,
        <span class="hljs-number">189.44</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and it should not result in another question. And it has to be done within 15 to 30 seconds."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">190.38</span>,
        <span class="hljs-number">196.34</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" It's concise. You got to be concise, precise on target and answer at the appropriate level,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">196.92</span>,
        <span class="hljs-number">202.28</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" not too much, not too little. Within 30 seconds, because they'll just cut you off after 30 seconds."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">202.34</span>,
        <span class="hljs-number">205.1</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They have 10 minutes, mind you. If you do 10 minute interview,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">205.26</span>,
        <span class="hljs-number">206.94</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" 30 second question answer each,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">207.3</span>,
        <span class="hljs-number">209.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" that's still a lot of questions they can get through."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">209.4</span>,
        <span class="hljs-number">211.54</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So their goal at that valuation"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">211.54</span>,
        <span class="hljs-number">215.68</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" is to kind of remove duds, number one, right?"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">215.74</span>,
        <span class="hljs-number">217.34</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They want to avoid false positives."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">219.84</span>,
        <span class="hljs-number">221.58</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" They want to do a lot of checks though,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">221.66</span>,
        <span class="hljs-number">222.8</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" I would say at that valuation,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">222.94</span>,
        <span class="hljs-number">224.08</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" especially if you have traction."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">224.28</span>,
        <span class="hljs-number">224.78</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" On the other hand,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">224.82</span>,
        <span class="hljs-number">228.72</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" the selectivity rate for Y Combinator is very low. Yeah, I don't know"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_01"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">228.72</span>,
        <span class="hljs-number">235.12</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" what it's now, but it's about, it was 1.2, 1.5%. Better than Harvard. Yeah, for people like me,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">235.12</span>,
        <span class="hljs-number">238.32</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" who are immigrants, who are applying for O1, extraordinary ability,"</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">238.32</span>,
        <span class="hljs-number">249.04</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and all these different types of visas, Y Combinator is more selective than Harvard."</span>,
      <span class="hljs-attr">"speaker"</span>: <span class="hljs-string">"SPEAKER_00"</span>
    }
  ]
}
</code></pre>
<p>OpenAI latest transcription model doesn’t have support for speaker recognition and tagging which makes up a huge chunk of audio transcription use cases. JigsawStack easily transcribed the above audio both by timestamp and by speaker tags under 15 seconds.</p>
<blockquote>
<p>We’re pushing a huge update in the coming week that will improve the speaker recognition output performance by 10x for longer audios while increasing quality</p>
</blockquote>
<h2 id="heading-large-files-amp-long-audio-support">Large files &amp; long audio support</h2>
<h3 id="heading-1hr-35mins-audio-with-multiple-speakers">1hr 35mins audio with multiple speakers</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/preview/stt-examples/stt_long_audio_sample_3.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3ByZXZpZXcvc3R0LWV4YW1wbGVzL3N0dF9sb25nX2F1ZGlvX3NhbXBsZV8zLm1wMyIsImlhdCI6MTc0MjU0NTEzOCwiZXhwIjozMTUzNjE3MTEwMDkxMzh9.SXy6Vb-<span class="hljs-number">9</span>uF7H8Og-sxPW1aucnR0-<span class="hljs-number">8</span>GgrzY94zuhfcr4
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"status"</span>: <span class="hljs-number">400</span>,
  <span class="hljs-attr">"headers"</span>: {
    <span class="hljs-attr">"access-control-expose-headers"</span>: <span class="hljs-string">"X-Request-ID"</span>,
    <span class="hljs-attr">"alt-svc"</span>: <span class="hljs-string">"h3=\":443\"; ma=86400"</span>,
    <span class="hljs-attr">"cf-cache-status"</span>: <span class="hljs-string">"DYNAMIC"</span>,
    <span class="hljs-attr">"cf-ray"</span>: <span class="hljs-string">"923c0bbdfa41f90e-SIN"</span>,
    <span class="hljs-attr">"connection"</span>: <span class="hljs-string">"keep-alive"</span>,
    <span class="hljs-attr">"content-length"</span>: <span class="hljs-string">"169"</span>,
    <span class="hljs-attr">"content-type"</span>: <span class="hljs-string">"application/json"</span>,
    <span class="hljs-attr">"date"</span>: <span class="hljs-string">"Fri, 21 Mar 2025 08:23:19 GMT"</span>,
    <span class="hljs-attr">"openai-processing-ms"</span>: <span class="hljs-string">"1788"</span>,
    <span class="hljs-attr">"openai-version"</span>: <span class="hljs-string">"2020-10-01"</span>,
    <span class="hljs-attr">"server"</span>: <span class="hljs-string">"cloudflare"</span>,
    <span class="hljs-attr">"strict-transport-security"</span>: <span class="hljs-string">"max-age=31536000; includeSubDomains; preload"</span>,
    <span class="hljs-attr">"x-content-type-options"</span>: <span class="hljs-string">"nosniff"</span>,
    <span class="hljs-attr">"x-ratelimit-limit-requests"</span>: <span class="hljs-string">"50000"</span>,
    <span class="hljs-attr">"x-ratelimit-remaining-requests"</span>: <span class="hljs-string">"49999"</span>,
    <span class="hljs-attr">"x-ratelimit-reset-requests"</span>: <span class="hljs-string">"1ms"</span>,
    <span class="hljs-attr">"x-request-id"</span>: <span class="hljs-string">"req_c9dbd03733263ceaa04bb1a97014dac5"</span>
  },
  <span class="hljs-attr">"request_id"</span>: <span class="hljs-string">"req_c9dbd03733263ceaa04bb1a97014dac5"</span>,
  <span class="hljs-attr">"error"</span>: {
    <span class="hljs-attr">"message"</span>: <span class="hljs-string">"Audio file might be corrupted or unsupported"</span>,
    <span class="hljs-attr">"type"</span>: <span class="hljs-string">"invalid_request_error"</span>,
    <span class="hljs-attr">"param"</span>: <span class="hljs-string">"file"</span>,
    <span class="hljs-attr">"code"</span>: <span class="hljs-string">"invalid_value"</span>
  },
  <span class="hljs-attr">"code"</span>: <span class="hljs-string">"invalid_value"</span>,
  <span class="hljs-attr">"param"</span>: <span class="hljs-string">"file"</span>,
  <span class="hljs-attr">"type"</span>: <span class="hljs-string">"invalid_request_error"</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"We don't teach leaders how to have uncomfortable conversations. We don't teach students how to have uncomfortable conversations. You tell me which is going to be more valuable for the rest of your life. How to have a difficult conversation or trigonometry? Described as a visionary thinker with a rare intellect. Multiple time best-selling author. Scientific. Every single one of us knows what we do. Some of us know how we do it. But very, very few of us can clearly articulate why we do what we do. And I think one of the reasons most of us don't know who we are is because we're making decisions that are inconsistent with that true cause, with that why. There's a great irony in all of this. I had what a lot of people would be considered a good life and yet didn't want to wake up and go to work anymore. Why? We cannot do this thing called career or life alone. We're just not that smart. We're not that strong. We're just not that good. For anyone who wants to be a better version of themselves, purpose comes from... It's one of the best podcasts I've ever done. So without further ado, I'm Stephen Bartlett, and this is the Diary of a CEO USA edition. I hope nobody's listening, but if you are, then please keep this to yourself. Simon. My introduction to you was this book, Start With Why, and it hung on the walls of some of my offices around the world for a long time. And then my employees would come in after reading the book and evangelize about it. And it would come up in meetings and in discussions and in creative brainstorms, et cetera, over and over and over again. The question I wanted to ask you was, was there a point in your life where you'd felt like you drifted so far from your why that you realized the importance of it for the first time? Well, the simple answer is yes. It was that drifting that set me on the path to find it in the first place, to even articulate that idea. I had what a lot of people would be considered sort of a good life, as living the proverbial American dream. I quit my job to start my own business. The business was doing okay, made an okay living, had great clients, did good work. And yet I'd lost my passion for that and didn't want to wake up and go to work anymore, which was embarrassing because superficially everything was just fine. I was pretending that I was happier, more in control and more successful than I was or felt, which is quite frankly pretty draining and pretty dark. And it wasn't until a very, very close friend of mine came to me and said, something's wrong. She was the first one to notice something. And I came clean and I sort of let it all out. And it was that catharsis that sort of lifted this heavy weight off my shoulders. I was no longer alone. It was no longer a secret. And all of the energy that was previously going into lying, hiding and faking now went into finding a solution. There was a confluence of events. All of these histories are perfectly neat and clean and that's not really how it is or was. But to compress it and oversimplify it, I made this discovery based on the biology of human decision making that every single one of us knows what we do. Some of us know how we do it, but very, very few of us can clearly articulate why we do what we do. And I realized that was what I was missing. So to answer your question, yes, 100%. The realization of the why was my loss of it. And I realized I knew what I did and I was good at it. I knew how I was different or special or stood out from the crowd. And that was my differentiating value proposition and I was articulate about it. But I couldn't tell you why I was waking out of bed every day to do it. And I would give some nonsense entrepreneur answer because I want to be my own boss. And he's like, yeah, sure, but that's not a reason to get out of bed every day. This got me thinking a lot about the guests that I have sit here and also my own story where sometimes... I think people's why or the thing that's been driving them is in fact some kind of trauma or insecurity. Because you sit here with people and whether it's Israel Adesanya, the UFC champion, who's the current champion maybe world's best UFC fighter. He was battered and bullied as a kid, being the only black kid in his school in New Zealand. And so it's no coincidence that he strived to be this fighter. And in fact, when he won the UFC title the next day, he was depressed and he went to therapy. That's made me question whether like our whys can sometimes be trauma or insecurity driven as opposed to being intentional and I don't know. So a why is fully formed by the time we're in our mid to late teens. The youngest person I've done a why discovery for was 16 and it worked. The process worked. And what I've learned from just doing hundreds of these over the years is that a why is always positive. It's always striving for something. So like we're not inspired against something. We're not inspired to stop something. We're inspired to build something or create something or advance something. though it may have been born out of trauma, there's usually a silver lining that gives us that cause. Especially trauma that happens in the middle of our lives. September 11th is often looked to as people found purpose. We are who we are. Like I said, we're fully formed by the experiences we have when we're young, at a pretty young age. And now the opportunity life presents us is to make decisions that either keeps us in balance with who we really are or not. And I think one of the reasons most of us feel discomfort or don't feel ourselves or don't know who we are is because we're making decisions that are inconsistent with that true cause, with that why. So you raise the case of individual athletes who become champions and then suffer depression. It's a fairly common story. You hear this from Olympians. Michael Phelps becomes the most meddled Olympian of all time, immediately suffers depression. Andre Agassi becomes the most storied tennis player of all time, immediately becomes depressed. And what I've learned from talking to some of these particularly athletes, but I think it happens in the business world as well, which is from a very young age, they set themselves a goal that in my words would be a very selfish goal. I want to be the best at X, the best tennis player, the best golfer, the best whatever. And the way Olympians put it, which I get a kick out of, is I want to win the Olympics. I'm like, well, no one wins the Olympics. You can be a winner in your sport, but that's an aside. And their entire lives from pretty young ages, every decision they're making is to help them advance this finite goal. And all of their relationships are, can you help me achieve my goal, right? And if you can no longer help me achieve my goal, I don't need you anymore as a coach or even a friend. And there's huge sacrifices, missing of birthdays, missing of Christmases, you know, missing of major life events because I have to practice so I can achieve my goal. And when they get interviewed on the news, they're like, or at the Olympics or whatever, why do you do it? And they all say, well, I'm doing it to inspire the little kids, which is complete bullshit. If you look at all of their vision boards from when they were younger of pictures of podiums and medals and money and Lamborghinis, not a single little child on there of the people you're doing it for. It's just a lucky strike extra. I mean, absolutely, you do inspire children, but that's not the reason you did it. You just got that, like I said, it's a twofer. And then when they achieve or don't achieve this thing and then can no longer compete for it, they've set their entire path and all their relationships on these finite selfish goals. And so when it's complete, they realize they don't really have a lot of friends around them. They don't really have a lot of close relationships. They don't really even have a sense of purpose because they've been spent the past 20 years or so with one purpose, which was this finite goal, which now has run out. And so they're very purposeless now. And I see this in Broadway performers who set their whole life to be on the West End or be on Broadway. Every class, every tap dancing class, every singing class, they make it, they get there, and then depression, or at least malaise. Or senior executives, same thing. If I just make a million dollars, if I just become a millionaire, then I'll feel. And the problem with all of those things is, as I said before, they are selfish things. It is your goal for your reasons, which is not fulfilling for any social animal, for any human being. You know, our sense of joy and fulfillment and love and purpose comes from our ability to serve another human being. Have a child. Tell me how your life changes. Fall in love. Tell me how your life changes. Think about all the stupid things, irrational things we've done for love. We get on planes and travel around the world just to say I love you. We do ridiculous things and it all feels worth it. And the sacrifices we make for a child all feel worth it. But these are no longer for us and these things will live on beyond our own lives. They are not finite. They are infinite. And there's nothing wrong with personal achievement. There's nothing wrong with setting goals. But it has to be in the context of something even bigger. In general, team sports don't suffer this because you had to do it together. It's usually individual athletes who suffer this more often. And so there's one of the athletes I would point to is a guy by the name of Curtis Martin. Curtis is a Hall of Fame NFL footballer. And he only started playing football basically to stay out of trouble. He did it as a favor to his mom just so he wouldn't get into... He grew up in a really bad neighborhood in Philadelphia. It basically kept him out of trouble and it turns out he was really good at it. And when he realized he was good at it, he realized that by being good at something, it will give him the power to actually give back later. And he made this realization, especially when he went to college on scholarship and then made it to the NFL. He realized the better he was at the sport, it wasn't about propelling his own career. It was about when he leaves this career, he has a platform... that would be bigger than the platform he has now. And so he was driven and driven and driven, not so that he could be the best, not so that he could make the most money. In fact, he made a lot less money than a lot of other players of his rank. Not that he could be rich or famous or any of these things. He did it so that he could build his platform so that he could give back later. So when he retired from the NFL, he wasn't lost. He wasn't searching. He knew exactly what the next step was because being an elite athlete to the highest level possible was only step one. and to see one's life as a continuum rather than an event is much healthier. On that point of seeing one's life as a continuum, by the way, you completely, we call it atting someone where you describe their situation, but you completely atted me. You completely described my situation in terms of... the place of mind I was in at 25 when I had that offer to buy my company, it was about me. It was about filling some void that I had in me from being like the only black kid in an all white school and thinking that I think success and, um, accolades would fill that void in some ways but on that point of a continuum as a as a way to live your life the other moment in my life where I which I really struggled in in terms of goal setting and motivation was when I was trying to get in shape and in like 2017 I said to myself I want to get a six-pack for summer that's the goal I set myself really what I was trying to find a way to stay fit forever. But I set myself this goal of getting a six pack in summer. That was my thing. And then every single year, my motivation would only last for like four or five months. And I couldn't crack how people are continually motivated to work out. I've cracked it now. But what was wrong about that? Because I've heard you speak about arbitrary goals before. What is the the flaw of creating arbitrary goals in our lives? And how do we create goals that are more based on that idea of a continuum? I'm not a huge fan of the term self-improvement, right? But I do like the idea of awareness, self-awareness. We all live with blind spots. We all live with missing gaps and pieces of information, which will, by the way, last for the rest of our lives. And there are some people who choose to live a life where living with those gaps is acceptable and they never fill them in and we would say that they remain stagnant. and arguably either mentally or physically unhealthy or gaining, getting unhealthier as they get older. For someone, for anyone who wants to be a better version of themselves, a more aware version of themselves, we, I, seek out information. And that comes in all kinds of forms, right? It can be in a relationship. So for example, I went and took a listening class Actually, I should preface with I was dating someone and she accused me of being a bad listener. And I was like, you do know what I do for a living, right? I'm a really good listener, so I don't know what you're talking about. And then I took this listening class. Turns out I'm an absolutely brilliant listener with people who I'll never see again for the rest of my life, but amongst my friends and family, appalling, appalling. So I had this basic skill set that I never applied before. with the people closest to me and gave myself an out because, quote unquote, I knew how to listen. And so I realized I was a terrible listener. This was a blind spot. This was a gap. And having somebody love me tell me that didn't work, didn't believe them until, you know, this objective outsider, or at least I just took this class and came to this realization. That was brilliant. That awareness of the blind spot and the awareness of the skills that I need to be a better brother, son, boyfriend, friend, you know, I had to learn how to hold space for someone and then practice. That's awareness. And I think our health is awareness. Unfortunately, some people wait for the breakup to learn that they're bad listeners. Some people wait for the heart attack to realize they're eating poorly. That's awareness. You get awareness by getting a punch in the face. And I think it's a responsibility for every human being should they want to have value in the lives of others. to seek awareness in how they show up in the world and how the world impacts them, their mental health, their physical health, their ability to maintain relationships and nurse relationships. And you hear me say this over again, it's a repeating pattern, which is for those who want to show up better in the lives of others, which is I see being healthy as a service to others. I see being a better listener being a service. I see everything in terms of service to others. There are benefits to you as well, of course. But I think we've neglected for decades the socialness of our animal. And social media and cell phones and the ubiquity of those technologies have complicated our ability to be human. There are others who comment on this as well. Brené Brown talks about this, where we have a young generation that has mistaken vulnerability and broadcast. where you sit in your room by yourself, put your phone on record and make a video of yourself crying because of the loss of a relationship and then posting that on Instagram or Snapchat or YouTube or TikTok or whatever your media of choice is and the hashtag is just being vulnerable. And there's nothing vulnerable about that. You're by yourself broadcasting to the world, live or videoed, it doesn't matter. Do that exact same thing with the person you hurt. That is way more difficult. Don't leave a voice memo saying, hey, I'm really sorry, just taking accountability. Call them or go visit them and look them in the eye and say that exact same sentence that you just left a voice memo for. That's vulnerability. That's really hard and requires practice. And we avoid it because it's difficult. We avoid it because it's uncomfortable. We choose broadcast not because it's better, it's because it's easier. and then mistake the two. And so the reason to learn to be vulnerable is not for ourselves, it's for our service to others. And I talk about this all the time, which we've confused these things. And once again, going back to what we were talking about before, we've weirdly taken these very pro-social activities and made them selfish. Like, go us. I'll give you my biggest pet peeve, and I've talked about this one before, but it drives me nuts. I was in this meeting once, And there was a woman next to me who was this big timey yoga instructor apparently. And the entire meeting, it was a big group of us, she was on her phone under the desk, under the table. And I sort of sneaked over a look and it's not like she was like, there was a family member in hospital and she wanted to just stay in touch. She was on social media, I could see. And at one point the conversation at the table turned to being present. And she popped up her head and said, that's why I love yoga because it helps me be present. of which I'm thinking, you're an idiot. And I started to realize we've confused things here, which is we don't get to decide when we're present. We get to practice being present. But you actually are not present until someone else says you are. You don't get to sit with a friend and be like, I feel present, if they don't feel it. That's like me saying I'm a great listener, except I'm not. I don't get to self-assign these accolades, especially when they're social. They can only be assigned by another. And so for anyone who's ever practiced meditation, there are absolutely benefits to us without a doubt. And those are important mental and physical health benefits of meditation and mindfulness. And we should practice those for sure. But there's also that what I think is the primary reason, some would consider secondary reason, Which is if you practice meditation, for example, you learn to focus on one thing, your mantra, a sound, whatever it is. You learn to your breath. You learn to, you don't, nobody, you don't think of nothing. You think of one thing, focus on one thing, right? And if something interrupts that thing, you have a thought, did I leave the washing machine on? You know, you label it a thought and you push it out of your head and you say, I'll deal with it later. And that's the whole, the whole idea is total focus and the ability to put your thoughts out of your head to stay focused on this one thing. Now think about when you're sitting listening with a friend who's going through a hard time. Are you listening? Are you waiting for your turn to speak? Right? The whole meditation practice that you've been doing is now valuable in this moment where you are focused entirely on what they're saying to you. Every distraction, every screech of a car tire outside, everybody who's talking around you, you don't hear any of it. You only hear what they're saying to you. You're entirely focused on what they're saying to you. And when you have your own thoughts of advice you'd like to give or things you want to tell them, oh my God, me too, that happened to me as well, right? You say, nope, that's not important in this moment. And you put it out of your head and deal with it later. And at the end of that conversation, your friend will say, thank you, I feel heard. Or thank you for being there for me. Or thank you for holding space for me. Or thank you for listening. And those are all indications that congratulations, you've been present for another. And I think what gives our lives purpose is not to wake up every morning to learn meditation so that we can be present for ourselves, though that is valuable. What gives our lives purpose is to do these things for another. There's nothing wrong with doing things and enjoying the benefit of those things yourself by all means. But the deep feeling sense of purpose and meaning to one's life or to one's work only comes when those things are for another. And in my view, primarily for another, where our benefit is secondary. You can't have equal. There's no such thing as equal. Because at one point, one of those things will have to be sacrificed for the other. And do you sacrifice your spouse's love so that you can stay in love? Or do you sacrifice your comfort? Do you sacrifice your girlfriend, boyfriend, spouse's comfort so that you can be better? Or do you sacrifice your comfort so they can feel better? That's an obvious, it's obvious. Well, it's the same here. It's the same analogy, which is I choose to sacrifice my happiness, my joy, my comfort, my Lamborghini, In this moment, not forever, but in this moment for you, for you, my employee, for you, my friend, you know, I will delay so that you can have. And that's where the joy and love of business relationships, friendships come from. You know, there's a great irony in all of this, which is to sacrifice for another really is the most beautiful thing we can ever do. I mean, that's kind of what love is. It's sacrificing for another. And all of these things, whether it's learning to be a better communicator, learning mindfulness and meditation, being in shape, if you can translate those things in for another, all of those things start to have a higher purpose. In the case of health, doing it for another, you're saying that it would be so that I can be here longer for my family would be a much more joyful, if I had children, for example. Sure, as long as it's real. It can't be generic. You can't just put it out there just so it fills the mad libs and you fill the gap. You've got to actually feel it, that that actually is the purpose. I'll give you one then. So part of, I do think about this and I thought about this last night when I was in the gym was, in part I think I work out because I want to be healthy and in shape for my girlfriend. Like I want to be, I want our relationship to be good. I want us to be able to be active together. I want her to be attracted by me when I'm naked. I had a debate with my team as to like whether that's a noble reason to work out. And should we feel an obligation or whatever to be in shape for our other half? I think to be healthy for our other half, for sure. But you think the aesthetic stuff is a bit... I think it's fine. I think the aesthetic stuff is about confidence, right? Which is, I'm sure she'll love you even if you're chubby. I'm sure she'll love you even if you don't have a sex pack. But if it makes you feel confident, then... It's like people who have nose jobs. If it makes them feel better about themselves, then how can we argue with it? If they went from being really, really insecure and hiding their faces or bad teeth and they never wanted to smile to fixing their teeth and now they smile all the time, why should we tell them they can't? Now, of course there's a line. Getting addicted to plastic surgery is something different and there is a line. Getting your teeth done or getting a nose job to make yourself feel better is... it's fine if it builds your confidence. So if it builds your confidence and you're doing it in a healthy way, then how can somebody argue that you shouldn't be exercising because of how it looks? Now, again, there is a line. There are some people who actually overdo it, where if they stop exercising and they gain a tiny bit of weight, they actually spiral. There is a line where they're actually not building confidence, they're actually building insecurity. But some of these things don't have to be big and lofty. They can be ridiculously small. So for example, for me, I'm very good at disappointing myself. I have no problem disappointing myself. I'll wake up in the morning, two hours before my alarm, and I'll say to myself, you should work out. You're up super early, you've got a busy day, and you've just got an extra two hours. You could use 30 minutes of that to work out. Get out of bed. I'm like, meh. I'll sit in bed for two hours and just like read the newspaper and play Wordle, you know? And two hours will go by and I won't work out. Do I have any guilt? None. I'm just like, oh, you're an idiot, Simon, right? Now, if I'm meeting someone at the gym at 7.30 because we're going to work out, I'll be there. I won't let somebody down. I'm okay letting myself down, but I won't let somebody else down. So for me, my purpose sometimes is very in the moment. Like I'm doing this for them. It's like, you know, when I would run, One of the reasons I stayed in good running shape is because when I ran with my running buddy, I never wanted to ruin their run. If they wanted to keep a slightly higher pace, I could keep it. So it doesn't always have to be big and lofty. Sometimes it can be in the moment. When you talked about awareness there and the importance of trying to become more aware about ourselves. And one of the things that made you aware was that conversation with your partner where they said, you don't listen. You're a shitty listener. Yeah. Self-awareness. I don't know if that's a real thing, but self-awareness seems to be the foundation of personal growth right so becoming aware about something in our lives and people can read as i always say that people can read as many books as they like but if they're unable to read themselves they'll never really learn a thing for me and i i wrote that a couple of years ago when i had a guy in my office who read every single he was actually one of the people that always came in with your books right he read every single book i've ever seen him he knew every book but he never changed yeah and and he and there was things within him that he wasn't self-aware about that I believe were the reason why he couldn't evolve even though he was taking in so much information. How does one go about, what are the key ways we can go about increasing our sense of self-awareness so that we can grow and evolve? Such a good question. People like that are a little bit like yo-yo dieters. They do every diet, but they're not healthy people. I read every book, but I'm not growing. And you can't assess yourself. You know, it's like, can you, I mean, you know this from work, right? Which is at some point, somebody is going to have to give you feedback. At some point, you have to give somebody else feedback. Like self-assessment is a thing, but it's not the only thing. It's a thing. It's a data point. And I'm a huge believer in self-assessment, but you have to have that buttressed with the assessments of others because we are blind very often. We're social animals. We cannot do this thing called career or life alone. We're just not that smart. We're not that strong. We're not that aware. We're just not that good. As social animals, we actually need each other to watch our backs and tell us what's working and what's not working. And I think for somebody who goes through life and reads those books, all the books, you know, I get good on them, I guess, but are they asking for help? Are they asking for insight from others as opposed to just reading it and agreeing with it and thinking they're making the changes? I know my own personal journey and I try and I do think of myself as I work hard to be self-aware and I work hard to self-evaluate, but I have seen in my own life my ability to truly demonstrate real awareness and and move further down the journey and path called life, as opposed to staying stagnant, came when I let others help me. We don't build trust by offering help. We build trust by asking for it because it's a vulnerable thing to ask for help. Will you help me is a very, very vulnerable statement. Can I help you? Not so much. An act of service. But the act of service really comes from allowing somebody else to serve you, which becomes this whole weird twisted circular thing you know it's like i mean i'll give you a silly example people who are bad at taking compliments right you're so smart no no no no no no right we downplay it because we're embarrassed by the compliment right but a compliment is a gift somebody's paying you a gift now if somebody handed you a present you wouldn't push it back because it would be rude You would accept it, whether you like it or not, or whether it makes you comfortable or not. You accept it with gratitude and then you go evaluate it later. Oh, that's an ugly sweater. But you're still grateful for the thought and the gift. And a compliment's the same. And I think all of these things, the willingness to deny someone else the joy of giving you the gift of the compliment, and to deny someone else the intensity and joy of being there for someone else, again, I think is selfish. Never asking for help is selfish. Asking for help is a great act of service because you allow someone else to have the joy of sacrifice. And it goes backwards and forwards. It's not one-sided. And this is where I think great relationships work, which is we take turns. And sometimes it's really difficult when both of us are in need at the same time. That gets really difficult. Good thing we have friends. So at the height of COVID, a couple of my friends, they're sort of remarkable high-performing individuals, both of them. And one of them called me out of the blue. She went for a long walk. She says, I'm doing really badly and I need to talk to you. And I don't want to talk to my husband because he's doing really badly as well. And I fear that if I talk to him, he doesn't have the energy for me, but I know he'll want to be there for me, which will make it worse for him. We're both really struggling. Can you have some time to talk? And I mean, A, the willingness to ask for help. B, the willingness... to understand that asking her husband for help would have made it even more difficult for him. It was just a very sophisticated and beautiful moment. And to this day, not only did we become closer for it, but her husband and I became closer for it as well because I was there for her when he knew he couldn't be. And this is why we have friends. Again, we can't do this alone. Not only are we social animals, we're tribal animals. It's more than a friend, it takes a community. And I think one of the, you know, we're always talking about what we're eating and we're talking about what we're, you know, what supplement we're taking or we're always talking about those kinds of things or what book we're reading. But we don't do enough talking about how we are nursing our close personal relationships, how we're taking care of those closest to us and making sure that the tribe is strong, the crew is taken care of, you know? And I think there's a lot more work that we can do in that arena. Is there practical things that you do with colleagues, partners, friends to create that culture of seeking feedback, being open, being truly vulnerable? You know, some people say, oh, we'll have, we'll sit down with our diary and we'll write, we'll do this exercise. Well, you might have seen in organizations where they do like 360 feedback things. Is there practical things we can do to create a culture of seeking out that feedback and creating a safe space? Well, the simple answer is of course. There's no such thing as a single silver bullet. It's a combination of things. It's like, what's the one thing I can do to have a happy relationship? Well, I can tell you a important thing, but I can't tell you the important thing. So it's the same. And everybody's a little different, you know, and each culture is a little different. So there's not even a set list I can give. But there's some that people can choose from. One thing is one of the ways we create space is how we react. If someone gives you feedback and you deny it, well that's a problem. If somebody gives you hard feedback and you thank them for it, it's a very different environment. So I'll give you two examples. One a lesson, the other one a practical example that someone can use. So I had the opportunity to visit the Army Rangers, Ranger School in particular, where they make Army Rangers. And one of the troubles they had a bunch of years ago was they had these folks that they called Spotlight Rangers... which was they were really good at their job. They were brilliant at all the tasks that were set to them, strong. The teachers, the instructors loved them. They stood out, they were great, they were motivated. But as soon as the spotlight was turned off, when the instructor wasn't there and they were back in barracks, they were assholes. And the only people who knew were their friends and colleagues because the spotlight was turned off. And so the Army Rangers implemented a system of peer review in order to identify spotlight rangers. And now, by the way, they started this 40 years ago, which I find incredibly advanced. But to advance through ranger school, you need to pass three tests. You need your instructor to say, yep, you're ready to go to the next level. You need to physically actually perform all the tasks required of you. And you need to pass your peer review. And if you fail any one of those three, you don't make it to the next level. And so that becomes an equally weighted component of advancement in the Army Rangers, which is what kind of team player are you? which I love. So we implemented a system of 360 review, which was sort of a bit of an amalgamation of things we'd taken from other groups and made our own, where what we, the way it works is you take the group of people you have regular interaction with and you fill out your top three weaknesses or the places you believe you need to grow the most. with a specific example for each. So top three specific weaknesses or places you need to grow the most and then top three specific strengths or the places you believe, three examples of the places you believe you've grown the most. They have to be specific. Not like, oh, I'm a much better timekeeper now. No, you've got to give some specific examples. They're collated and distributed amongst the team and then you come together as a group and you take turns reading them. So first you read your own weaknesses specifically. And then the group has the opportunity to add to that list. And here's the best part. We give a little speech before the whole exercise starts that the people who are going to give you this feedback really don't want to. It's really uncomfortable for them. It's going to be, they would just rather not do this exercise at all. But they're going to do it because they want to see you and help you grow. And so what they're giving you is a gift. And so you have to receive it as a gift, which means you say thank you. You don't have to agree with it. If you don't agree with it, say thank you and just dismiss it. It's fine. But if it has an emotional impact, if it makes you angry or frustrated, it's probably true. And we go around the room and people can add to this list of these weaknesses. There's no format. They can do it in any way they want. And you sit there and you look them in the eye and you genuinely say thank you. You're not allowed to say a word except thank you. Then you do your strengths and you read your strengths and anyone can add to the list. And just as you discovered you have blind spots you didn't know you have, you discover that you have strengths that you didn't know you had, that you're having a positive impact on the lives of others that you didn't know you were. And it's a magical experience. There's usually tears at some point because it's powerful and it's a safe environment. I wouldn't recommend an organization start there. I would recommend you build towards that because you're going to put very senior people and very junior people in the same room and they're going to have very blunt conversations with each other. And it's real. It's not a place to start, but it is a place to get to. And there are variations for it. That one takes a lot of time. We've varied it as where everybody's responsible to do it and you have two people assigned and you can choose one or two people to join and you just have a smaller group when you want to do it. And it's just for you. So the others don't do it in that moment. It's a little more efficient to do it that way. But there's no right or wrong way. I really love that idea of the promotion being contingent on not just your manager or the CEO saying, believing that you are x y and z but getting peer reviewed by the colleagues around you because one of the things i noticed in my company we had and when i left there was about 700 people but i would have i would hear reports about a particular team member and the reports i would get back about their character and their conduct never matched the way they treated me so they would always treat me of course amazingly right of course right and then i'd hear that they treated this person like this and they did this and i'd go really and they go yeah i go really they were always so nice to me and obviously on that basis I would have promoted that individual and thought they were great so that's definitely something I'll implement that's called the tree of monkeys by the way it's called the tree of monkeys which is all the people at the top looking down see only smiles but all the people at the bottom looking up see only answers Oh, shit. Yeah, that makes perfect sense. And again, you don't have to do, you don't have to, I mean, again, there's different cultures can accept different, you know, there's no right or wrong here, you know, and some cultures may want to implement a peer review that gets included in a promotion package, but it doesn't have to be that. Good leadership helps there as well, which is every senior person knows that they don't get the truth. Even if your people are wonderful and fantastic, people want to tell you the right answer, not because they're trying to lie to you, but they want to please you. You knew the more senior you got, it was harder and harder to get the truth. And every senior leader knows that it's hard to get the truth. Every great senior leader also has spies. Somebody that maybe you started, you were friends with that people don't know you're friends with, or you came up through the ranks of the organization together, but your career went a little further, a little quicker. You have these trusted relationships that you can just get a little inside scoop as to what's really going on. Also, this is the hardest one, or at least it's a hard one, learning to replace judgment with curiosity. So somebody comes to you and says, that person is a problem. And all of a sudden we create a narrative based on the story that they tell us that they are a problem. That person's stupid, that person's lazy, whatever it is. Now they're labeled as lazy. Now we treat them as lazy. Now everything that they do or don't do is because they're lazy. But as a good leader, we can take those reports We can take that hearsay. We can take those direct stories that people have and we can say, thank you. I appreciate that. I'll look into it. I'm going to find out more. And you go on a little journey to discover what's really happening. It absolutely may be that they're lazy. That could 100% be it. Or maybe they're distracted for a reason or maybe they're having trouble at home or maybe we've given them a job that they're ill-qualified for. Or maybe they're having a personality conflict with somebody that they work with. The list goes on and on and on and on. And the good leader is finding that out. And by the way, by leader I don't mean the senior person. I mean any person in the organization. To replace that judgment with curiosity. And I think that's what creates those environments. But the reality is with rank you do set the tone. So for example, no lying. That seems like a pretty simple one inside a company. We don't tell lies. Phone rings, your assistant picks up, they put the person on hold and they call out to you. David's on the phone and you go, tell him I'm not here. You've just sanctioned a lie. You've just sanctioned a lie. And that little lie then, now that person who was told to lie approvingly, now they can tell a lie, right? Because it came from the boss. And all of a sudden you find out you have an organization that tells lies all over the place and some of those lies grow. It happened to me once where I had a very, very senior phone call with the top leaders of a really big organization and I forgot. I just didn't show up on the call. I have no excuse. I forgot to check my calendar and I forgot. Yeah. And my assistant at the time, of course, wanted to protect my reputation. And she wrote to them and said, terribly sorry. Simon had another meeting that ran long. And I took her aside and it was the hardest feedback I had to give because she did it with such good intention. I said, I'm so grateful. I'm so grateful that you're protecting me and you're protecting my reputation. And I want you to do that, but you have to do that without lying. We cannot lie. You can say, I'm sorry he's late. I'm sorry he missed the call. But you cannot say... It's because he was in another meeting because that's not true. And so it's this, you know, I mean, I'll challenge you. You try this, right? Let's look at the time right now, right? It's noon, okay? It's noon on, I don't even know what day it is, Monday, right? You and your entire crew, here's the challenge for all of you, okay? You may not tell a single lie for the next 48 hours. I mean, nothing. And you'll be amazed how difficult it is. You'll be amazed how many little white lies we tell. Like the waiter comes over and five minutes before you're saying, oh, this food is so salty. And the waiter comes and goes, how's everything? You go, it's fine. Everything's fine. Yeah, thank you. It's fine. That is a lie, right? Now, you don't have to be mean. There's nothing that says truth has to be brutal. It just has to be true. Try for the next 48 hours and see how hard it is not to tell a single lie. Everyone's going to be walking around asking each other what they think of each other. Simon said you've got to be honest. Right, but there's ways of doing it, right? So do these genes make me look fat? I like the other genes much better. They're way more flattering. You don't have to hurt people. Also timing, right? So a true story. So I went to see a friend's play and... I could not wait for this thing to end. It was so bad. And I went out to say hi to her after the performance and she came out. She was still in costume and makeup and she knows I'm an honest broker. She cares about what I, she knows I'll always tell her the truth and these kinds of things. And she says to me, what did you think? Now is not the time and place. She's pumped up full of adrenaline. And now is not the time for me to give her a critical evaluation of this god-awful performance. And so I sidestepped the question but said something true. I said, ah, it was such a treat to be here to see you do your thing. I've been wanting to see you on a stage forever and it was so much fun to see you on the stage. All of that was true. The next day when the adrenaline had come down and I called her up and said... Can I tell you what I thought about the play? She goes, yeah, of course. And I told her critically piece by piece what I thought about it and how bad it was. We had a perfectly rational conversation about it. Didn't hurt her feelings. The day before I would have really hurt her feelings. So not everything has to be, we mistake being honest with being honest now. No, I can't lie and I have to answer the question. But it can answer it tomorrow when the conditions are better for that message to be received. What is so insidious or what is so harmful? What is the long-term negative impact of creating that culture of lying within teams and within ourselves? Well, there's this psychological phenomenon, I guess, called ethical fading. which can grip an organization's culture where people within that culture become capable of making highly, highly unethical decisions believing they were well within their own ethical frameworks. So extreme examples are things like pharmaceutical companies who have a patent on an essential drug And in order to meet or beat some financial projection, they raise the price of that essential drug 100%, 500%, 1,000%, 1,500%. Totally legal. There's nothing illegal about that. Really unethical, right? And in organizations that suffer ethical fading, it almost always, if not always, starts from the top. It's usually a leadership problem. It comes from excessive amounts of pressure to hit certain short-term goals to the point where doing it ethically becomes more and more difficult. And so what creates ethical fading is a series of things. One of those things is we rationalize, right? We look for ways to distance ourselves from the impact of our decisions. We say things like, it's what you got to do to get ahead. It's what my boss wants. Everyone's doing it. It's the system. I don't have a choice. And there are ways we can disassociate our responsibility. So rationalizing is a big part of it. Another part is the old slippery slope. You did it once, you did it a little bit, it worked. We raised the price 10%, nobody even noticed. Great, do it again, do 20% this time. Try 100% and it just keeps going and going and going before you have full-blown ethical fading. And some of the things are excessive use of euphemisms. Again, we're using language to disassociate ourselves from the impact of our decisions. So for example, you know, we in the United States would never torture, but enhanced interrogation, that sounds very appealing, right? Or companies would never spy on their customers, but data mining, yeah, no, we're really into that, right? Yeah. We're just using different language to mask the insidiousness of our real decisions. Like everybody talks about managing externalities, but we don't talk about the damage we're doing to the people and cultures and environments of the places where our offices and factories are located. Why don't you have that conversation? And so when you have enough of those things, ethical fading shows up where you now have real issues. And in the extreme, you have massive scandals. Sometimes it leads to illegal activity, but usually it's just unethical scandals. And when those things happen, management is dragged out and they talk to the newspaper, to the law and they always say the same thing which is we broke no laws, everything we do is legal. No, we don't have an issue with the law, we have an issue with your ethics. But when you don't have, when it's not full blown, it just becomes an incredibly uncomfortable and a horrible place to work that increases stress to the point where you'll do damage to your own health and you'll do damage to the way you treat your family. Because when you're under that kind of stress to violate your own ethics... at work, you're going to come home and you're going to take it out on your spouse and your kids. You're going to kick the dog. You're not going to be motivated to do much except sit on the couch and watch TV, you know? So it has some pretty insidious impact in the lives of human beings. I was thinking of it as well in terms of romantic relationships. One little white lie becomes another little white lie and then... couple of, you know, a year passes and you're so unaligned and so far from your truth that you're resentful that you're having to keep up with this set of lies. I mean, we've talked about it with the guests on this podcast before. One of the mistakes I made in my relationship at the start was I would say yes to things that I didn't like doing. So I created this culture and this also this like expectation when my partner thought I loved doing X activity at 6 a.m. in the morning because I'd always said yes and I'd always pretended to like it. Now I have to live out that life of something I do not enjoy doing because I lied at the start. And the journey back is not always so easy when you've persisted. I've made the same mistake on the other side, which is after I broke up with someone when we maintained a friendship. And I started dating somebody or at least started dating but I didn't want to hurt the feelings of this person that I still care about that we broke up a couple months before. And so I would avoid the conversation but if she said, are you dating anybody? I'd say, no, not really. And it's not because I wanted to lie, it's because I don't want to hurt her. The intention of course is positive but what I learned later is all of those little lies... meant that she was holding out hope that wasn't there. And by the way, it's been done to me as well. I'm holding out hope that's not there because someone didn't want to hurt my feelings. And I would rather just have the uncomfortable conversation. Are you dating somebody? You are. Okay, well, that hurts, but I can heal. I can move on. And again, this young generation, because of all the reasons we've talked about and more, seems to exhibit the traits of being very conflict avoidant. very uncomfortable with uncomfortable that has some impact that are sometimes funny, quote unquote, but always tend to make somebody feel more lonely. So for example, and I've seen this happen, I've heard about these stories so many times, a young employee who may feel they're in line for a raise, but is so uncomfortable to go to their boss and ask for a raise that they just quit. that they would rather quit than have an uncomfortable conversation. And then sometimes it is followed by an angry email that says, I'm undervalued, you don't appreciate me, you underpay me. And I've heard it happen so many times where The leadership is like, what? We were either planning on giving you a raise, we'd happily give you a raise. And it's really uncomfortable to walk in your boss's office and be like, hey, I'm working really hard, can I have a raise please? Now, the time you do get to quit is when you've had this conversation four or five, six times and you've seen nothing and had no feedback and had no impact. Then absolutely you quit and absolutely you say you undervalue me. You underappreciate me. We've had this conversation five or six times. Then it's their fault because they had all the information. But again, it's really funny how many young kids would rather quit than have a difficult conversation or they'd rather break up than have a difficult conversation. Or worse, they'd rather ghost someone than break up with them because it's really uncomfortable to have a fight and a breakup and call each other names. It's much easier to just turn off all the social media, unfollow everywhere. I know we've been dating for six months, but I'm just going to now ignore every text, ignore all your calls. And think about it from the, we talk about service. Think about the service or disservice we do to the other person. From their point of view, it's like you got in a car accident. It's like you were just killed. It's like you just disappeared off the planet. That is trauma. Because you're uncomfortable to have an uncomfortable conversation, you would do that to another person. So service goes both ways, which is I will make myself uncomfortable and have a difficult conversation, even if I bumble it and screw it up and it ends up being a screaming match. Because that is a better option than traumatizing a person where they have to believe that I've, first of all, that I've died because they can't get hold of me in the panic. And then when they realize I'm alive because they see me on Instagram, that now I've destroyed their self-confidence. How dare somebody do that to another human being because you're just a little uncomfortable of having an uncomfortable conversation. Where we can help is we can teach people how to have uncomfortable conversations. That is a skill set. We don't teach leaders how to have uncomfortable conversations. We don't teach students how to have uncomfortable conversations. We don't teach – we can teach these things all over the place. And I think it's a big gaping hole in curriculum. We teach, you know, maths and we teach English, but we don't teach social interaction. We don't teach listening. We don't teach how to have uncomfortable conversations. We don't teach how to give and receive feedback, you know? Now, you tell me which is going to be more valuable for the rest of your life, how to have a difficult conversation or trigonometry. Yeah. And shouldn't we be, you know, isn't this, shouldn't we be preparing people for life? Mm-hmm. I had a few words to say about one of my sponsors on this podcast. As the seasons have begun to change, so has my diet. And right now, I'm just going to be completely honest with you. I'm starting to think a lot about slimming down a little bit because over the last couple of, probably the last four or five months, my diet has been pretty bad. and it started to show a little bit really over the last two months I go to the gym about 80% of the time so I track it with 10 of my friends in a whatsapp group and this tracker online that we all use together we call it fitness blockchain and I'm currently at 81% so 81% of the days I've done a workout in the last 150 days right so I'm going to the gym about six times a week that's been a little bit impacted by the diary of a CEO live tour but I'm trying to stick to it And so one of the things I'm doing now to reduce my calorie intake and trying to get back to being nutritionally complete in all I eat is I'm having the Huel protein shake. Thank you, Huel, for making a product that I actually like. The salted caramel is my favorite. I've got the banana one here, which is the one my girlfriend likes. But for me, salted caramel is the one. On that point of that new generation in the workplace and how they're exhibiting traits of being a little bit more cowardly, in terms of having those difficult conversations. You made a video about millennials in the workplace that did probably hundreds of millions of views. I remember seeing it on Facebook maybe five years ago, and I think it had 50 million views on that one video, but across YouTube it's got tens of millions of views on many, many different videos. But I'm thinking now about that new generation that you've described, that younger generation, that Gen Z generation, that are emerging into the post-COVID world. Mm-hmm. What is the workplace for them? How do I as a leader make sure that if I'm hiring Gen Z and I've got a couple even in this room that work in my company, what have we got to know about them and do to make sure that they thrive, stay motivated and achieve their goals? This is my own bias. I don't like the conversation of strengths and weaknesses. It's the famous question in an interview, what's your biggest weakness? Well, I'm a perfectionist. I don't like the conversations of strengths and weaknesses because Strengths often have liability. I'm really confident. Okay, in the wrong context, you're arrogant. But weaknesses also have silver linings. So for me, I'm chronically disorganized. I'm terrible. Every system app works for like a week and then I'm back to being disorganized. Is that a good thing or a bad thing? Now for years I used to beat myself up for it and say it's a bad thing, it's a terrible weakness. But the reality is it's context. So as a young entrepreneur I was at this networking event and I met this guy who was really impressed with what I had to say with my pitch and he's like, Simon, we have to do work together. Here's my business card, call me, let's do this. And I lost the business card basically as soon as he gave it to me. So anybody who was organized would be sending a text from the taxi or at least sending an email the next day. Not Yahoo over here, I lost the business card. There was no way for me to find out what this important piece of business would have led to because I lost the card. Two weeks later I found the business card at the bottom of a briefcase. So I emailed him and said, hey, remember we met two weeks ago. I'd love to reconnect and see if we can work together still. He wanted to work with me more because he thought I was busy. So strength or weakness? The answer is it depends. Now, in general, yes, it is a weakness. It's a liability and it causes me great stress. But not always is the point. And so, yes, it's important for us to understand our characteristics that we exhibit, of which some of them in certain contexts are huge strengths and some of the exact same characteristics in the wrong context are huge weaknesses. So we have to be very careful when we label people or generations as being strong or weak because the answer is it depends. Okay, so that's the preface. So when we talk about this young generation, the Gen Z generation, they exhibit many of the same characteristics as the previous generation, but they're quite different in the sense that they're very activist-like. Right? So, for example, in the 1950s and 60s, people hated their jobs back then, too. They just went to work every day and just suffered in silence. You know, by the time you get to the 80s and 90s, people hated their jobs, but then they'd at least start talking about it around the office saying, you know, this job kind of sucks a little bit, you know? And then by the time you get sort of the 2000s, people start speaking up to their bosses saying, I think we should make it better to work here, you know? And now you're in this young generation and they're just like, They're like standing up and quitting and like, and I love it. Right. And, and, and they organize, they're much more, you know, the previous generation would like hashtag tweet my discontent as I'm sitting in my Uber on my way to brunch, you know, but this young generation gets out and organizes and comes together. Plus or minus? Depends. Sometimes it's a huge strength, the fact that they have that kind of energy. But sometimes, as we've talked about as well, they also have the energy to quit instead of having an uncomfortable conversation. So strength or weakness, it depends. And so I think the way we have to approach all of these things is with empathy, which is instead of deciding if it's a strength or weakness, to try and understand where it comes from. Because I can say this generation is irresponsible and will quit before they ask for a raise. Or I can say, Why is it that they're quitting when they just need a raise? What happened between A and B in that thought, in those two actions? And I'm like, oh, they just missed the skill set. Oh, we can totally figure that one out. That one's an easy fix. So I'm not labeling a whole person or a whole generation. I'm rather recognizing that there's gaps of skills, which we all have. So when you ask me about any of the generations, and they all have strengths and they all have liabilities. And depending on the timeframe and the context, sometimes those strengths also become old-fashioned, no longer necessary. You know, they can still cause frustration. They can still cause confusion. You know, we're still looking through them at our, through our own prisms of our own generation. I've definitely caught myself doing it. You know, I do do it. My goodness, we never did that when we were kids. You know, when I was their age, I'm actually saying that now. But I think the trial, right? The test is the practice of empathy, which is another skill that we can teach that's missing. How is this the COVID experiment on the workforce and the workplace? So how do like business leaders or business owners need to adjust in order to make sure we don't lose people and become an uncompelling, unattractive place to work in this post-COVID era? And also on the point you talked about earlier about the importance of like we're social animals and we need that social connection and we're being kind of, we're optimizing that out of our lives. It feels to me like this remote working thing has exacerbated the issue because we're, you know, for young people, you know, I think that the office is one of the few institutions we have left where we are in person. We no longer get dating. We do that on apps. food, we don't go to restaurants anymore, we just order Uber Eats. And now work, they're telling us, is going to be done from Zoom. I'm like, what do we have left? We're going to be lonely. And it's not a coincidence that we see rising rates of depression, anxiety, suicide, especially in younger generations. So it's not causal, but there's definitely a correlation. It reminds me of when, and I'm old enough for this, some of your listeners are not, but I remember when the internet showed up and e-commerce started. And I remember some of the people who were really into the tech running around thinking this is the death of bricks and mortars. There will never be stores again. And now Amazon opens stores and rent the runway open stores. And it turns out the extremes are not great places. It's not the death, it's live alongside. They become different animals. They become different reasons. We go to shops not to get the best deal. You go to websites to get the best deal. You go to shops because it's fun. You go to shops to try stuff on. You go to shops because it's an activity, because our hunter-gatherer instincts, we like foraging and looking for things. It's entertainment. We enjoy the service aspect. It's with our friends. Sometimes it's not about the shops at all. It's just a place, something to do with our friends. It plays a different role, and the smart retailers know that. And so when we talk about work, it's the same. It's the death of the corporate headquarters. It's the death of the office. I'm like, eh. Is it though? You know, the reality is this is going to be somewhere in the middle. And I think one thing with all the predictions about what the future of work looks like, I think one thing we can be absolutely sure of is there'll be more flexibility where, you know, where it used to be, Hey boss, can I take off next Friday? Can I work from home next Friday? I have to stay home for whatever, right? Becomes emailing in the morning saying I'm working from home today and everybody's just fine with it. You know, And introverts like working from home, extroverts like working at the office. But at the same time, sometimes extroverts should stay home because they can get more work done. And sometimes introverts need to come to the office because they need to connect and we want you to be a part of the culture. And so I don't think, you know, making any predictions about what it will look like, I think is a little foolish at this time. We know it'll be some sort of amalgamation. We know it'll be more flexible. And probably every office will be slightly different and it'll fit whatever their culture is. And I think the office environment will become one of the selling things, which is if somebody really hates this office environment, they'll find another company where they like the office environment. But I think what's really interesting about the great resignation, what's being talked about less in the great resignation is sort of the reasons for it. Some people talk about the government checks that we've gotten. That runs out, so that's not the main reason for it. People talk about how people are quitting to follow their dreams. I've always wanted to be an actor or a writer. Great. And that is definitely a percentage. And I love that. But that's not – those numbers aren't big enough. I think what I think is more interesting is that the great resignation is an indictment on decades of substandard corporate culture and poor leadership. Because it's a big deal that we're seeing people, especially at frontline level jobs – where leadership used to say of them, they should just be happy to have a job. That those people are quitting without new jobs necessarily is a big deal. And they're definitely not all just following their dreams. I think it is because in the past, when you ask those people, how's work? And they'd be like, it's fine. Is it good? No, it's fine. It's a job. It's fine. Well, why didn't you quit? Because the unknown was way scarier than fine. And so what they may do with fine and leadership took advantage. A lot of corporate managers took advantage of the fact that they could get away with fine. We could do the minimum because they're not going to leave. They're lucky to have a job. And what are they going to go out there in the great unknown? Fine is fine. And then COVID happened. And a lot of people were laid off. A lot of people lost their jobs. A lot of people were furloughed. Some people kept their jobs but just lived in fear. And we all kind of made it out okay. We ate, we had food. Most people made it okay. Even if it was difficult, they made it through. And so all of a sudden the great unknown, a lot less scary. And so when you're offering me fine, I choose unknown. That's a better option. In fact, not only do I choose unknown, I'm going to wait until you fix fine. And I don't think enough companies are recognizing that the great resignation is an indictment, that the great resignation is a wag of the finger, that you have been getting away with substandard culture and poor leadership for too long and you better fix your stuff. And I think the companies that will have the huge advantages is not the companies that get the balance of in-person or online work. Right. I don't think that's what makes it. I think the companies that get the huge advantage moving forward are the ones that teach leadership to their leaders, that teach these human skills that we've been talking about, that create a corporate environment and a corporate culture that I want to go to every day and I actually form good strong bonds with my new tribe, with the people I go to work with. and I'm willing to sacrifice and not get everything exactly how I want it because I'd rather be here and serve these wonderful group of people. Those are the companies that will have the huge advantage of the next decades or two. One of the things that I saw in that post-COVID period was, in my company in particular, was one of the things that I believe, and from our research at the time, I'm no longer with this company so I can kind of talk about it with a bit more honesty, In our questionnaires, we would see that a lot of the reason why people would love to come and work there was because of the company culture. We'd gone to extreme lengths. We had like five people that were just in charge of happiness called the happiness team. We paid for everyone's mental health therapy. It was in terms of flexibility what the world is like now, where you can decide for yourself when you work. And then when COVID came around, we were like known for that in the UK. Like the BBC had done a piece, is this the best place to work? When COVID came around, it smashed our USP. And this is why I almost viewed it as a leveler, because now everyone was working from their laptop at home in their boxer shorts. So now what I think I saw was our employees were going to some degree, I can work at home in my boxer shorts for this company, or I can work at home in my boxer shorts for this company where they'll pay me double. And that shift was, and it was terrifying for us because that's when we started to see people leaving because they would go, oh, well, this company will give me 30% more and I'm still going to be doing my to-do list at home on my own. So why don't I move now? Yep. Is there truth to that in your view? Yeah, of course, because you mistook trappings for culture. Now those things are good. Let's not diminish the value of those things. But this is a beautiful full circle we're going in from the very beginning of our conversation, which is to what end? To what end? What are we doing this in service to? What's the bigger thing? That was missing. And that was missing. And that's where cultures become magic. They're fun. The number of companies you and I have both visited that have flat screens everywhere, amazing design, free lunch. We had a slide. You have a slide, like cool. Now is somebody going to turn down a better paying job to keep that? No. But if you give them the opportunity to contribute to something bigger themselves, would they turn down a better paying job now? Yes. And so I think, and it's probably driven by the whole dot-com tech culture thing, Because tech companies largely are that sort of ridiculous bright color slides in every office, which is fun. Don't get me wrong, it's fun. But that's not cause. That's not purpose. And great cultures are organized to advance something bigger than themselves. They're not just fun places to work. Do you know the thing I think we did wrong? I think we asked people what they wanted. So they said things like, A bar, a basketball hoop. Whereas, as you're clearly alluding to here, you can't ask people for culture, like in that regard. You can't ask people to all name the collective cause because they'll all say different things. Correct. You have to offer them a cause to join. And that's one of the reasons they join the companies, because they believe in the cause, not just because it's a job I want to do. Henry Ford famously said, if I asked people what they wanted, they would have said a faster horse. This is where... Folks like Steve Jobs who's given too much credit for being able to predict what people want is totally not true. It's he had a cause and he simply made products that brought that cause to life which is to give people the power to stand up to Big Brother. That's it. And we develop technology to empower individuals. That's it. And so those who came to work there, they recognized that they were a part of a revolution, the computer revolution. They constantly talked about it as the revolution. Then they invented iTunes, which more than the iPod, revolutionized the music industry, turned it from an album culture to a song culture, let us make music portable. And that was the music they referred to as the music revolution. And And you carried a banner, you know, and you sacrificed for it. Was it a great place to work? It was a hard place to work, but it was worth it. And that's the question. Are the sacrifices worth it? And sometimes we hide the pain or the difficulties or the strains or the stresses with all the silly fun stuff, which is a salve, let's be honest. I mean, it does work to some degree. But not all stress is bad. You know, I joke, you know, often, you know, when we work hard for something we love, it's called passion. We work hard for something we don't love, it's called stress. Now, in both cases, you're working hard. You know, what's the difference between, you know, doing something you love and you work late hours and you sacrifice your relationships and you sacrifice your family, but you look at it and say, it was hard, but it was worth it. You know, versus losing all those things and all you do is get a Lamborghini at the end. You know, it's like, was it worth it? I'm like, eh, not so sure I'd do that again. You know, and so I think that's what purpose and cause provide us is they give us a reason for the sacrifice. That's what love gives us because it's the reason for the sacrifice. That's what children do. They give us the reason for the sacrifice. Your life will profoundly change when you have a child. Is it worth it? Yes. Is it easy? No. Every person I've ever talked to who has children say it's the most difficult thing they've ever done. And if you ask them if it's worth it, they all say yes. That doesn't go together. When I think about even this podcast and setting purposeful goals for what we're doing here, we definitely fell in the trap of being, like I think a lot of people do, you get consumed in the charts. Oh my God, we're number one. For now. And then you scratch your head and go, well, then what next? What's a more worthy, more purposeful goal for us to have as a team when we're building something like this podcast? Because it's so easy to get caught up in, we want to be number one in the charts. And that does drive you to some extent. It seems to be a reason, whether it's a vapid one or whatever. But what is a better, more worthy, purposeful goal to set? Okay, so let's take a step back. Uh-oh. gonna interrogate me now what was the reason you did episode one um plentiful i'm gonna give you all of them i'm very honest as well i thought podcasting as a medium would be a big opportunity i thought that was would be a really effective medium of communication when that's growing opportunity for what to grow my personal brand okay i'm gonna give you all of the reasons even the selfish ones okay number two i find it a thrill and deeply compelling and liberating for others to talk about things and be honest in a way that most people aren't usually honest so in the first episode i talk about things like masturbation and mental health problems as a ceo difficulties with my family all of those things i find it liberating for myself but i know for others that listen to it when especially when we've got the started to get the feedback, it was equally liberating for them. And then when you... So episode one is a little... Episode one was more of an experiment. But as you get to episode two or whatever, then it was the feedback. So I was doing a lot of other things that were doing bigger views. My Facebook videos would get 10 million each, 10 million views each. But the feedback I was getting from the thousand people that were listening to this was deep. It was profound and it was intense. And they said things like? They said things like... I can relate to that. That's really helped me solve this problem I've had. You've made me feel, a big one we get is you've made me feel like I'm not alone. And then going, if I go to the last, like, you know, if I go to more recent times, I quit when I left my job and I was now no longer needed to do anything for money anymore in my life. when I took stock of because there was about a six month or one year gap in this podcast which is when I was leaving my job and I took stock of my life and thought about the things I want to do for the rest of my life and this was one of the things that seemed to touch all bases it was enjoyable for myself I get to sit and learn from people like yourself it feels like as you said it's like a service to others a really profound one probably the greatest service I feel like I can do to the external world and it's money generating but to be honest if it makes a profit I just spend it on the podcast so yeah and that's where that's kind of my thesis so okay so let's back up a second I'm just taking on your own words I'm not adding anything here would you rather do this to be number one to grow your own brand Or would you rather do this to tell the truth so it helps others tell the truth to themselves and to others? Number two. Obviously. And so your podcast absolutely has purpose. And so when you start recognizing that we do this to tell the truth so that others can be honest with themselves and others in a way that they struggle to find anywhere else. And if we're number one for a period of time, amazing. Yeah. But if we're number two, we'll still do it. If we're number four, we'll still do it. If we're number ten, we'll still do it because there's a reason to do this that's bigger. Now, if the numbers are steadily declining and no one's listening, then maybe we're doing something wrong to spread our message. Maybe we've gone off base. Maybe we're not telling the truth like we used to. We need to reevaluate if we're still fulfilling our purpose or maybe the manner or medium that we're using is no longer relevant. So, you know, because things change in time too. So that's why the metrics do matter, but the absolute of the metrics don't matter. The trend of the metrics matter. And so you do have purpose for this. And that means you have to practice that kind of truth telling with your team who work on this podcast, because you have to live when the microphone is off the same way you live when the microphone is on. And that starts to have a profound impact on you and your team. So if that becomes the purpose rather than being number one, maybe it gives people a reason to stick around here because they believe in it. It's benefited them. Is there a role for those arbitrary goals? Are they useful? To say we want to be number one in the United States, is that a useful goal to set ourselves? Alongside the sense of purpose, can they coexist? Yes. They can coexist as long as you recognize the reason. Because if you become too obsessed with the goal at the sacrifice of the cause, like there is a hierarchy, the cause comes first. Because if the goal comes first, you can, look, I know authors who, and I'm sure there's ways to do it in podcasts as well, but I know authors who are number one Amazon bestsellers. Well, that's because you can game the algorithm. You just have all your friends buy a book on the same hour because it's calculated hourly. And congratulations, you can't be a number one Amazon bestseller with the worst book in the world. It exists. You can do it. I've seen it. There are companies that you can buy a New York Times bestseller. They know how to game the New York Times algorithm and they buy books across the country. Basically you buy the books and they buy them on your behalf. And I've had an opportunity to look at the publisher's Like look at the publisher's computers where you can see any book. We can track any book, book sales. And they've showed me, they showed me how the trend works that you can tell who gamed the system. And there are some very famous authors that I will not mention on this podcast who I know for a fact because I looked at the, that they brag about how they're New York Times bestsellers. That's because they paid for it. They bought all those books themselves, right? You can game all these systems. And if you're too obsessed with, with the number because you think the number is what gives you credibility, then it goes back to ethical fading again. Then the pressure becomes overwhelming and you start doing things that have nothing to do with the podcast or the cause and only have to do with advancing the number so you can go around telling people you got the number. Great, good for you. It's not how I choose to build my business or live my life, but I think what's more fun is to be surprised. Which is, is it okay to be driven to be number one? As long as you're doing it second and the cause comes first, sure, if that's your thing. But just be prepared to answer what next. Because you can't be number one forever. I love it when companies say I'm number one or I've got the number one podcast and you heard, I always say, for now, for now. Like that stuff doesn't last. Even if it's 10 years, it still won't last. Right. Quick one. We bring in eight people a month to watch these conversations live here in the studio when we're here in the UK and when we're in L.A. If you want to be one of those people, all you've got to do is hit subscribe. What are you working on at the moment, Simon? Because you're you're known for writing amazing books and delivering amazing content. What are you working on? What's what's compelling you at the moment? What's your why? Well, my why is to inspire people to do the things that inspire them. So to each of those, so that each of those can change our world for the better. That is the foundation of everything that I do. And, and that's the test through which I run everything that I will do. Like, does this inspire people to affect some sort of change or perspective? Why does that matter to you? It's not that it matters to me, it's who I am. That's core to my being. Your why is core to your being, my why is core to my being. That's my personality, it's what wakes me up every day. It's what fulfills me, it's what fills me as well. And then I have my cause, my just cause, which is my why is where I come from, my cause is where I'm going. And my cause is to create a world in which the vast majority of people wake up every single morning inspired to go to work. feel safe wherever they are and end the day fulfilled by the work that they do. If you're going to put stress into something, that you get to enjoy the fruits of your own labor. Building something and looking at it and say, I helped build that. That's a beautiful thing. And so any work that I do is always to advance that cause. So there's a bunch of things that I'm doing, some of which will work and some of which will fail. I started my own imprint with Penguin Random House called Optimism Press where I'm looking for the people or ideas that I believe need to be shared that help move the needle and advance towards that cause. And so we've published four books so far. We have two coming on the way, which is really exciting. How to Make a Plant Love You, Trust First, The Power of Giving Away Power, and our newest one is called Partnering. And they all have a point of view about how to move or new ideas about how to advance this closer towards this world that I imagine. So and all different takes on it, which is really fun. So I have the imprint. I'm working behind the scenes on police reform, which has been intense and fascinating and steep education. Also looking, I'm doing some work to try and sort of figure out how to drive innovation inside large bureaucracies. So I'm trying to figure out, I'm working behind the scenes, trying to work with some really forward-minded, really infinite-minded young CEOs or at least younger companies to help them figure out how to build infinite-minded companies now. It doesn't matter if they sell, it doesn't matter if they have a liquidity event, but they're not driven by the sale, they're not driven by the liquidity event, they're driven to build a company that can outlast them. and they're driven to build cultures that can withstand the test of time and the loss of every single employee. You could have an entire new generation come in and the company will survive. And so I'm looking for those companies that I think are worth supporting and helping them build a new kind of company for the next generation. Because I think the way we've been doing it for the past 30, 40 years has been... really not helpful to the economy and to the world. And I think that we have to find new ways to do it. In other words, I'm putting my money where my mouth is. All the books that I've written about these things, I'm going to try and get under the hood and try and help these companies do it. Your brilliance, you know, I saw it in the list of all the things you're doing. You're brilliant. But I also see it in all the work you've created. I see it in the content you put out there. Your brilliance is very obvious. I sat here with the guy that trained Michael Jordan for 15 years and then he trained Kobe afterwards. And And he said that with our brilliance often comes what he refers to as like our dark side, which is the things we struggle with. And those, and he says they, there tends to be a relationship between our brilliance and our struggle or our dark side. Are you aware of what your dark side is in terms of the cost of your brilliance? Well, I think, um, first of all, I don't think I'm brilliant. I know that sounds sort of like falsely humble, but I really don't think of myself that way. I genuinely think of myself as an idiot. And I'm not being glib at all. I don't really understand very complex things. And I have pretty bad ADHD. And so everybody thinks I'm extremely well read. And the reality is I've written more books than I've read. And I just, I love the idea of reading. I don't, I can't read. I don't read. I learn by listening and talking. And so very complex things My brain doesn't work that way and so I've learned to ask lots and lots and lots of questions so that something can be simplified to the level that I can understand it. And if it's simple... and I can understand it, that means I can repeat it. And so my books are my ability to understand complex things by asking other people lots and lots and lots of questions so I can simplify it enough so that other people can understand these complex things too. I'm talking about biology and anthropology and all kinds of things that, yes, I know that I've oversimplified them. I'm fully aware. People criticize me like, this is pop culture, pop science. I know that. But if I make it its full complexity, all I've done is written a textbook. Well, that's not helpful, is it? So I don't think of myself in the way that you receive my work, you know, and I think that maybe the impact of my work may be perceived as genius. But let us not confuse that the impact of the work that may be perceived as genius doesn't make the person who produced it a genius, right? So I reject, I'm flattered by, but reject the compliment, even though it's a gift. I'm supposed to accept the gift. Yeah, yeah, yeah. Take your gift back. It has no use here. So when you ask me, like, what's the balance of genius, genius being this thing off the scale all the way far away over there? Well, if I don't think of myself or even live my life that way, then the balance of something is probably a little closer to the middle. So do I have darkness? Of course I have darkness. Do I find that darkness absolutely fascinating? I do. What is it? The... A lot of my insecurities that I've dealt with, I don't think I've ever actually said out loud on a podcast like this. I might have mentioned it a couple times scarily. People always ask me, so Simon, what books are you reading? Or what books are in your bedside table? Well, I can answer that question because I have a pile of about five or six books on my bedside table and I've read none of them. But they've been sitting there for like two years. I've read some of two of them. I honestly don't remember the last book I finished other than my own because I had to read it for the book on tape, you know, for the audio book. And so I would always answer that question. I would name one of the books or I just name one of my perennial favorites like, oh, Man's Search for Meaning, you know. And only now I'm sort of getting comfortable with the idea of saying out loud, I don't read books and not because I don't like them. It's because I struggle to. The good news is I learned how to learn without them. I wish I could read because there's so much good stuff in them and I know that they go into a level of depth that I really want to understand. But there you go. And I think that goes to the honesty thing. You know, I'm realizing that me trying to answer the question and avoid embarrassment is valuable for people who like to read books. But for the people who struggle to read books, I just made them feel worse, you know? And somebody pointed that out to me. It's like every time I lied about, I never lied. They said, what books are you reading? I said, well, this is on my bedside table. Or I believe this book is important. Or I just picked up this new book, which would all be true. I just didn't read them. That there's a group of people who also struggle to read for whatever dyslexia or ADD or whatever it is. And I'm living proof that you can do okay without it. Now that doesn't mean you can't learn, but you've got to find the hack. There's a couple books I finished. I finished... I finished The Da Vinci Code. It's so good. And you know why? Because it's written with really, really, really short chapters. Like three pages. I'm the person who always looks pages ahead to see how much I have to go. And if it's like 50 pages, I'm like, ugh. How does that change how you write though? If you're not a reader yourself. It's ironic that I ended up writing books. Writing is different because it's really fun when I'm editing because if I'm boring myself, I just cut that whole section. And so the books have my sense of humor in them. There's little jokes in there because it makes me giggle. And I write about the things that I think are really interesting. I tell the stories that make me laugh. And I can make myself cry with some of those stories in the book. And I can give myself goosebumps with some of the stories in that book. And if I'm doing it for myself, it's probably working for others too. But I do love ideas. And I love... dissecting ideas and understanding ideas. And I really love understanding why things work. I am a little kid at heart. I want to know why. Not as a noun, as I popularized it with Start With Why, but as a question. Why is it that way? I love that question. It is a little kid question. And for some reason as adults we stop asking and start just blindly accepting. And that doesn't mean I have to be rebellious in the question. It's not an accusation. Like why are you doing it that way? It's genuine curiosity. Why does it work that way? And I love that. And when I discover things that are illuminating to me and I'm able to explain them to my friends, my friends can understand these things, and the joy I see in people's faces when I challenge their perspective, then the fun is to share it. Well, I'm going to give you the gift back of brilliance. The reason why I think I do use the word brilliance is because You meet people sometimes that have one of the three things. I believe you used the word genius. Oh, did I use genius? You meet people sometimes you have like one of the, what I consider to be the Holy Trinity of like affecting changes as a, as an orator. Sometimes they have wisdom. Sometimes they're like good storytellers. And then sometimes they have the delivery. But you rarely meet people that have all three. Your delivery in terms of when you deliver ideas, the way you can like punctuate sentences and the tone of it keeps people incredibly engaged. And I think you gave me... the root cause of that when you said you had ADHD and you're a bad reader because you find it hard to hold, you find it hard for other things to hold your attention. So you're very good at holding the attention of someone else listening. And then the circuitous way in which you deliver a point as well makes it incredibly engaging from a storytelling perspective. And then the wisdom or the simple idea that underpins it that we can understand. Because I've sat here before, and honestly, we've deleted podcasts because someone comes in, they're a genius mathematician. But when you ask them to make that complex math idea, and resonant in my own life. It's impossible. We deleted the episode because they're too smart to simplify. For sure. But you're able to do that. That's why your books are so important and that's why all the content you put out online and on your YouTube channels and Instagram is so necessary. We have a closing tradition on this podcast where... The last guest asks a question for the next guest. Oh, cool. So they wrote it in the story. They don't know who they're writing it for. I love that. And when you write your question, you also won't know who you're writing it for. But it's our way of all the guests talking to each other. Oh, that's great. In a long linear sequence. Do I get to know who's asking? You don't. I don't. Okay. What was the happiest moment of your life so far? The happiest? I literally can't answer the question. It's for me, it's My happiness doesn't exist in the past. I've done many things that made me happy, but I'm much more interested in what's going to happen next. I'm probably better at answering the question, what's the happiest thing you're going to do? I'm actually drawing a blank. What is the happiest thing you're going to do? You walked into that one, didn't you? The happiest thing I'm going to do is... actually solve some of the problems or at least contribute to the solution of some of those problems that we talked about. I will be very happy when I can contribute to police reform in this country. I will be very happy when I can figure out better systems to help reinvent what modern business looks like and reject everything that Jack Welch built and disrupt society and the way that we build companies now, I will be very happy to demonstrate a momentum towards an entirely different direction. I will be very happy if all of the sum of my work makes it feel like I have moved the needle somewhat closer, though not final, towards that vision I talked about of an inspired, safe and fulfilled world. Ironically those sound like infinite games, many of them. Yeah, I don't believe, I mean all of the things that will make me happy will be incomplete. I don't expect them to be complete. What will bring me joy? Let me rephrase the question for myself, which is how will you know you lived a life worth living? It's kind of the same question, right? And the answer will be is because other people will pick up where I left off and continue without me. That I was clear enough, my cause was compelling enough and the tools that I left were sharp enough that others figured out how to not only use them but make them better and reinvent new ones. I will have lived a life worth living if I can look back and say it will keep going without me because it doesn't need me. And that's the goal. Simon, thank you. It's a huge honor and a pleasure and it It's very clear why you were probably the most requested guest on this, this podcast, um, from our, from our viewers. And you've definitely given much more than, um, I could have ever hoped for in terms of your generosity and wisdom to me, but also to our listeners in this conversation. So thank you so much for your generosity, Simon. Thank you. It's, it's been a joy. Um, And you, it's one of the best podcasts I've ever done. I mean, you are so engaging and driven. Your cause comes out clear, which is you are so driven by the truth. You are so compelled by the truth that anybody sitting here really wants to offer only truth. Um, uh, and, uh, it's a cause worth fighting for. Thank you. I will accept the gift. We are all looking for ways to live a little bit more sustainably and to make more conscious choices in our day-to-day routines. So when a brand like My Energy, who I've spoken about before, offered to sponsor this podcast, I felt like, and I knew deep down inside, that I had to help them share their mission to create an even greener world. It feels like there's not much more fulfilling than that. And their products provide an easy and cost-effective way to make a sustainable switch in your life. And they've got some existing new products coming out that I can't wait to use myself. And I'll let you know as I use those products how I get on. So if you're a My Energy customer at the moment, let me know your favorite products down below in the comment section. And if you haven't checked them out yet, go to myenergy.com and find out a lot more about who they are and what they're doing. If you're one of those people that wants to make a sustainable switch... myenergy.com is the place for you."</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">0</span>, <span class="hljs-number">10.18</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"We don't teach leaders how to have uncomfortable conversations. We don't teach students how to have uncomfortable conversations. You tell me which is going to be more valuable for the rest of your life. How to have a difficult conversation or trigonometry?"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">9.8</span>, <span class="hljs-number">32.52</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Described as a visionary thinker with a rare intellect. Multiple time best-selling author. Scientific. Every single one of us knows what we do. Some of us know how we do it. But very, very few of us can clearly articulate why we do what we do. And I think one of the reasons most of us don't know who we are is because we're making decisions that are inconsistent with that true cause, with that why. There's a great irony in all of this."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">32.92</span>, <span class="hljs-number">58.52</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"I had what a lot of people would be considered a good life and yet didn't want to wake up and go to work anymore. Why? We cannot do this thing called career or life alone. We're just not that smart. We're not that strong. We're just not that good. For anyone who wants to be a better version of themselves, purpose comes from... It's one of the best podcasts I've ever done."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">59.36</span>, <span class="hljs-number">77.96</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"So without further ado, I'm Stephen Bartlett, and this is the Diary of a CEO USA edition. I hope nobody's listening, but if you are, then please keep this to yourself. Simon."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">79.6</span>, <span class="hljs-number">107.84</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"My introduction to you was this book, Start With Why, and it hung on the walls of some of my offices around the world for a long time. And then my employees would come in after reading the book and evangelize about it. And it would come up in meetings and in discussions and in"</span>
    }
    .........
  ]
}
</code></pre>
<p>Too large for this blog, view full output here: <a target="_blank" href="https://gist.github.com/yoeven/a2c1c6eae388e34c350ffe1f407f8af5">https://gist.github.com/yoeven/a2c1c6eae388e34c350ffe1f407f8af5</a></p>
<p>OpenAI doesn’t support large files above 25 MB or audio durations above 25 minutes. JigsawStack transcribe a 32 MB file that’s over 1hr 35mins long under 30 seconds at high accuracy with a sentence by sentence timestamp breakdown.</p>
<h2 id="heading-performance-amp-realtime-speed">Performance &amp; Realtime Speed</h2>
<h3 id="heading-5-seconds-short-audio-example">5 seconds Short Audio Example</h3>
<p>Same audio file we used at the start for the timestamp example.</p>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/preview/stt-examples/stt_very_short_audio_sample_2.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3ByZXZpZXcvc3R0LWV4YW1wbGVzL3N0dF92ZXJ5X3Nob3J0X2F1ZGlvX3NhbXBsZV8yLm1wMyIsImlhdCI6MTc0MjUzOTkwOCwiZXhwIjoxNzc0MDc1OTA4fQ.<span class="hljs-number">7</span>Ru6dD-<span class="hljs-number">3</span>iaFOox2sqQgzmZH5pAs_RJnH3RfL00yGHqE
</code></pre>
<p><strong>OpenAI and JigsawStack Results (Lower is better)</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742546153966/59197eac-887c-47ff-83c2-2c503d7a5bd5.png" alt class="image--center mx-auto" /></p>
<p>We ran 3 runs on the same audio file, initially on the first run, OpenAI was close to JigsawStack’s performance but still slower by a 300ms. By the second and third run, OpenAI’s model slowed down significantly taking almost double the time.</p>
<p>Having a great model is not enough, having the right infrastructure set up to run it at scale is equally as important. This is why we train our models specific to the infra we’re building on.</p>
<h3 id="heading-3-seconds-short-audio-example">3 seconds Short Audio Example</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/planet-of-the-apes-oh-no.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3BsYW5ldC1vZi10aGUtYXBlcy1vaC1uby5tcDMiLCJpYXQiOjE3NDI1NDY0NDAsImV4cCI6MzE1NTMxMTAxMDQ0MH0.<span class="hljs-number">1</span>X7PkGEevP2BBgnyvIqo_lQpm3-WA9VOXLx6HxtzTmk
</code></pre>
<p><strong>OpenAI and JigsawStack Results (Lower is better)</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742546521179/0d187a28-7ec2-4727-a8e3-a99db171354a.png" alt class="image--center mx-auto" /></p>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Oh no..."</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Oh no! Oh no!"</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0</span>,
        <span class="hljs-number">2</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Oh no!"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">2.72</span>,
        <span class="hljs-number">3.72</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Oh no!"</span>
    }
  ]
}
</code></pre>
<p>Once again we see JigsawStack outperforming OpenAI’s latest &amp; best speech-to-text model with double the performance. You can also see that OpenAI’s model wrongly transcribed the audio with only one <code>oh no</code> but there was two.</p>
<h3 id="heading-4-minutes-audio-timestamp-1">4 minutes Audio Timestamp</h3>
<p>Same audio file we used at the start for the timestamp example.</p>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/Stevejobs.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L1N0ZXZlam9icy5tcDMiLCJpYXQiOjE3NDI1NDI0OTUsImV4cCI6MzE1NTMxMTAwNjQ5NX0.iRf2231k11dHVYv0GsUf3zQlSFAuMRV-BqmTtVU0m-<span class="hljs-number">0</span>
</code></pre>
<p><strong>OpenAI and JigsawStack Results (Lower is better)</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742546950395/9b26083b-30dc-49d0-8e4d-ce89b611a1a8.png" alt class="image--center mx-auto" /></p>
<p>JigsawStack outperforms OpenAI even in longer audio by 2.4x faster performance while being more accurate!</p>
<h2 id="heading-multilingual-amp-translation">Multilingual &amp; Translation</h2>
<h3 id="heading-hindi-audio-transcribe-example">Hindi Audio Transcribe Example</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/hindi-audio.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L2hpbmRpLWF1ZGlvLm1wMyIsImlhdCI6MTc0MjU0Nzk1MCwiZXhwIjozMTUzNjE3MTEwMTE5NTB9.BFpKUO3A84Nb-kAt5dlygpJTRozDumIfI7BxhQYNXxc
</code></pre>
<p>We’ll add a language config on both OpenAI’s and JigsawStack’s SDKs to let it know the audio is in Hindi. It should look something like this.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> jigsawResp = <span class="hljs-keyword">await</span> jigsaw.audio.speech_to_text({
  url: testAudioURL,
  language: <span class="hljs-string">"hi"</span>,
});

<span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> openai.audio.transcriptions.create({
  file: fs.createReadStream(<span class="hljs-string">"test-audio.mp3"</span>),
  model: <span class="hljs-string">"gpt-4o-transcribe"</span>,
  response_format: <span class="hljs-string">"json"</span>,
  language: <span class="hljs-string">"hi"</span>,
});
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"तारीक पक्की कर लें? हम तो कह रहा है इसी तीस हो कर लीजी. गज़ब. तो तीस ठीक है, फाइनल. कैसे कैसे ठीक है? मुझ ठाके कह दिया तीस ठीक है. अच्छा, तीस ठीक है, मुझ जुकाके बोल दिया, ठीक है? बस आज की रात है हमारे पास सितली. कल तो तुम हमारी धरंपत्ति बन जाओगी न? चले, हलदी लगवाईये बैठ के. मैं बोलूं फिर से इसमें लग गई आप? आज हलदी की रसंब है. हलदी हो तो गई, अब क्या मरीनेट कर दोगी? ममी सबका टाइम नहीं, आठ गंटे में बारात है, चलो. आज उनन्तीस है, कल तीस है, कल की है बारात. चले, हलदी लगवाईये बैठ के. तारीक चाय आज? आज उनन्तीस है आज, आज हलदी की रसंब है. फिर से हलदी हो रही है, फिर से. उनन्तीस की रात को सोते हैं, और जब सुबा उड़ते हैं, तो वापस उनन्तीस होती है. यह सब बखयाचिस्सेंग्या हैं, वो अपनी मेंधी छोड़के? अब मैंधी है, ऐसा कौन सा टक्टी करी थी, जो आदे में छोड़के आ गई? ची!"</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"तारीक पक्की कर लें हम तो कर रहे हैं इसी टीस वो कर ली गज़ब तो टीस ठीक है फाइनल ऐसे कैसे ठीक है ? मुँ उठा के कह दिया टीस ठीक है अच्छा ? टीस ठीक है ? मुँ उठा के बोल दिया ठीक है ? बस आज की रात है हमारे बास तो क्लियर कल तो तुम हमारी धर्मपत्ती बन जाओगी न अरे अरे अरे अरे चलिए हल्दी लगवाइए बैठके चोर बाजारी दोने मैं ममी फिर से इस सम्मे लगगी है आज हल्दी की रसम है हल्दी हो तो गई अब क्या मरिनेट कर दोगी ममी सबका टाइम नहीं है आठ गंटे में बारात है चलो आज उनतेस है कल तीस है कल की है बारात चलिए हल्दी लगवाइए बैठके तारी तारी क्या है आज तो उनतेस है आज हल्दी की रसम है हल्दी पिर से हल्दी हो रही है घट नहीं थी ये घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट त उनक्तिस की रात को सोते हैं पर जब सुबह उठते हैं तो वापस उनक्तिस होती है ये सब बकैती सुनने आये हैं हम अपनी मेहंदी छोड़के वे मेहंदी ही है ऐसा कौन सा टक्टी करी थी जो आदे में छोड़के आ गई छी"</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0.28</span>,
        <span class="hljs-number">30.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"तारीक पक्की कर लें हम तो कर रहे हैं इसी टीस वो कर ली गज़ब तो टीस ठीक है फाइनल ऐसे कैसे ठीक है ? मुँ उठा के कह दिया टीस ठीक है अच्छा ? टीस ठीक है ? मुँ उठा के बोल दिया ठीक है ? बस आज की रात है हमारे बास तो क्लियर कल तो तुम हमारी धर्मपत्ती बन जाओगी न अरे अरे अरे अरे"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">32.34</span>,
        <span class="hljs-number">64.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"चलिए हल्दी लगवाइए बैठके चोर बाजारी दोने मैं ममी फिर से इस सम्मे लगगी है आज हल्दी की रसम है हल्दी हो तो गई अब क्या मरिनेट कर दोगी ममी सबका टाइम नहीं है आठ गंटे में बारात है चलो आज उनतेस है कल तीस है कल की है बारात चलिए हल्दी लगवाइए बैठके तारी तारी क्या है आज तो उनतेस है आज हल्दी की रसम है हल्दी पिर से हल्दी हो रही है घट नहीं थी ये घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट ते घट त"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">64.96</span>,
        <span class="hljs-number">82.14</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"उनक्तिस की रात को सोते हैं पर जब सुबह उठते हैं तो वापस उनक्तिस होती है ये सब बकैती सुनने आये हैं हम अपनी मेहंदी छोड़के वे मेहंदी ही है ऐसा कौन सा टक्टी करी थी जो आदे में छोड़के आ गई छी"</span>
    }
  ]
}
</code></pre>
<p>OpenAI had an higher accuracy for native Hindi transcription compared to JigsawStack which was a close second.</p>
<h3 id="heading-hindi-audio-translate-example">Hindi Audio Translate Example</h3>
<p>We’ll use the same Hindi audio sample</p>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/hindi-audio.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L2hpbmRpLWF1ZGlvLm1wMyIsImlhdCI6MTc0MjU0Nzk1MCwiZXhwIjozMTUzNjE3MTEwMTE5NTB9.BFpKUO3A84Nb-kAt5dlygpJTRozDumIfI7BxhQYNXxc
</code></pre>
<p>We’ll add a language config on both OpenAI’s and JigsawStack’s SDKs to let it know to translate the audio to English. It should look something like this:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> jigsawResp = <span class="hljs-keyword">await</span> jigsaw.audio.speech_to_text({
  url: testAudioURL,
  language: <span class="hljs-string">"en"</span>,
  translate: <span class="hljs-literal">true</span>,
});

<span class="hljs-comment">// OpenAI doesn't support translation hence no change</span>
</code></pre>
<p><strong>OpenAI’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"तारीक पक्की कर लें? हम तो कहा रहा है इसी 30 हो कर लिजिये. गजब! तो 30 ठीक है, फाइनल. कैसे कैसे ठीक है? मूँ ठाके कह दिया 30 ठीक है? अच्छा, 30 ठीक है. मूँ जखा के बोल दिया, ठीक है? बस आज की रात है हमारे पास, सितली. कल तो तुम हमारी धर्मपत्ती बन जाओगी न? चलिए, हलदी लगवाईए बैट के. फिर से हलदी, फिर से सब में लग गई आप? आज हलदी की रसम है. हलदी हो तो गई, अप क्या मरीनियेट कर दोगी? ममी सबका टाइम नहीं, आठ गंडे में बरात है, चलो. आज उनत्तीस है, कल तीस है, कल की है बरात. चलिए, हलदी लगवाईए बैट के. तारीक क्या है आज? हतो उनत्तीस है आज, आज हलदी की रसम है. फिर से हलदी हो रही है, फिर से. घटना की थी ये भी घटना, घटते घटते लो ये घट जो. उनत्तीस की रात को सोते हैं, पर जब सुबह उठते हैं, तो वापस उनत्तीस होती है. ये सब बकायची सिन्याय हैं, हम अपनी मेहन्दी छोड के? वो मेहन्दी ही है, ऐसा कौन सा टक्टी करी थी जो आदे में छोड के आ गई? छी!"</span>
}
</code></pre>
<p><strong>JigsawStack’s Transcription</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Shall we make a bet? I'm saying let's do it. Amazing! So 30 is fine. Final. How is this fine? I said it with my mouth open. 30 is fine. Really? 30 is fine? I said it with my mouth open. Okay? We only have tonight, Tikli. Tomorrow you'll become our religious leader. Hey, hey, hey! Come on, get the turmeric done. Mom, you're doing it again. Today is the turmeric ritual. The turmeric is done. Will you marinate it? Mom, it's not everyone's time. The wedding is in 8 hours. Today is the 29th. Tomorrow is the 30th. Tomorrow is the wedding. Come on, get the turmeric done. What date is today? Today is the 29th. Today is the turmeric ritual. Turmeric! - Oh, God! - It's turmeric again. \"It was not a coincidence.\" \"It was a coincidence.\" We sleep at night and wake up in the morning and then we sleep again. Have we come here to hear all this nonsense? We left our henna. It's henna. What kind of a woman left it in the middle of the night? Oh no!"</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">0.28</span>,
        <span class="hljs-number">30.4</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Shall we make a bet? I'm saying let's do it. Amazing! So 30 is fine. Final. How is this fine? I said it with my mouth open. 30 is fine. Really? 30 is fine? I said it with my mouth open. Okay? We only have tonight, Tikli. Tomorrow you'll become our religious leader. Hey, hey, hey!"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">32.34</span>,
        <span class="hljs-number">64.36</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Come on, get the turmeric done. Mom, you're doing it again. Today is the turmeric ritual. The turmeric is done. Will you marinate it? Mom, it's not everyone's time. The wedding is in 8 hours. Today is the 29th. Tomorrow is the 30th. Tomorrow is the wedding. Come on, get the turmeric done. What date is today? Today is the 29th. Today is the turmeric ritual. Turmeric! - Oh, God! - It's turmeric again. \"It was not a coincidence.\" \"It was a coincidence.\""</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [
        <span class="hljs-number">64.96</span>,
        <span class="hljs-number">82.14</span>
      ],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">"We sleep at night and wake up in the morning and then we sleep again. Have we come here to hear all this nonsense? We left our henna. It's henna. What kind of a woman left it in the middle of the night? Oh no!"</span>
    }
  ]
}
</code></pre>
<p>OpenAI’s latest model has no support for translation or prompting which prevents the translation setting from working. On the other hand, JigsawStack natively support translation into most languages. You can find all supported languages on our <a target="_blank" href="https://jigsawstack.com/docs/additional-resources/languages">docs here</a>.</p>
<h2 id="heading-accuracy-word-error-rate-wer">Accuracy Word Error Rate (WER)</h2>
<h3 id="heading-noisy-audio-and-background-voices">Noisy Audio and background voices</h3>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/noisy-audio.mp3?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L25vaXN5LWF1ZGlvLm1wMyIsImlhdCI6MTc0MjU1MDEzMSwiZXhwIjozMTUzNjE3MTEwMTQxMzF9.<span class="hljs-number">9</span>r4aIh1ZiTeR8xa6yWNS5UO0NqaE0RSJpyfn1M_pvyc
</code></pre>
<p><strong>OpenAI’s Result</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Hey, you're wearing the target speech hearing system. You can click the button on the right and then look at me for a few seconds. Now when you're looking at me, the system will register my voice and enroll it. Now you can take a walk. So now the system has an enrollment of my voice, it can focus on only my voice while ignoring all the interfering sounds in the environment. So we introduced this system called Sequence in Use, where suppose we're in a scenario like this, where you're trying to hear my voice when someone else is trying to speak, then you can just look at me for a few seconds, get some noisy example of my voice, and then you can separate out or filter out my voice only from everyone else's."</span>
}
</code></pre>
<p><strong>JigsawStack’s Result</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You are wearing the target speech steering system. You can click the button on the right and then look at me for a few seconds. Now when you are looking at me, the system will register my voice and enroll it. Now you can take a walk. So now the system has an enrollment of my voice, it can extract, it can focus on only my voice while ignoring all the interfering sounds in the environment. So we introduced this system called click on CD, where we, like suppose we're in a scenario like this where you're trying to hear my voice when someone else is trying to speak, then You can just look at my, you can look at me for a few seconds, get some noisy example of my voice, and then you can separate out or filter out my voice only from everybody else's."</span>,
  <span class="hljs-attr">"chunks"</span>: [
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">0</span>, <span class="hljs-number">13.56</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You are wearing the target speech steering system."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">13.56</span>, <span class="hljs-number">17.8</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You can click the button on the right and then look at me for a few seconds."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">17.8</span>, <span class="hljs-number">22.8</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Now when you are looking at me, the system will register my voice and enroll it."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">22.8</span>, <span class="hljs-number">26.76</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" Now you can take a walk."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">26.76</span>, <span class="hljs-number">33.06</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So now the system has an enrollment of my voice, it can extract, it can focus on only"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">33.06</span>, <span class="hljs-number">38</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" my voice while ignoring all the interfering sounds in the environment."</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">38</span>, <span class="hljs-number">46.58</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" So we introduced this system called click on CD, where we, like suppose we're in a scenario"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">46.58</span>, <span class="hljs-number">52.6</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" like this where you're trying to hear my voice when someone else is trying to speak, then"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">52.6</span>, <span class="hljs-number">56.08</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" You can just look at my, you can look at me for a few seconds,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">56.08</span>, <span class="hljs-number">58.92</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" get some noisy example of my voice,"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">58.92</span>, <span class="hljs-number">62.98</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" and then you can separate out or filter out my voice only"</span>
    },
    {
      <span class="hljs-attr">"timestamp"</span>: [<span class="hljs-number">62.98</span>, <span class="hljs-number">64.34</span>],
      <span class="hljs-attr">"text"</span>: <span class="hljs-string">" from everybody else's."</span>
    }
  ]
}
</code></pre>
<p>While OpenAI claimed to have a lower WER than the rest, in this example of a noisy example, JigsawStack got 100% accurate results while OpenAI has missing and inaccurate transcription making it only 94% accurate in this example.</p>
<p><strong>JigsawStack Text (97% accurate)</strong></p>
<p><em>You are wearing the target speech steering system. You can click the button on the right and then look at me for a few seconds. Now when you are looking at me, the system will register my voice and enroll it. Now you can take a walk. So now the system has an enrollment of my voice,</em> <strong><em>it can extract*</em></strong>, it can focus on only my voice while ignoring all the interfering sounds in the environment. So we introduced this system called <mark>click on CD</mark>, where<em> **</em>we<strong><em>*,</em> *</strong>like<em>** </em>suppose we're in a scenario like this where you're trying to hear my voice when someone else is trying to speak, then You can just look at my, you can look at me for a few seconds, get some noisy example of my voice, and then you can separate out or filter out my voice only from everybody else's.*</p>
<ul>
<li>Guessed the wrong name “click on CD” when it’s suppose to be “Look Once to Hear”</li>
</ul>
<p><strong>OpenAI’s text (93% accurate)</strong></p>
<p><em>Hey, you're wearing the target speech hearing system. You can click the button on the right and then look at me for a few seconds. Now when you're looking at me, the system will register my voice and enroll it. Now you can take a walk. So now the system has an enrollment of my voice, it can focus on only my voice while ignoring all the interfering sounds in the environment. So we introduced this system called <mark>Sequence in Use</mark>, where suppose we're in a scenario like this, where you're trying to hear my voice when someone else is trying to speak, then you can just look at me for a few seconds, get some noisy example of my voice, and then you can separate out or filter out my voice only from everyone else's.</em></p>
<ul>
<li><p>“it can extract” is missing from OpenAI’s text</p>
</li>
<li><p>Guessed the wrong name “Sequence” when it’s suppose to be “Look Once to Hear”</p>
</li>
<li><p>missing “we” and “like”</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>We’re huge fans of the work being done at OpenAI, especially the open source work! This article wouldn’t be possible without Whisper 3. The base model we optimized and trained to get the output you see here!</p>
<p>In all the above tests we used <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/speech-to-text">JigsawStack’s transcription model</a> and <a target="_blank" href="https://platform.openai.com/docs/guides/speech-to-text?lang=javascript">OpenAI’s latest transcription model</a>. You can run all tests yourself using these APIs and the script provided at the start of this article.</p>
<p>Overall JigsawStack outperformance OpenAI’s best in class speech to text model, in performance, accuracy, features and more!</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>OpenAI gpt-4o-transcribe</strong></td><td><strong>JigsawStack Speech-to-text</strong></td></tr>
</thead>
<tbody>
<tr>
<td>⏳ Timestamps</td><td>No support was found on their docs. ❌</td><td>Sentence level timestamp by default and speaker level timestamp available. ✅</td></tr>
<tr>
<td>💬 Speaker recognition</td><td>No support was found on their docs. ❌</td><td>Speaker recognition through diarization is available with timestamp support per speaker. Up to 50 speakers supported. ✅</td></tr>
<tr>
<td>⛰️ Large file &amp; long audio support</td><td>Supported up to 25 MB file size and 25 mins of audio per request. ❌</td><td>Supports up to 100 MB file size and 4 hours of audio per request. ✅</td></tr>
<tr>
<td>⚡ Performance</td><td>Almost ~2.4x slower than JigsawStack ❌</td><td>~2.4x faster transcription on all audio lengths while providing more data like timestamps ✅</td></tr>
<tr>
<td>🌍 Multilingual support</td><td>Great support for transcribing most popular languages ✅</td><td>JigsawStack came in close second for Native multilingual transcription ◐✅</td></tr>
<tr>
<td>🔄 Translation</td><td>No support was found on their docs ❌</td><td>Built it translation support with over 100+ languages ✅</td></tr>
<tr>
<td>📝 Accuracy</td><td>No exact WER data but got a 93% accurate transcription on our real-world test. ❌</td><td>Got 97% accurate transcription on real-world test. ✅</td></tr>
<tr>
<td>👯‍♀️ Team Size</td><td>~5,300 people working at OpenAI</td><td>3 people working at JigsawStack</td></tr>
</tbody>
</table>
</div><h2 id="heading-how-to-get-started-with-jigsawstack-speech-to-text">How to get started with JigsawStack Speech-to-Text?</h2>
<p>Our goal at JigsawStack is to build small focused models that are specialized at doing one thing very well while making it accessible with great DX!</p>
<p><strong>Typescript/Javascript example</strong></p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsawstack = JigsawStack({
  apiKey: <span class="hljs-string">"your-api-key"</span>,
});

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> jigsawstack.audio.speech_to_text({
  url: <span class="hljs-string">"https://jigsawstack.com/preview/stt-example.wav"</span>,
});
</code></pre>
<p><strong>Python</strong></p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> jigsawstack <span class="hljs-keyword">import</span> JigsawStack

jigsawstack = JigsawStack(api_key=<span class="hljs-string">"your-api-key"</span>)

result = jigsawstack.audio.speech_to_text({
  <span class="hljs-string">"url"</span>: <span class="hljs-string">"https://jigsawstack.com/preview/stt-example.wav"</span>
})
</code></pre>
<h2 id="heading-what-about-text-to-speech-tts">What about Text-to-Speech (TTS)?</h2>
<p>We want to go deep dive into TTS so we’re writing a separate article breaking down the comparison. You can <a target="_blank" href="https://jigsawstack.com/text-to-speech">try it out here</a> in the mean time. Here’s a small sneak peak on how it sounds 👇</p>
<pre><code class="lang-basic">AUDIO: https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/tts-example.wav?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L3R0cy1leGFtcGxlLndhdiIsImlhdCI6MTc0MjU1MzAyNiwiZXhwIjozMTUzNjE3MTEwMTcwMjZ9.d9jCacB23ykhBG_iLmE06gM2_AoXrfILxn4ckfkWpRg
</code></pre>
<p>Join us on <a target="_blank" href="https://discord.gg/dj8fMBpnqd">Discord</a> or follow us on <a target="_blank" href="https://x.com/jigsawstack">X</a> to keep up to date with our future launches and the TTS comparison</p>
]]></content:encoded></item><item><title><![CDATA[JigsawStack MCP Servers: Bridging LLMs with Context and Tools]]></title><description><![CDATA[Large Language Models (LLMs) are incredibly powerful, but they don't know everything out of the box. They rely on the context we provide, which can be limited by prompt sizes or outdated training data. Imagine if your AI assistant could plug into ext...]]></description><link>https://blogdata.jigsawstack.com/jigsawstack-mcp-servers</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/jigsawstack-mcp-servers</guid><category><![CDATA[mcp server]]></category><category><![CDATA[Model Context Protocol]]></category><category><![CDATA[#anthropic]]></category><category><![CDATA[jigsawstack]]></category><dc:creator><![CDATA[Harsha V Khurdula]]></dc:creator><pubDate>Fri, 14 Mar 2025 21:14:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1741988755662/3132d4fa-4493-44b8-8d73-0ac85e649d95.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Large Language Models (LLMs) are incredibly powerful, but they don't know everything out of the box. They rely on the context we provide, which can be limited by prompt sizes or outdated training data. Imagine if your AI assistant could plug into external knowledge, remember information between conversations, or perform tasks like web browsing on command – all from a standard interface. This is where <strong>Model Context Protocol (MCP)</strong> comes in.</p>
<p>We'll explore what MCP is (in simple terms), how it helps manage context for LLMs, and how you can use it. We'll also introduce <strong>JigsawStack</strong>, a developer-friendly AI platform with a range of APIs, and specifically dive into our very own <strong>JigsawStack MCP server</strong> – an open-source server that brings our end-to-end capabilities to your LLM via MCP. By the end, you'll see why this is exciting for developers looking to give their AI applications better memory, understanding, and efficiency.</p>
<h2 id="heading-what-is-model-context-protocol-mcp">What is Model Context Protocol (MCP)?</h2>
<p><strong>Model Context Protocol (MCP)</strong> is an open standard that allows AI models to connect to external data sources and tools consistently, acting as a universal adapter for AI applications. It defines a client-server architecture where an AI assistant (client) communicates with MCP servers that provide access to resources or perform specific actions.</p>
<p>Without MCP, developers must build separate integrations for each tool or data source, which is tedious and doesn't scale well. MCP solves this by providing a universal protocol for context, making integrations easier to manage. An AI agent can request information or actions from an MCP server, and the server responds in a standardized format, allowing the model to maintain a richer conversation context.</p>
<h2 id="heading-how-do-mcps-help-llms">How do MCPs Help LLMs?</h2>
<p>Using MCP involves running MCP servers and an MCP-compatible client. This setup allows AI models to fetch information or perform tasks on demand, extending their memory and contextual understanding. MCP servers can serve as external memory banks or knowledge bases, enabling models to retrieve details as needed. They also allow AI to connect to live data sources, ensuring up-to-date and context-rich responses.</p>
<p>So, how does this help an LLM in concrete terms? Here are some key benefits of MCP for LLMs:</p>
<ul>
<li><p><strong>Better “memory” and extended context:</strong> MCP servers can serve as external memory banks or knowledge bases for an AI. Instead of the model being limited to its fixed context window, it can retrieve details on demand.</p>
</li>
<li><p><strong>Richer, up-to-date contextual understanding:</strong> Because MCP lets an AI connect to live or dynamic data sources, the model’s knowledge stays current and relevant. Even advanced language models are often trained on data that might be incomplete or outdated. By connecting them to live data sources (like documents, databases, or APIs), MCP “helps ensure the model’s answers are up-to-date, context-rich, and domain-specific.”</p>
</li>
<li><p><strong>Efficiency and modularity:</strong> MCP encourages a modular design where each server is a focused integration. This makes the system more efficient in multiple ways. For one, the LLM doesn't have to be fed huge prompts containing all possibly relevant info – it can ask a server for a specific piece of data only when needed, saving token space and compute. Additionally, from a developer standpoint, it's far more efficient to reuse standardized MCP connectors than to write custom glue code for each tool.</p>
</li>
</ul>
<p>In short, MCP can be used by running compatible servers and connecting your LLM to them (for example, Anthropic's Claude has built-in support for MCP servers, and there are libraries for other frameworks). The payoff is that your AI assistant can <strong>augment its limited built-in knowledge with external intelligence</strong>, remember things longer, and operate more efficiently. As developers, we get a plug-and-play way to add new capabilities to our AI apps without constantly reinventing the wheel.</p>
<h2 id="heading-what-is-jigsawstack">What is JigsawStack?</h2>
<p><strong>We at JigsawStack</strong> serve an AI platform that provides a suite of small, specialized models through easy-to-use APIs. "<em>AI infrastructure for your tech stack</em> – a suite of custom small models plugged into the right infrastructure to power your AI applications."​</p>
<p>Essentially, we aim to be the <strong>missing pieces of the puzzle</strong> for AI developers – you can pick the functionality you need and easily drop it into your app, rather than building everything from scratch.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// First, install the SDK: npm install jigsawstack</span>
<span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-comment">// Initialize with your API key</span>
<span class="hljs-keyword">const</span> jigsaw = JigsawStack({ <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"YOUR_JIGSAWSTACK_API_KEY"</span> });

<span class="hljs-comment">// Example usages of various APIs:</span>
<span class="hljs-keyword">const</span> searchResults = <span class="hljs-keyword">await</span> jigsaw.web.search({ 
  <span class="hljs-attr">query</span>: <span class="hljs-string">"What is the weather in San Francisco?"</span> 
});

<span class="hljs-keyword">const</span> structuredOCR = <span class="hljs-keyword">await</span> jigsaw.vision.vocr({ 
  <span class="hljs-attr">url</span>: <span class="hljs-string">"https://jigsawstack.com/preview/vocr-example.jpg"</span>,
  <span class="hljs-attr">prompt</span>: [<span class="hljs-string">"total_price"</span>, <span class="hljs-string">"tax"</span>, <span class="hljs-string">"highlighted_item_name"</span>]  <span class="hljs-comment">// fields to extract from image</span>
});

<span class="hljs-keyword">const</span> scrapedData = <span class="hljs-keyword">await</span> jigsaw.web.ai_scrape({ 
  <span class="hljs-attr">url</span>: <span class="hljs-string">"https://news.ycombinator.com/show"</span>, 
  <span class="hljs-attr">element_prompts</span>: [<span class="hljs-string">"post title"</span>, <span class="hljs-string">"post points"</span>]  <span class="hljs-comment">// what elements to extract from the page</span>
});

<span class="hljs-keyword">const</span> audioFile = <span class="hljs-keyword">await</span> jigsaw.audio.text_to_speech({ 
  <span class="hljs-attr">text</span>: <span class="hljs-string">"Hello, world!"</span> 
});

<span class="hljs-keyword">const</span> translatedText = <span class="hljs-keyword">await</span> jigsaw.translate({ 
  <span class="hljs-attr">text</span>: [<span class="hljs-string">"Hey, how are you?"</span>], 
  <span class="hljs-attr">target_language</span>: <span class="hljs-string">"zh"</span>  <span class="hljs-comment">// translate to Chinese</span>
});
</code></pre>
<p>Our tools cover a lot of ground – web, vision, audio, language, etc. The code is quite straightforward: you initialize the client with an API key and call the method for the task you need.</p>
<h2 id="heading-what-is-the-jigsawstack-mcp-server">What is the JigsawStack MCP Server?</h2>
<p>The <strong>JigsawStack MCP server</strong> is an open-source implementation of an MCP server that exposes our AI capabilities to any MCP-compatible AI client. In simpler terms, it's like a bridge between an AI assistant and our APIs. Instead of calling our API services directly in your application code (as shown above), you can run the MCP server and let your LLM call those services through the MCP protocol.</p>
<p>This is incredibly useful if you're building an AI agent that should autonomously decide when to use a tool, the agent can simply invoke the MCP server's tools as needed.</p>
<p>Our MCP server essentially provides a <strong>suite of small, fast models</strong> (the same ones we discussed) to the AI in a standardized way.</p>
<p>The server is built in TypeScript (Node.js) and is available on GitHub (open-sourced) for developers to use: <a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server"><strong>JigsawStack/jigsawstack-mcp-server on GitHub</strong></a>. This means you can self-host it.</p>
<p>So, when you run a particular MCP server, your AI assistant could, for example, call a <code>web_search</code> tool with a query and get back search results, or call a <code>web_scraper</code> tool with a URL and extraction prompt to get structured data, or use a <code>image_generation</code> tool to create an image from a prompt.</p>
<p>Because it's an MCP server, it's not tied to any specific AI model – any MCP-compliant client can connect. For instance, Anthropic’s Claude (via Claude Desktop) can use it, or a developer could use an MCP client library in a custom Python script or another environment to let GPT-4 or other models use these tools.</p>
<p>Take a look at this platform <a target="_blank" href="https://smithery.ai/">smithery.ai</a>, which helps developers find and ship language model extensions compatible with the <a target="_blank" href="https://modelcontextprotocol.io/">Model Context Protocol Specification.</a></p>
<h2 id="heading-how-to-use-jigsawstack-mcp-server">How to use JigsawStack MCP Server?</h2>
<p>Simply put, the JigsawStack MCP Server is an implementation of the Model Context Protocol (MCP) that lets your AI agent call our services—like web search, web scraping, and image generation—without directly embedding API calls in your code.</p>
<p>Our server is built with Node.js and Express.js, and each tool is organized in its directory as a distinct server for modularity. This means you can easily add, update, or remove tools without impacting the overall system.</p>
<p>Below is a quick guide to get you started for AI Web Search:</p>
<h3 id="heading-quick-setup">Quick Setup</h3>
<ol>
<li><p><strong>Clone the Repository:</strong></p>
<pre><code class="lang-bash"> git <span class="hljs-built_in">clone</span> https://github.com/JigsawStack/jigsawstack-mcp-server.git
 <span class="hljs-built_in">cd</span> jigsawstack-mcp-server/ai-web-search
</code></pre>
</li>
<li><p><strong>Install Dependencies:</strong></p>
<pre><code class="lang-bash"> npm install
</code></pre>
<p> <em>(Alternatively, you can use yarn.)</em></p>
</li>
<li><p><strong>Configure Your API Key:</strong></p>
<p> Obtain your <code>JIGSAWSTACK_API_KEY</code> from our <a target="_blank" href="https://jigsawstack.com/dashboard">dashboard</a>, then export it:</p>
<pre><code class="lang-bash"> <span class="hljs-built_in">export</span> JIGSAWSTACK_API_KEY=your_api_key
</code></pre>
</li>
<li><p><strong>Test Your Setup Using A Mock Client Script:</strong></p>
<pre><code class="lang-javascript"> <span class="hljs-comment">// Demo to use ai_web_search, please save this within ai-web-search/</span>
 <span class="hljs-keyword">import</span> { spawn } <span class="hljs-keyword">from</span> <span class="hljs-string">"child_process"</span>;

 <span class="hljs-comment">// we must run the server first</span>
 <span class="hljs-keyword">const</span> serverProc = spawn(<span class="hljs-string">"node"</span>, [<span class="hljs-string">"dist/index.js"</span>]);

 <span class="hljs-keyword">const</span> request = <span class="hljs-built_in">JSON</span>.stringify({
   <span class="hljs-comment">// this is the request we want to send to the server</span>
   <span class="hljs-attr">jsonrpc</span>: <span class="hljs-string">"2.0"</span>,
   <span class="hljs-attr">method</span>: <span class="hljs-string">"tools/call"</span>,
   <span class="hljs-attr">params</span>: {
     <span class="hljs-attr">name</span>: <span class="hljs-string">"ai_web_search"</span>,
     <span class="hljs-attr">arguments</span>: {
       <span class="hljs-attr">query</span>: <span class="hljs-string">"how old is the earth?"</span>,
       <span class="hljs-attr">ai_overview</span>: <span class="hljs-literal">true</span>,
     },
   },
   <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>,
 });

 <span class="hljs-comment">//log the request being sent</span>
 <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Sending request:"</span>, request);

 <span class="hljs-comment">//listen to server's stdout</span>
 serverProc.stdout.on(<span class="hljs-string">"data"</span>, <span class="hljs-function">(<span class="hljs-params">data</span>) =&gt;</span> {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Server Response:"</span>, data.toString());
 });

 <span class="hljs-comment">//send the request to the server:</span>
 serverProc.stdin.write(request + <span class="hljs-string">"\n"</span>);

 <span class="hljs-comment">//listen to server's stderr for errors if any</span>
 serverProc.stderr.on(<span class="hljs-string">"data"</span>, <span class="hljs-function">(<span class="hljs-params">data</span>) =&gt;</span> {
   <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"Server Error:"</span>, data.toString());
 });
</code></pre>
<p> Upon a successful installation, and definition of a mock client script, we would establish a SSE communication as follows:</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741974519490/b2b230c4-6d5f-4b87-9417-b600b1cf3e4d.png" alt class="image--center mx-auto" /></p>
<p> Alternatively, you could use prebuilt providers for integrations with tools like <a target="_blank" href="https://claude.ai/download">Claude Desktop</a> using smithery.ai for <a target="_blank" href="https://smithery.ai/server/@JigsawStack/ai-web-search">JigsawStack MCP server</a> by using:</p>
<pre><code class="lang-bash"> npx -y @smithery/cli@latest install @JigsawStack/ai-web-search --client claude
</code></pre>
<p> Or, even use MCP Inspector, a visual debugger for MCP server. Let us try JigsawStack AI Web Search MCP server:</p>
<pre><code class="lang-bash"> <span class="hljs-built_in">cd</span> jigsawstack-mcp-server/ai-web-search
 npm install
 <span class="hljs-built_in">export</span> JIGSAWSTACK_API_KEY=sk....
 npm run inspector
</code></pre>
<p> Within the UI, continue by clicking on Connect → List Tools → AI Web Search</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741975221465/97f4ba1b-b4b3-4d77-8447-6cb045858eed.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h3 id="heading-whats-inside">What’s Inside?</h3>
<ul>
<li><p><a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server/tree/main/ai-web-scraper"><strong>ai-web-scraper</strong></a><strong>:</strong> Let AI scrape the internet for you.</p>
</li>
<li><p><a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server/tree/main/ai-web-search"><strong>ai-web-search</strong></a><strong>:</strong> Leverage AI to handle complex search queries.</p>
</li>
<li><p><a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server/tree/main/image-generation"><strong>image-generation</strong></a><strong>:</strong> Generate images from prompts, returning a base64 string.</p>
</li>
<li><p><a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server/tree/main/vOCR"><strong>vOCR</strong></a><strong>:</strong> Extract data from any document type in a consistent structure with fine-tuned vLLMs for the highest accuracy</p>
</li>
<li><p><a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server/tree/main/translation"><strong>translation</strong></a><strong>:</strong> With our real time AI Translation, you can translate any text, conversation, or document to any language while maintaining the context, tone, and meaning with AI enabling high accuracy and reliability. We support 180+ language pairs!</p>
</li>
</ul>
<p>This setup empowers your LLM to autonomously decide when to use a tool, providing a standardized, efficient way to tap into our AI capabilities. Whether you're self-hosting for full control or opting for a managed solution through Smithery.ai, our MCP Server makes integration seamless.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Bringing it all together, the <a target="_blank" href="https://github.com/JigsawStack/jigsawstack-mcp-server"><strong>JigsawStack MCP server</strong></a> makes JigsawStack's tools (backed by services) available to your AI through MCP. This means you can have an AI agent that on its own can decide to search the web, scrape a site, or create an image when needed – all by using the MCP server as the go-between. It's open source and accessible: you can run it yourself or quickly install it via smithery.ai, and it works with any MCP-aware client or platform.</p>
<h3 id="heading-why-should-developers-care">Why should developers care?</h3>
<p>If you're building an AI-driven application or agent, using MCP servers like ours can dramatically speed up development and expand functionality. You don't have to reinvent solutions for common tasks; you can leverage a growing ecosystem of MCP servers. JigsawStack MCP server, in particular, gives you a grab-bag of useful skills in one package. It exemplifies how a well-designed MCP server can <strong>boost an AI's usefulness</strong> – from answering more questions (thanks to live search) to automating web tasks and generating creative content.</p>
<p>As MCP gains adoption, we expect to see more servers and tools become available, making AI systems even more extensible. So, if you're excited about building smarter AI assistants or just want to tinker with the latest in AI infrastructure, give our JigsawStack MCP server a try. With a few commands, you'll equip your LLM with a new set of superpowers.</p>
]]></content:encoded></item><item><title><![CDATA[Leveraging DeepSeek R1]]></title><description><![CDATA[In the rapidly evolving AI landscape, model selection and optimization are critical to delivering high-performance solutions. DeepSeek R1 has emerged as a powerful full-scale model that JigsawStack can leverage in novel ways. One particularly promisi...]]></description><link>https://blogdata.jigsawstack.com/fine-tuning-deepseek-r1</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/fine-tuning-deepseek-r1</guid><category><![CDATA[finetuning]]></category><category><![CDATA[llm]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[AI Model Optimization]]></category><category><![CDATA[Deepseek]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Wed, 12 Mar 2025 01:24:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740186116513/ec143c72-d3f4-48c6-9b6b-04be2e57fa01.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the rapidly evolving AI landscape, model selection and optimization are critical to delivering high-performance solutions. DeepSeek R1 has emerged as a powerful full-scale model that JigsawStack can leverage in novel ways. One particularly promising area is synthetic data generation for training AI models, an approach supported by DeepSeek R1’s reinforcement learning advancements, as detailed in their research paper.</p>
<h2 id="heading-understanding-deepseek-r1">Understanding DeepSeek R1</h2>
<p>DeepSeek R1 is a full-scale, general-purpose AI model designed to handle complex reasoning and structured tasks efficiently. Unlike fine-tuned models that excel in niche applications, DeepSeek R1 provides a robust foundation adaptable to diverse domains.</p>
<p>A key advantage of DeepSeek R1 is its support for distilled variants—optimized versions designed for efficient inference and deployment. These distilled models include:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Model Variant</td><td>Base Model</td></tr>
</thead>
<tbody>
<tr>
<td>DeepSeek-R1-Distill-Qwen-1.5B</td><td>Qwen2.5-Math-1.5B</td></tr>
<tr>
<td>DeepSeek-R1-Distill-Qwen-7B</td><td>Qwen2.5-Math-7B</td></tr>
<tr>
<td>DeepSeek-R1-Distill-Llama-8B</td><td>Llama-3.1-8B</td></tr>
<tr>
<td>DeepSeek-R1-Distill-Qwen-14B</td><td>Qwen2.5-14B</td></tr>
<tr>
<td>DeepSeek-R1-Distill-Qwen-32B</td><td>Qwen2.5-32B</td></tr>
<tr>
<td>DeepSeek-R1-Distill-Llama-70B</td><td>Llama-3.3-70B-Instruct</td></tr>
</tbody>
</table>
</div><p>These distilled models provide a trade-off between accuracy and performance, allowing developers to choose a model that best suits their computational constraints.</p>
<h2 id="heading-deepseek-r1-and-jigsawstack-strategic-integration">DeepSeek R1 and JigsawStack: Strategic Integration</h2>
<p>JigsawStack’s focus is on delivering a suite of fast, fine-tuned models that automate complex tasks across various tech stacks. The potential adoption of DeepSeek R1 in place of certain base models presents an opportunity to improve structured reasoning, decision-making, and computational efficiency. However, one of the most compelling use cases may be leveraging DeepSeek R1’s capabilities for synthetic data generation to improve model training and evaluation.</p>
<h3 id="heading-key-advantages-for-developers">Key Advantages for Developers:</h3>
<ul>
<li><p><strong>Synthetic Data Generation</strong>: DeepSeek R1’s ability to generate high-quality reasoning-based data could significantly improve JigsawStack’s fine-tuning datasets. Its reinforcement learning-driven reasoning process could create diverse, realistic examples for training specialized AI models.</p>
</li>
<li><p><strong>Scalability and Adaptability</strong>: With multiple distilled variants available, developers can balance inference speed and performance to meet different use case demands.</p>
</li>
<li><p><strong>Enhanced Fine-Tuning Potential</strong>: JigsawStack can leverage DeepSeek R1’s foundational strengths to build even more specialized AI models tailored for specific developer workflows.</p>
</li>
</ul>
<h2 id="heading-evaluating-the-deepseek-r1-transition">Evaluating the DeepSeek R1 Transition</h2>
<p>While DeepSeek R1 presents exciting opportunities, a structured evaluation is necessary. Key considerations include:</p>
<p><strong>Inference Speed and Latency</strong></p>
<ul>
<li><p>DeepSeek R1’s extended reasoning capabilities come at the cost of longer inference times. This could be a drawback for JigsawStack’s high-speed API-driven use cases.</p>
</li>
<li><p>Potential solution: Use DeepSeek R1 for offline synthetic data generation while relying on distilled models for production inference.</p>
</li>
</ul>
<p><strong>Implementation Complexity</strong></p>
<ul>
<li><p>DeepSeek R1 requires adjustments in JigsawStack’s inference pipeline. Ensuring a smooth transition without breaking existing workflows is crucial.</p>
</li>
<li><p>Developers need to consider whether existing fine-tuning frameworks align with DeepSeek R1’s architecture or if additional optimization steps (e.g. quantization) are required.</p>
</li>
</ul>
<p><strong>Exploring Distilled Models</strong></p>
<ul>
<li><p>Instead of integrating DeepSeek R1 in real-time applications, JigsawStack may experiment with its distilled models for a balance of efficiency and reasoning capability.</p>
</li>
<li><p>These distilled variants could power AI-driven automation tasks without the heavy computational burden of full-scale reasoning models.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>DeepSeek R1 offers a compelling opportunity for JigsawStack, particularly for synthetic data generation. While its advanced reasoning capabilities can enhance model training and automation, real-time use poses challenges due to higher inference costs and latency. Leveraging distilled versions may offer a balanced approach, optimizing for both efficiency and performance.</p>
<p>Moving forward, JigsawStack will focus on where DeepSeek R1 adds the most value—whether through data generation, fine-tuning, or targeted deployment—ensuring developers benefit from AI-driven innovation without unnecessary overhead.</p>
]]></content:encoded></item><item><title><![CDATA[Mistral OCR vs JigsawStack vOCR]]></title><description><![CDATA[Since Mistral claims to be the world's best OCR, let’s put that to the challenge against JigsawStack vOCR.
Mistral recently launched their OCR model showing benchmarks against Azure OCR, GCP, and AWS with support for multilingual use cases. So we’ll ...]]></description><link>https://blogdata.jigsawstack.com/mistral-ocr-vs-jigsawstack-vocr</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/mistral-ocr-vs-jigsawstack-vocr</guid><category><![CDATA[mistral ocr]]></category><category><![CDATA[vOCR]]></category><category><![CDATA[vision llm]]></category><category><![CDATA[OCR ]]></category><category><![CDATA[MistralAI]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Yoeven D Khemlani]]></dc:creator><pubDate>Fri, 07 Mar 2025 12:12:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1741349395136/c2772f46-d421-45d8-9d7a-b4eb489d0d97.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Since Mistral claims to be the world's best OCR, let’s put that to the challenge against <a target="_blank" href="https://jigsawstack.com/vocr">JigsawStack vOCR</a>.</p>
<p>Mistral recently launched their <a target="_blank" href="https://mistral.ai/news/mistral-ocr">OCR model</a> showing benchmarks against Azure OCR, GCP, and AWS with support for multilingual use cases. So we’ll put it through a real-world test with a range of languages and content types.</p>
<p>What is OCR? OCR stands for Optical Character Recognition which is a model that’s great at extracting text from a document or image. Some basic features that almost all OCR models should have:</p>
<ul>
<li><p>Multilingual support</p>
</li>
<li><p>Handwriting/Printed support</p>
</li>
<li><p>Bounding boxes (position of the text on the document/image)</p>
</li>
</ul>
<p>Now what makes a great OCR model, especially in the world of AI?</p>
<ul>
<li><p>High accuracy of text extraction and formatting</p>
</li>
<li><p>Support for a wide range of languages</p>
</li>
<li><p>Retrieval of specific values from a document</p>
</li>
<li><p>Consistently structured data</p>
</li>
<li><p>Understanding the context of the document</p>
</li>
</ul>
<p>We’ll be comparing Mistral OCR on the above standards to JigsawStack OCR with real-world examples and use cases.</p>
<h2 id="heading-sneak-peek-if-you-cant-wait">Sneak peek if you can’t wait 👇</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>Mistral OCR 2503</strong></td><td><strong>JigsawStack vOCR</strong></td></tr>
</thead>
<tbody>
<tr>
<td>🌐 Multilingual support</td><td>Limited. Works only if the image or documents are in a specific format. 12 benchmarked languages. ❌</td><td>70+ languages including less popular languages like Telugu compared to Hindi and Chinese ✅</td></tr>
<tr>
<td>📝 Handwriting/Printed support</td><td>Only worked on specific printed images. Failed in most situations, including handwriting. ❌</td><td>Worked with the most distorted images including handwriting, printed, and text on walls. ✅</td></tr>
<tr>
<td>⊞ Bounding boxes</td><td>No support was found on their API docs. ❌</td><td>Bounding boxes and positions data on PDFs and images. ✅</td></tr>
<tr>
<td>📁 Native structured output and retrieval</td><td>No support for native structured output or retrieval of values. Required to switch to Mistrals LLM which provides an ok result. Would need a lot more prompt engineering to get a close enough output. ❌</td><td>Native support for structured output and highly accurate and concise retrieval. ✅</td></tr>
<tr>
<td>📕 Markdown support</td><td>Fast and good for PDFs. Doesn’t work well with images. ◐ ✅</td><td>Full support for markdown on PDFs and images ✅</td></tr>
<tr>
<td>🧠 Native context understanding</td><td>Has context understanding as part of the LLM but not natively in the OCR model which I assume is a tool call to the OCR model. ◐✅</td><td>Native context understanding merged with OCR ✅</td></tr>
<tr>
<td>👯‍♀️ Team Size</td><td>~206 people</td><td>3</td></tr>
</tbody>
</table>
</div><h2 id="heading-multilingual-support">Multilingual support</h2>
<h3 id="heading-english-amp-telugu-clear-printed-example">English &amp; Telugu Clear Printed Example</h3>
<p><img src="https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/ocr_lang_test.jpg?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L29jcl9sYW5nX3Rlc3QuanBnIiwiaWF0IjoxNzQxMjM1ODM4LCJleHAiOjE3NzI3NzE4Mzh9.8esjh5GQHXtJ6DvaaJUG4i7wbNmQqX-HFki45ykBMjU" alt /></p>
<p>We were recently training a new image-to-image translation model and we’ve been using the above image to experiment with it. Now let’s try extracting all text from the above image which contains both English and Telugu.</p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340017226/f3712f33-532c-45f6-ba40-87b7e64811a8.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340069307/82b94293-f8f0-4efa-bade-dee158e0838f.png" alt class="image--center mx-auto" /></p>
<p>Mistral wasn’t able to detect the image with text. JigsawStack extracted all the text with 100% accurately.</p>
<h3 id="heading-hindi-amp-english-hard-to-read-example">Hindi &amp; English Hard-to-Read Example</h3>
<p><img src="https://uuvhpoxkzjnrvvajhnyb.supabase.co/storage/v1/object/sign/default/coca.jpg?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJkZWZhdWx0L2NvY2EuanBnIiwiaWF0IjoxNzQxMzQwMzM5LCJleHAiOjE3NzI4NzYzMzl9.4B53oYwPMLriyJv3mfw4G63fQ_reO2St5OExMfN9NqE" alt /></p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340509100/91bf44a9-762c-4d0e-a9af-d5d5fc29816d.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340657017/ee79c4f6-38c9-4fae-9ad6-ad803af03abe.png" alt class="image--center mx-auto" /></p>
<p>In another real-world multilingual example, Mistral isn’t able to detect the text in the image while JigsawStack OCR has accurately extracted and mapped the full result.</p>
<h2 id="heading-handwriting-amp-printed-text-detection-support">Handwriting &amp; Printed text detection support</h2>
<h3 id="heading-drivers-license-example">Drivers License Example</h3>
<p><img src="https://miro.medium.com/v2/resize:fit:698/1*q_FimDPBNMvJXJyDtXT3Jg.jpeg" alt /></p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340785402/8ba586f6-94ae-4715-85fc-20cce8b52e44.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741340916255/139b789f-773d-47ab-a1e3-9504b45f1025.png" alt class="image--center mx-auto" /></p>
<p>Mistral isn’t able to detect most of the text on the image while JigsawStack OCR can extract all text in a structured format and can differentiate between printed and written text.</p>
<h2 id="heading-bounding-boxes-and-positions">Bounding boxes and positions</h2>
<h3 id="heading-example-doc-from-mistral-blog-httpsmistralainewsmistral-ocrhttpsmistralainewsmistral-ocr">Example doc from Mistral blog (<a target="_blank" href="https://mistral.ai/news/mistral-ocr">https://mistral.ai/news/mistral-ocr</a>)</h3>
<p><img src="https://cms.mistral.ai/assets/6a2e2886-1e4e-4bfe-8673-debfff5b0d2b.jpg?width=1500&amp;height=1999" alt /></p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741342702477/f1bffd83-3d3d-4d39-aff2-2fe86c823386.png" alt class="image--center mx-auto" /></p>
<p>Full response</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"pages"</span>: [
    {
      <span class="hljs-attr">"index"</span>: <span class="hljs-number">0</span>,
      <span class="hljs-attr">"markdown"</span>: <span class="hljs-string">"# Mistral 7B \n\nAlbert Q. Jiang, Alexandre Sablayrolles, Arthur Mensch, Chris Bamford, Devendra Singh Chaplot, Diego de las Casas, Florian Bressand, Gianna Lengyel, Guillaume Lample, Lucile Saulnier, Lélio Renard Lavaud, Marie-Anne Lachaux, Pierre Stock, Teven Le Scao, Thibaut Lavril, Thomas Wang, Timothée Lacroix, William El Sayed\n\n![img-0.jpeg](img-0.jpeg)\n\n## Abstract\n\nWe introduce Mistral 7B, a 7-billion-parameter language model engineered for superior performance and efficiency. Mistral 7B outperforms the best open 13B model (Llama 2) across all evaluated benchmarks, and the best released 34B model (Llama 1) in reasoning, mathematics, and code generation. Our model leverages grouped-query attention (GQA) for faster inference, coupled with sliding window attention (SWA) to effectively handle sequences of arbitrary length with a reduced inference cost. We also provide a model fine-tuned to follow instructions, Mistral 7B - Instruct, that surpasses Llama 2 13B - chat model both on human and automated benchmarks. Our models are released under the Apache 2.0 license. Code: https://github.com/mistralai/mistral-src\nWebpage: https://mistral.ai/news/announcing-mistral-7b/\n\n## 1 Introduction\n\nIn the rapidly evolving domain of Natural Language Processing (NLP), the race towards higher model performance often necessitates an escalation in model size. However, this scaling tends to increase computational costs and inference latency, thereby raising barriers to deployment in practical, real-world scenarios. In this context, the search for balanced models delivering both high-level performance and efficiency becomes critically essential. Our model, Mistral 7B, demonstrates that a carefully designed language model can deliver high performance while maintaining an efficient inference. Mistral 7B outperforms the previous best 13B model (Llama 2, [26]) across all tested benchmarks, and surpasses the best 34B model (LLaMa 34B, [25]) in mathematics and code generation. Furthermore, Mistral 7B approaches the coding performance of Code-Llama 7B [20], without sacrificing performance on non-code related benchmarks.\nMistral 7B leverages grouped-query attention (GQA) [1], and sliding window attention (SWA) [6, 3]. GQA significantly accelerates the inference speed, and also reduces the memory requirement during decoding, allowing for higher batch sizes hence higher throughput, a crucial factor for real-time applications. In addition, SWA is designed to handle longer sequences more effectively at a reduced computational cost, thereby alleviating a common limitation in LLMs. These attention mechanisms collectively contribute to the enhanced performance and efficiency of Mistral 7B."</span>,
      <span class="hljs-attr">"images"</span>: [
        {
          <span class="hljs-attr">"id"</span>: <span class="hljs-string">"img-0.jpeg"</span>,
          <span class="hljs-attr">"top_left_x"</span>: <span class="hljs-number">313</span>,
          <span class="hljs-attr">"top_left_y"</span>: <span class="hljs-number">669</span>,
          <span class="hljs-attr">"bottom_right_x"</span>: <span class="hljs-number">1162</span>,
          <span class="hljs-attr">"bottom_right_y"</span>: <span class="hljs-number">901</span>,
          <span class="hljs-attr">"image_base64"</span>: <span class="hljs-literal">null</span>
        }
      ],
      <span class="hljs-attr">"dimensions"</span>: {
        <span class="hljs-attr">"dpi"</span>: <span class="hljs-number">200</span>,
        <span class="hljs-attr">"height"</span>: <span class="hljs-number">1999</span>,
        <span class="hljs-attr">"width"</span>: <span class="hljs-number">1500</span>
      }
    }
  ],
  <span class="hljs-attr">"model"</span>: <span class="hljs-string">"mistral-ocr-2503-completion"</span>,
  <span class="hljs-attr">"usage_info"</span>: {
    <span class="hljs-attr">"pages_processed"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"doc_size_bytes"</span>: <span class="hljs-number">274769</span>
  }
}
</code></pre>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741342748526/62ecf452-6513-478b-8950-457dec3cfec9.png" alt class="image--center mx-auto" /></p>
<p>Full response: <a target="_blank" href="https://gist.github.com/yoeven/a6bccae45a7d133130a6e1486e0df4ac">https://gist.github.com/yoeven/a6bccae45a7d133130a6e1486e0df4ac</a> Response is too large to display here.</p>
<p>Mistral OCR currently has no bounding boxes or position data in the response while JigsawStack OCR contains both sentence and word-level positions.</p>
<h2 id="heading-retrieval-and-structured-output">Retrieval and structured output</h2>
<h3 id="heading-receipt-retrieval-example"><strong>Receipt Retrieval Example</strong></h3>
<p><img src="https://media.snopes.com/2021/08/239918331_10228097135359041_3825446756894757753_n.jpg" alt /></p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741346201767/4cd7b9d7-f176-49a8-a206-f826df2b7749.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741346249166/f63026c5-af14-42f6-b1fb-659ea017c285.png" alt class="image--center mx-auto" /></p>
<p>Mistral does a good job pulling out all the text but doesn’t natively support structured output JSON or queries for the OCR which requires a different model or an LLM to post-process. JigsawStack provides structured output for exactly the fields requested along with the body of text and bounding boxes for each value.</p>
<h3 id="heading-15-page-arxiv-pdf-retrieval-example">15-Page Arxiv PDF Retrieval Example</h3>
<p>Full document: <a target="_blank" href="https://arxiv.org/pdf/2406.04692">https://arxiv.org/pdf/2406.04692</a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741343079180/feb68931-c30b-4972-a5eb-e82225ad6f26.png" alt class="image--center mx-auto" /></p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741345010593/a643177e-08a3-43d2-a44f-8e2f213fb02c.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741345036845/9654f23d-3565-4071-932b-937d02cf0156.png" alt class="image--center mx-auto" /></p>
<p>Both Mistral and JigsawStack get relevant results, however, there are a few hoops to jump through using Mistral. You will need to switch the API to use Mistrals LLM rather than the native OCR product, which I assume is doing some tool calling under the hood. Structured data is going to be a challenge as consistency of the data output in JSON is going to take a lot of work and prompt engineering. While on JigsawStack you get structured JSON exactly with the keys provided and only the answer required.</p>
<p>JigsawStack allows you to describe an array of fields that will always return consistent results mapped to those exact values.</p>
<h3 id="heading-markdown-support-example">Markdown Support Example</h3>
<p>We’ll use the same PDF document as above.</p>
<p><strong>Mistral OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741345775824/9a3305ec-996b-4566-97a0-bc9332548958.png" alt class="image--center mx-auto" /></p>
<p><strong>JigsawStack OCR</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741345696554/64c346ba-43ab-4559-b1fa-fd1cc4284447.png" alt class="image--center mx-auto" /></p>
<p>For this comparison, we had to switch back from Mistral LLM to the OCR model. Both Mistral and JigsawStack OCR do a great job of extracting markdowns consistently. The downside here is that JigsawStack supports up to 10 pages of PDF per API call. This is soon changing in the coming weeks with 100-page support.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In all of the above, we used JigsawStack’s <a target="_blank" href="https://jigsawstack.com/vocr">vOCR</a> where we merged a vLLM with a fine-tuned OCR model to provide high-quality results while supporting over 70+ languages.</p>
<p>For the above tests, we used Mistrals OCR Rest API which can be <a target="_blank" href="https://docs.mistral.ai/capabilities/document/">found here</a>, and JigsawStacks vOCR Rest API which can be <a target="_blank" href="https://jigsawstack.com/docs/api-reference/ai/vocr">found here</a>.</p>
<p>Overall in terms of language, structured data output context understanding, and providing the basics of OCR like bounding boxes, JigsawStack OCR does take the lead.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><strong>Mistral OCR 2503</strong></td><td><strong>JigsawStack vOCR</strong></td></tr>
</thead>
<tbody>
<tr>
<td>🌐 Multilingual support</td><td>Limited. Works only if the image or documents are in a specific format. 12 benchmarked languages. ❌</td><td>70+ languages including less popular languages like Telugu compared to Hindi and Chinese ✅</td></tr>
<tr>
<td>📝 Handwriting/Printed support</td><td>Only worked on specific printed images. Failed in most situations, including handwriting. ❌</td><td>Worked with the most distorted images including handwriting, printed, and text on walls. ✅</td></tr>
<tr>
<td>⊞ Bounding boxes</td><td>No support was found on their API docs. ❌</td><td>Bounding boxes and positions data on PDFs and images. ✅</td></tr>
<tr>
<td>📁 Native structured output and retrieval</td><td>No support for native structured output or retrieval of values. Required to switch to Mistrals LLM which provides an ok result. Would need a lot more prompt engineering to get a close enough output. ❌</td><td>Native support for structured output and highly accurate and concise retrieval. ✅</td></tr>
<tr>
<td>📕 Markdown support</td><td>Fast and good for PDFs. Doesn’t work well with images. ◐ ✅</td><td>Full support for markdown on PDFs and images ✅</td></tr>
<tr>
<td>🧠 Native context understanding</td><td>Has context understanding as part of the LLM but not natively in the OCR model which I assume is a tool call to the OCR model. ◐✅</td><td>Native context understanding merged with OCR ✅</td></tr>
<tr>
<td>👯‍♀️ Team Size</td><td>~206 people</td><td>3</td></tr>
</tbody>
</table>
</div><h2 id="heading-how-to-get-started-with-jigsawstack-vocr">How to get started with JigsawStack vOCR?</h2>
<p>The goal at JigsawStack is to build small focused models that are good at doing one thing very well. Then we pack all the models into a single DX-friendly SDK.</p>
<p><strong>Typescript/Javascript example</strong></p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsawstack = JigsawStack({
  apiKey: <span class="hljs-string">"your-api-key"</span>,
});

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> jigsaw.vision.vocr({
  prompt: [<span class="hljs-string">"total_price"</span>, <span class="hljs-string">"tax"</span>],
  url: <span class="hljs-string">"https://media.snopes.com/2021/08/239918331_10228097135359041_3825446756894757753_n.jpg"</span>,
});
</code></pre>
<p><strong>Python</strong></p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> jigsawstack <span class="hljs-keyword">import</span> JigsawStack

jigsawstack = JigsawStack(api_key=<span class="hljs-string">"your-api-key"</span>)

result = jigsawstack.vision.vocr({<span class="hljs-string">"url"</span>: <span class="hljs-string">"https://media.snopes.com/2021/08/239918331_10228097135359041_3825446756894757753_n.jpg"</span>, <span class="hljs-string">"prompt"</span> : [<span class="hljs-string">"total_price"</span>, <span class="hljs-string">"tax"</span>]})
</code></pre>
]]></content:encoded></item><item><title><![CDATA[AI Web Scraper: The Easiest Way to Scrape and Crawl the Web]]></title><description><![CDATA[Web scraping just got smarter. Forget tedious CSS selectors—AI Scraper automatically extracts links, crawls dynamic pages, and handles infinite scroll. Whether you're building a web crawler, monitoring price changes, or gathering structured data at s...]]></description><link>https://blogdata.jigsawstack.com/crawl-the-web-with-ease</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/crawl-the-web-with-ease</guid><category><![CDATA[web scraping]]></category><category><![CDATA[Developer Tools]]></category><category><![CDATA[web crawling]]></category><category><![CDATA[APIs]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Tue, 04 Mar 2025 23:29:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740535481372/8d46c1e5-1de2-44ce-b5b3-00e7488cfe9e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Web scraping just got smarter. Forget tedious CSS selectors—AI Scraper automatically extracts links, crawls dynamic pages, and handles infinite scroll. Whether you're building a web crawler, monitoring price changes, or gathering structured data at scale, get structured data in a single API call.</p>
<h2 id="heading-why-use-ai-for-web-scraping">Why Use AI For Web Scraping?</h2>
<h3 id="heading-auto-extract-links-with-zero-effort"><strong>Auto-Extract Links with Zero Effort</strong></h3>
<p>Instead of writing tedious CSS selectors, AI Scraper automatically extracts structured data based on natural language prompts. Just specify what elements you need (e.g., "Plan title", "Plan price"), and AI Scraper does the rest—delivering structured JSON responses in seconds.</p>
<h3 id="heading-auto-scroll-for-long-pages"><strong>Auto-Scroll for Long Pages</strong></h3>
<p>Many modern websites load content dynamically as you scroll. Traditional scrapers fail to capture these elements, leaving you with incomplete data. AI Scraper solves this by automatically scrolling through long pages, ensuring no links or content are missed.</p>
<h3 id="heading-simple-amp-flexible-api"><strong>Simple &amp; Flexible API</strong></h3>
<p>Built with JigsawStack's AI capabilities, AI Scraper provides a developer-friendly API that supports multiple languages, including JavaScript, Python, and cURL.</p>
<h2 id="heading-web-scraping-vs-web-crawling">Web Scraping vs Web Crawling</h2>
<p>Web scraping and web crawling are often used interchangeably, but they serve different purposes. Here's a quick comparison:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Web Scraping</strong></td><td><strong>Web Crawling</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Purpose</td><td>Extracts structured data from pages</td><td>Navigates multiple pages to discover new data</td></tr>
<tr>
<td>Example</td><td>Scraping product prices from an e-commerce page</td><td>Collecting all blog links from a website</td></tr>
</tbody>
</table>
</div><h3 id="heading-web-scraping">Web Scraping</h3>
<p>Web scraping is the process of extracting structured data from a webpage. With JigsawStack AI Scraper, you don’t need to manually define CSS selectors—just specify what elements you need (e.g., "Plan title", "Plan price"), and the scraper fetches structured JSON data.</p>
<h3 id="heading-how-it-works">How it works</h3>
<p>Using AI Scraper is <strong>as simple as making a POST request</strong>. Here's an example in JavaScript:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { JigsawStack } <span class="hljs-keyword">from</span> <span class="hljs-string">"jigsawstack"</span>;

<span class="hljs-keyword">const</span> jigsawstack = JigsawStack({
  <span class="hljs-attr">apiKey</span>: <span class="hljs-string">"your-api-key"</span>,
});

<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> jigsawstack.web.ai_scrape({
  <span class="hljs-attr">url</span>: <span class="hljs-string">"https://supabase.com/pricing"</span>,
  <span class="hljs-attr">element_prompts</span>: [<span class="hljs-string">"Plan title"</span>, <span class="hljs-string">"Plan price"</span>],
});

<span class="hljs-built_in">console</span>.log(result);
</code></pre>
<h3 id="heading-response">Response</h3>
<pre><code class="lang-json">{
    <span class="hljs-attr">"page_position"</span>: <span class="hljs-number">1</span>,
    <span class="hljs-attr">"page_position_length"</span>: <span class="hljs-number">3</span>,
    <span class="hljs-attr">"context"</span>: {
        <span class="hljs-attr">"Plan title"</span>: [<span class="hljs-string">"Enterprise"</span>, <span class="hljs-string">"Pro"</span>],
        <span class="hljs-attr">"Plan price"</span>: [<span class="hljs-string">"Custom"</span>, <span class="hljs-string">"$25"</span>]
    },
    <span class="hljs-attr">"link"</span>: [
        { <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://supabase.com/dashboard/new?plan=free"</span>, <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Start for Free"</span> },
        { <span class="hljs-attr">"href"</span>: <span class="hljs-string">"https://supabase.com/dashboard/new?plan=pro"</span>, <span class="hljs-attr">"text"</span>: <span class="hljs-string">"Get Started"</span> }
    ],
    <span class="hljs-attr">"success"</span>: <span class="hljs-literal">true</span>
}
</code></pre>
<h2 id="heading-web-crawling">Web Crawling</h2>
<p>Web crawling, on the other hand, involves <strong>discovering</strong> and <strong>following links</strong> to navigate through multiple pages. This is useful when you need to collect information across an entire website, such as product listings, articles, or other structured data.</p>
<p>AI Scraper is a <strong>full-fledged web crawler</strong> with powerful customization options:</p>
<ul>
<li><p><strong>Auto-scroll</strong> to handle infinite scrolling pages</p>
</li>
<li><p><strong>Dynamic web scraping</strong> for JavaScript-heavy sites</p>
</li>
<li><p><strong>Custom HTTP headers &amp; authentication support</strong></p>
</li>
<li><p><strong>Reject request patterns</strong> to avoid scraping unnecessary data</p>
</li>
<li><p><strong>Viewport &amp; user-agent customization</strong></p>
</li>
<li><p><strong>Proxy rotation &amp; custom proxies</strong> for anti-bot protection</p>
</li>
</ul>
<h3 id="heading-example-use-case-scraping-wikipedia"><strong>Example Use Case: Scraping Wikipedia</strong></h3>
<p>Imagine you want to scrape wikipedia to quickly research a topic. The full code can be found <a target="_blank" href="https://github.com/JigsawStack/web-crawler-demo">here</a>.</p>
<h3 id="heading-setting-up-the-ai-scraper-for-wikipedia">Setting up the AI Scraper for Wikipedia</h3>
<pre><code class="lang-javascript"><span class="hljs-comment">//Set up the prompt</span>
<span class="hljs-keyword">try</span> {

      <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> jigsawstack.web.ai_scrape({
        <span class="hljs-attr">url</span>: url,
        <span class="hljs-attr">element_prompts</span>: [
          <span class="hljs-string">"Article title"</span>, 
          <span class="hljs-string">"Article introduction"</span>, 
          <span class="hljs-string">"Key concepts"</span>,
        ],
        <span class="hljs-attr">wait_for</span>: {
          <span class="hljs-attr">mode</span>: <span class="hljs-string">"selector"</span>,
          <span class="hljs-attr">value</span>: <span class="hljs-string">"#content"</span>
        },
        <span class="hljs-attr">goto_options</span>: {
          <span class="hljs-attr">timeout</span>: <span class="hljs-number">12000</span>,
          <span class="hljs-attr">wait_until</span>: <span class="hljs-string">"domcontentloaded"</span>
        }
      });
</code></pre>
<h3 id="heading-running-the-web-crawler">Running the Web Crawler</h3>
<pre><code class="lang-javascript"><span class="hljs-comment">// Run the crawler </span>
(<span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-comment">// Choose Wiki article</span>
    <span class="hljs-keyword">const</span> seedUrl = <span class="hljs-string">"https://en.wikipedia.org/wiki/Machine_learning"</span>;

    <span class="hljs-comment">// Set limits</span>
    <span class="hljs-keyword">const</span> maxDepth = <span class="hljs-number">1</span>;         
    <span class="hljs-keyword">const</span> maxArticles = <span class="hljs-number">5</span>;      <span class="hljs-comment">// Follow 5 links per article for more breadth</span>

    <span class="hljs-keyword">const</span> articles = <span class="hljs-keyword">await</span> crawlWikipedia(seedUrl, maxDepth, maxArticles);

    <span class="hljs-comment">// Generate a knowledge graph</span>
    <span class="hljs-keyword">const</span> knowledgeGraph = createKnowledgeGraph(articles);

    <span class="hljs-comment">// Print the results </span>
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"\n=== WIKIPEDIA KNOWLEDGE CRAWLER RESULTS ===\n"</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Total articles crawled: <span class="hljs-subst">${articles.length}</span>`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Seed article: <span class="hljs-subst">${seedUrl}</span>`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Crawl time: <span class="hljs-subst">${<span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>().toLocaleString()}</span>`</span>);

  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"Error running Wikipedia crawler:"</span>, error);
  }
})();
</code></pre>
<h3 id="heading-example-response">Example Response</h3>
<pre><code class="lang-json">Starting Wikipedia crawler from: https:<span class="hljs-comment">//en.wikipedia.org/wiki/Machine_learning</span>
Crawling (depth <span class="hljs-number">0</span>): https:<span class="hljs-comment">//en.wikipedia.org/wiki/Machine_learning</span>
Following <span class="hljs-number">5</span> links from this article:
  - https:<span class="hljs-comment">//en.wikipedia.org/wiki/Machine_Learning_(journal)</span>
  - https:<span class="hljs-comment">//en.wikipedia.org/wiki/Quantum_machine_learning</span>
  - https:<span class="hljs-comment">//en.wikipedia.org/wiki/Outline_of_machine_learning</span>
  - https:<span class="hljs-comment">//en.wikipedia.org/wiki/Timeline_of_machine_learning</span>
  - https:<span class="hljs-comment">//en.wikipedia.org/wiki/Unsupervised_machine_learning</span>

=== WIKIPEDIA KNOWLEDGE CRAWLER RESULTS ===

Total articles crawled: <span class="hljs-number">6</span>
Seed article: https:<span class="hljs-comment">//en.wikipedia.org/wiki/Machine_learning</span>
Crawl time: <span class="hljs-number">3</span>/<span class="hljs-number">2</span>/<span class="hljs-number">2025</span>, <span class="hljs-number">9</span>:<span class="hljs-number">39</span>:<span class="hljs-number">50</span> AM
</code></pre>
<p>This script starts from a search specific wiki page, extracts details, follows related subject links, and continues crawling up to a set depth. The added <code>wait_for</code> option ensures content is fully loaded before scraping.</p>
<h2 id="heading-whats-next-for-ai-scraper">What’s Next for AI Scraper?</h2>
<p>AI Scraper is designed to stay opinionated and streamlined—meaning no complex configurations and no unnecessary feature bloat. Future updates will refine existing capabilities while ensuring high-speed, cost-effective scraping for developers and businesses alike.</p>
<p>Your feedback matters! If you have ideas to improve AI Scraper, open a discussion in our <a target="_blank" href="https://discord.gg/GnvmdZ7z">Discord</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Top 3 ONNX Models for JavaScript]]></title><description><![CDATA[In the early days of on-device AI, running large language models (LLMs) in JavaScript was only a dream. Developers relied on cloud-based APIs, and any form of local execution was limited to tiny, underpowered models. Fast forward to today, and the la...]]></description><link>https://blogdata.jigsawstack.com/top-3-onnx-models</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/top-3-onnx-models</guid><category><![CDATA[transformers]]></category><category><![CDATA[AI]]></category><category><![CDATA[llm]]></category><category><![CDATA[ONNX]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Thu, 27 Feb 2025 00:41:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740617251730/dbeee1f4-5896-48fd-87f7-eba2021db3e5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the early days of on-device AI, running large language models (LLMs) in JavaScript was only a dream. Developers relied on cloud-based APIs, and any form of local execution was limited to tiny, underpowered models. Fast forward to today, and the landscape has changed dramatically. With the rise of ONNX (Open Neural Network Exchange) and efficient runtimes like Transformers.js, WebGPU, and MLC Web-LLM, running powerful models on-device in JavaScript is no longer just possible, it’s practical.</p>
<h3 id="heading-the-best-on-device-onnx-models-for-javascript">The Best On-Device ONNX Models for JavaScript</h3>
<p>With the release of models like Llama 3.2 1B and 3B, running high-performance LLMs in the browser or on low-powered devices, the question is which is the best? Here are the top ONNX models that can run efficiently in JavaScript:</p>
<h4 id="heading-1-llama-32-1b-amp-3b-metas-lightweight-powerhouses">1. <strong>Llama 3.2 (1B &amp; 3B) - Meta's Lightweight Powerhouses</strong></h4>
<p>Meta's <a target="_blank" href="https://huggingface.co/onnx-community/Llama-3.2-1B-Instruct">Llama 3.2 models</a> come in small (1B) and medium (3B) sizes, designed for on-device execution. These models are optimized for:</p>
<ul>
<li><p>Low-latency inference on CPUs and GPUs.</p>
</li>
<li><p>Multilingual support for English, German, French, Spanish, and more.</p>
</li>
<li><p>Efficient text generation, making them ideal for chatbots, assistants, and offline summarization.</p>
</li>
</ul>
<p>How to run Llama 3.2 in JavaScript using Transformers.js:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { pipeline } <span class="hljs-keyword">from</span> <span class="hljs-string">"@huggingface/transformers"</span>;

<span class="hljs-keyword">const</span> generator = <span class="hljs-keyword">await</span> pipeline(<span class="hljs-string">"text-generation"</span>, <span class="hljs-string">"onnx-community/Llama-3.2-1B-Instruct"</span>);

<span class="hljs-keyword">const</span> messages = [{ <span class="hljs-attr">role</span>: <span class="hljs-string">"user"</span>, <span class="hljs-attr">content</span>: <span class="hljs-string">"Tell me a joke."</span> }];

<span class="hljs-keyword">const</span> output = <span class="hljs-keyword">await</span> generator(messages, { <span class="hljs-attr">max_new_tokens</span>: <span class="hljs-number">128</span> });

<span class="hljs-built_in">console</span>.log(output[<span class="hljs-number">0</span>].generated_text.at(<span class="hljs-number">-1</span>).content);
</code></pre>
<h4 id="heading-2-phi-2-microsofts-compact-llm">2. <strong>Phi-2 - Microsoft’s Compact LLM</strong></h4>
<p><a target="_blank" href="https://huggingface.co/mlc-ai/phi-2-q4f32_1-MLC">Phi-2</a> is a compact yet powerful model trained on high-quality datasets. It’s a strong competitor in the small LLM space, providing:</p>
<ul>
<li><p>High accuracy for its size.</p>
</li>
<li><p>Excellent few-shot learning capabilities.</p>
</li>
<li><p>Optimized ONNX quantization for better on-device efficiency.</p>
</li>
</ul>
<p>Phi-2 can be run efficiently using WebGPU in MLC Web-LLM:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { CreateMLCEngine } <span class="hljs-keyword">from</span> <span class="hljs-string">"@mlc-ai/web-llm"</span>;

<span class="hljs-keyword">const</span> engine = <span class="hljs-keyword">await</span> CreateMLCEngine(<span class="hljs-string">"Phi-2-q4f32_1-MLC"</span>);

<span class="hljs-keyword">const</span> messages = [{ <span class="hljs-attr">role</span>: <span class="hljs-string">"user"</span>, <span class="hljs-attr">content</span>: <span class="hljs-string">"Explain the universe as a pirate!"</span> }];

<span class="hljs-keyword">const</span> reply = <span class="hljs-keyword">await</span> engine.chat.completions.create({ messages });

<span class="hljs-built_in">console</span>.log(reply.choices[<span class="hljs-number">0</span>].message);
</code></pre>
<h4 id="heading-3-mistral-7b-a-strong-open-weight-alternative">3. <strong>Mistral 7B - A Strong Open-Weight Alternative</strong></h4>
<p><a target="_blank" href="https://huggingface.co/mistralai/Mistral-7B-v0.1">Mistral 7B</a> provides excellent balance between performance and efficiency. It has:</p>
<ul>
<li><p>Superior text understanding and generation.</p>
</li>
<li><p>A more permissive open-weight license.</p>
</li>
<li><p>Efficient execution in ONNX with optimized quantization.</p>
</li>
</ul>
<p>Mistral 7B can be deployed in WebLLM using ONNX:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> webllm <span class="hljs-keyword">from</span> <span class="hljs-string">"@mlc-ai/web-llm"</span>;

<span class="hljs-keyword">const</span> engine = <span class="hljs-keyword">await</span> webllm.CreateMLCEngine(<span class="hljs-string">"Mistral-7B-q4f32_1-MLC"</span>);

<span class="hljs-keyword">const</span> messages = [{ <span class="hljs-attr">role</span>: <span class="hljs-string">"user"</span>, <span class="hljs-attr">content</span>: <span class="hljs-string">"What’s the best way to learn JavaScript?"</span> }];

<span class="hljs-keyword">const</span> reply = <span class="hljs-keyword">await</span> engine.chat.completions.create({ messages });

<span class="hljs-built_in">console</span>.log(reply.choices[<span class="hljs-number">0</span>].message);
</code></pre>
<h3 id="heading-why-on-device-ai-matters">Why On-Device AI Matters</h3>
<p>Running AI models on-device has several key benefits:</p>
<ol>
<li><p><strong>Privacy</strong> - No user data leaves the device.</p>
</li>
<li><p><strong>Lower Latency</strong> - No API calls mean instant responses.</p>
</li>
<li><p><strong>Offline Capability</strong> - Models run without internet access.</p>
</li>
<li><p><strong>Cost Efficiency</strong> - No need for expensive cloud compute.</p>
</li>
</ol>
<h3 id="heading-getting-started-with-onnx-in-javascript">Getting Started with ONNX in JavaScript</h3>
<p>If you're looking to integrate on-device AI into your JavaScript projects, here’s what you need:</p>
<ul>
<li><p><a target="_blank" href="https://github.com/huggingface/transformers.js-examples">Transformers.js</a> for running ONNX models in Node.js or the browser.</p>
</li>
<li><p>WebGPU support for faster inference with <a target="_blank" href="https://github.com/mlc-ai/web-llm">MLC Web-LLM</a>.</p>
</li>
<li><p><a target="_blank" href="https://github.com/microsoft/onnxruntime">ONNX Runtime Web</a> for cross-platform execution.</p>
</li>
</ul>
<h3 id="heading-the-future-of-on-device-llms-in-javascript">The Future of On-Device LLMs in JavaScript</h3>
<p>As models continue to get smaller and more efficient, we’re entering an era where advanced AI applications can run directly in the browser or on edge devices. Whether it’s chatbots, real-time translation, or AI-powered assistants, the possibilities are endless.</p>
<p>Want to take your AI projects even further? <strong>JigsawStack’s Small Models</strong> are built with efficiency in mind, leveraging <strong>Node.js</strong> on the backend to deliver lightning-fast inference while keeping resource usage low. <a target="_blank" href="https://jigsawstack.com/docs/introduction">Explore our APIs today</a>!</p>
]]></content:encoded></item><item><title><![CDATA[Solving In-Scene Text Translation: What Works, What Doesn’t, and What’s Next]]></title><description><![CDATA[Translating text in images is a challenging but necessary task for global communication. With our Image-to-Image Translation Model, we aim to develop a seamless solution that can extract, translate, and overlay text back into images while preserving ...]]></description><link>https://blogdata.jigsawstack.com/diffusion-model-text-rendering</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/diffusion-model-text-rendering</guid><category><![CDATA[LLM's ]]></category><category><![CDATA[Diffusion Models ]]></category><category><![CDATA[Deep Learning]]></category><category><![CDATA[neural networks]]></category><category><![CDATA[image processing]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Tue, 25 Feb 2025 00:38:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740536368760/0c060ebc-aacc-49b8-9937-d43ce08af3eb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Translating text in images is a challenging but necessary task for global communication. With our <strong>Image-to-Image Translation Model</strong>, we aim to develop a seamless solution that can <strong>extract, translate, and overlay text</strong> back into images while preserving their original style. Here’s a look at our progress so far, where we’re headed, and where we’d love your input.</p>
<h2 id="heading-version-1-core-pipeline"><strong>Version 1: Core Pipeline</strong></h2>
<p>Our first iteration focuses on a four-step process to ensure high-quality text translation and integration:</p>
<ol>
<li><p><strong>OCR (Optical Character Recognition)</strong> – Extract text and bounding boxes from an image using <strong>JigsawStack's vOCR API</strong> which goes beyond simple text extraction paired with AI.</p>
</li>
<li><p><strong>Define Target Text</strong> – Translate extracted text using our <strong>vOCR + Prompt</strong> or <strong>translation API</strong>.</p>
</li>
<li><p><strong>Inpaint</strong> – Erase detected text areas, creating a clean canvas for new text placement.</p>
</li>
<li><p><strong>Overlay</strong> – Render the translated text with a similar font in the erased areas to maintain visual consistency.</p>
</li>
</ol>
<p><img src="https://arxiv.org/html/2406.11432v1/x4.png" alt="Refer to caption" /></p>
<p>Image by <a target="_blank" href="https://arxiv.org/html/2406.11432v1">AnyTrans</a></p>
<h2 id="heading-current-progress"><strong>Current Progress</strong></h2>
<p>We have successfully implemented <strong>OCR extraction</strong>, <strong>text inpainting</strong> to remove existing text and modules that help understand the text's geometry to be overlayed. The major challenge remains in defining the <strong>geometry for text erasure and rendering</strong>—especially for complex cases like curved or stylized text. We are actively iterating on this problem to ensure smooth and natural-looking translations.</p>
<p>How should we handle cases where text follows unusual geometry? Can we ensure new text blends naturally into different textures? These are some of the open questions we’re still working through.</p>
<h2 id="heading-version-2-can-a-diffusion-model-solve-this">Version 2: Can a Diffusion Model Solve This?</h2>
<p>While our first version lays the groundwork, our long-term goal is to <strong>train a diffusion model</strong> capable of generating high-quality translated text in <strong>any language and script</strong>. This will allow for <strong>more accurate text placement and rendering</strong>, especially for non-Latin languages like <strong>Hindi, Arabic, and Chinese</strong>.</p>
<p>We're building on insights from prior open-source research, drawing particular inspiration from <strong>AnyText by Yuxiang Tuo et al</strong>. This paper introduces a framework that combines <strong>large language models (LLMs) with text-guided diffusion models</strong>. By leveraging this approach, we enable <strong>context-aware translation</strong> and <strong>seamless text integration</strong>, ensuring that the final output maintains the image’s original aesthetic.</p>
<p>Although prior works like <strong>DiffUTE, AnyText, STEFFAN, DiffSTE, Stable-Flow, and Translatron-V</strong> have tackled <strong>in-scene text editing and machine translation</strong>, gaps still remain. Through our own experimentation and analysis of their stated limitations, we've identified key areas for improvement.</p>
<p>Currently, text rendering in diffusion models relies on <strong>ControlNet, a deep neural network that ensures text closely follows the original geometry</strong> by adding and removing noise recursively while applying style transfer. However, rendering non-Latin glyphs (e.g., Hindi) remains a significant challenge. Research into methods like <strong>GlyphControl and Conditional Control</strong> has shown promise in <strong>making visual text generation font-agnostic</strong>.</p>
<p>With our V2, we aim to address these limitations, enabling seamless in-scene machine translation using inpainting and fill techniques.</p>
<h2 id="heading-whats-next">What’s Next?</h2>
<ul>
<li><p><strong>Finalizing the V1 pipeline</strong>: Refining how text erasure and rendering work for different text orientations.</p>
</li>
<li><p><strong>Exploring diffusion-based text generation</strong>: Training a model that can handle diverse scripts and writing styles.</p>
</li>
<li><p><strong>Gathering community feedback</strong>: We know we’re not the only ones thinking about this, and we’d love your input!</p>
</li>
</ul>
<p>What do you think? Have you worked with in-scene text rendering or multilingual text generation? Got ideas for better overlay techniques? <strong>Join the discussion on</strong> <a target="_blank" href="https://discord.gg/GnvmdZ7z"><strong>Discord</strong></a> <strong>or</strong> <a target="_blank" href="https://x.com/jigsawstack"><strong>X</strong></a> – we’d love to hear your thoughts!</p>
]]></content:encoded></item><item><title><![CDATA[Introducing OmiAI: The Future of Intelligent AI Model Selection]]></title><description><![CDATA[In the early days of LLMs, things were simpler. GPT-3.5 reigned supreme, and developers only had to integrate one model, one framework, and one standard. Fast forward to today, and the landscape has transformed dramatically. With a surge of new model...]]></description><link>https://blogdata.jigsawstack.com/introducing-omiai</link><guid isPermaLink="true">https://blogdata.jigsawstack.com/introducing-omiai</guid><category><![CDATA[#ai-tools]]></category><category><![CDATA[Deepseek]]></category><category><![CDATA[llm]]></category><category><![CDATA[ML Model selection]]></category><dc:creator><![CDATA[Angel Pichardo]]></dc:creator><pubDate>Thu, 30 Jan 2025 00:12:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740641975744/8997ab16-33c2-42f1-ae10-68ab0c1b50be.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the early days of LLMs, things were simpler. GPT-3.5 reigned supreme, and developers only had to integrate one model, one framework, and one standard. Fast forward to today, and the landscape has transformed dramatically. With a surge of new models like DeepSeek R1, Gemini Flash 8B, and Sonnet 3.5—each excelling in different areas—developers now face the challenge of choosing the right model for the right task.</p>
<p>Introducing <strong>OmiAI</strong>, an opinionated, highly optimized LLM SDK designed to eliminate the complexity of model selection. Built on Vercel’s AI SDK and powered by <strong>JigsawStack’s embedding model and AI tools</strong>, OmiAI automatically selects the best AI model based on the task at hand, seamlessly integrating <strong>reasoning, tool-calling, and multi-modal support</strong> to deliver the most accurate and efficient results.</p>
<h2 id="heading-how-omiai-works">How OmiAI Works</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738205562560/5bb41f76-ce5e-4d85-9850-7d698f541813.png" alt class="image--center mx-auto" /></p>
<p>Instead of manually selecting an AI model or managing schemas, OmiAI simplifies the process by dynamically choosing the best option. Here’s a breakdown of its execution flow:</p>
<ol>
<li><p><strong>Automatic Model Selection</strong> – Based on the user’s prompt, OmiAI picks the most suitable model from a pre-selected list.</p>
</li>
<li><p><strong>Intelligent Tool-Calling</strong> – If additional context or actions are needed (e.g., web search, OCR, AI scraping), OmiAI automatically invokes relevant tools.</p>
</li>
<li><p><strong>Reasoning Layer Integration</strong> – For complex queries, OmiAI leverages <strong>DeepSeek R1</strong> to enhance decision-making and response accuracy.</p>
</li>
<li><p><strong>Multi-Modal Support</strong> – OmiAI can process PDFs, images, audio, CSVs, JSON, and more, allowing for comprehensive AI-driven solutions.</p>
</li>
<li><p><strong>Final Execution &amp; Response Optimization</strong> – All intermediate outputs are processed through the selected LLM, ensuring a seamless and accurate response.</p>
</li>
</ol>
<h2 id="heading-why-omiai">Why OmiAI?</h2>
<h3 id="heading-effortless-optimization">Effortless Optimization</h3>
<p>Unlike traditional AI frameworks that require developers to manually switch between models, OmiAI removes the guesswork by selecting the <strong>best</strong> model <strong>every time</strong>. Whether it’s a coding-heavy task, a long-form content generation request, or a data extraction problem, OmiAI ensures you’re always using the most effective model.</p>
<h3 id="heading-built-in-reasoning-amp-tool-calling">Built-In Reasoning &amp; Tool-Calling</h3>
<p>Many LLMs struggle with complex problem-solving. OmiAI bridges this gap by integrating <strong>reasoning models like DeepSeek R1</strong> and <strong>dynamic web search</strong> to enrich responses with real-world, up-to-date information.</p>
<h3 id="heading-seamless-multi-modal-processing">Seamless Multi-Modal Processing</h3>
<p>OmiAI is <strong>not just for text</strong>—it’s fully capable of handling <strong>files, images, and structured data</strong>. Whether you need AI-powered <strong>OCR for invoices</strong>, <strong>summarization for PDFs</strong>, or <strong>embedding for text and documents</strong>, OmiAI makes it effortless.</p>
<h2 id="heading-getting-started-with-omiai">Getting Started with OmiAI</h2>
<p>With a single <strong>npm install</strong>, developers can integrate OmiAI into their projects without worrying about complex configurations. It includes <strong>rate-limiting fallbacks, retries, and structured output support</strong> (via Zod) to ensure stability and reliability.</p>
<h3 id="heading-installation">Installation</h3>
<pre><code class="lang-bash">npm i omiai
</code></pre>
<h3 id="heading-basic-usage">Basic Usage</h3>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { createOmiAI } <span class="hljs-keyword">from</span> <span class="hljs-string">"omiai"</span>;

<span class="hljs-keyword">const</span> omi = createOmiAI();
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> omi.generate({ 
    <span class="hljs-attr">prompt</span>: <span class="hljs-string">"What is the meaning of life?"</span> });
<span class="hljs-built_in">console</span>.log(result?.text);
</code></pre>
<h3 id="heading-structured-output-with-zod">Structured Output with Zod</h3>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { z } <span class="hljs-keyword">from</span> <span class="hljs-string">"zod"</span>;
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> omi.generate({
  <span class="hljs-attr">prompt</span>: <span class="hljs-string">"How many r's are there in the word 'strawberries'?"</span>,
  <span class="hljs-attr">schema</span>: z.object({ 
      <span class="hljs-attr">answer</span>: z.number().describe(<span class="hljs-string">"The answer to the question"</span>) }),
});
<span class="hljs-built_in">console</span>.log(result?.object);
</code></pre>
<h3 id="heading-multi-modal-support">Multi-Modal Support</h3>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> omi.generate({
  <span class="hljs-attr">prompt</span>: [
    {
      <span class="hljs-attr">role</span>: <span class="hljs-string">"user"</span>,
      <span class="hljs-attr">content</span>: [
        { <span class="hljs-attr">type</span>: <span class="hljs-string">"text"</span>, 
            <span class="hljs-attr">data</span>: <span class="hljs-string">"Extract the total price from the image"</span> },
        { <span class="hljs-attr">type</span>: <span class="hljs-string">"image"</span>, 
            <span class="hljs-attr">data</span>: <span class="hljs-string">"https://example.com/image.jpg"</span>, <span class="hljs-attr">mimeType</span>: <span class="hljs-string">"image/jpg"</span> },
      ],
    },
  ],
  <span class="hljs-attr">schema</span>: z.object({ 
    <span class="hljs-attr">total_price</span>: z.number().describe(<span class="hljs-string">"Total price of items"</span>) }),
});
<span class="hljs-built_in">console</span>.log(result?.object);
</code></pre>
<h2 id="heading-whats-next-for-omiai">What’s Next for OmiAI?</h2>
<p>OmiAI is built to stay <strong>opinionated</strong>—meaning you don’t pick the model; it picks the best one for you. The focus remains on <strong>efficiency, minimal configurations, and an optimized developer experience</strong>.</p>
<p>While the project is still in its early stages, expect breaking changes, ongoing improvements, and contributions from the community to refine its capabilities.</p>
<p>We want your feedback! If you have suggestions on how OmiAI can be improved or simplified, feel free to <strong>open a discussion or PR on GitHub</strong>.</p>
<p>🔗 <strong>Check out the repo:</strong> <a target="_blank" href="https://github.com/JigsawStack/omiai">OmiAI on GitHub</a></p>
<p>OmiAI isn’t just another AI SDK—it’s a smarter way to build with AI. Try it today and experience <strong>automated AI model selection</strong> at its finest!</p>
]]></content:encoded></item></channel></rss>