<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Addy Bhatia</title>
    <description>The latest articles on DEV Community by Addy Bhatia (@addy999).</description>
    <link>https://dev.to/addy999</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2520099%2F87989c05-ef04-418c-9361-4548ada98e8e.jpg</url>
      <title>DEV Community: Addy Bhatia</title>
      <link>https://dev.to/addy999</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/addy999"/>
    <language>en</language>
    <item>
      <title>Google and Anthropic are working on AI agents - so I made an open source alternative</title>
      <dc:creator>Addy Bhatia</dc:creator>
      <pubDate>Thu, 09 Jan 2025 18:53:57 +0000</pubDate>
      <link>https://dev.to/addy999/google-and-anthropic-are-working-on-ai-agents-so-i-made-an-open-source-alternative-2a08</link>
      <guid>https://dev.to/addy999/google-and-anthropic-are-working-on-ai-agents-so-i-made-an-open-source-alternative-2a08</guid>
      <description>&lt;p&gt;Integrating Ollama, Microsoft &lt;a href="https://huggingface.co/microsoft/OmniParser" rel="noopener noreferrer"&gt;vision&lt;/a&gt; models and &lt;a href="https://github.com/microsoft/playwright-python" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; I've made a simple agent that can browse websites and data to answer your query.&lt;/p&gt;

&lt;p&gt;You can even define a JSON schema!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch it in action:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/a_QPDnAosKM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sp_YuZ1Q4wU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"events"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sonu Nigam Live in Concert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sun, 23 Feb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Phoenix Marketcity, Bengaluru"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rambo Circus - Olympian Circus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sat, 11 Jan onwards"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Olympian circus, J.P nagar"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Anubhav Singh Bassi Stand-up Comedy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sat, 4 Jan onwards"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"St. John's Auditorium"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aakash Gupta - Daily Ka Kaam Hai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"This Weekend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Prestige Centre"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Japan Habba"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"This Weekend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Phoenix Marketcity, Bengaluru"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see the code &lt;a href="https://github.com/addy999/onequery" rel="noopener noreferrer"&gt;here&lt;/a&gt;. AI options include &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, &lt;a href="https://anthropic.com/" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt; or &lt;a href="https://deepseek.com/" rel="noopener noreferrer"&gt;DeepSeek&lt;/a&gt;. All work well but I haven't done a deep comparison yet.&lt;/p&gt;

&lt;p&gt;The project is still under development so comments and contributions are welcome!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>powerfuldevs</category>
      <category>webscraping</category>
      <category>data</category>
    </item>
    <item>
      <title>Browsing the web with AI - Perplexity vs Copilot vs AI agents</title>
      <dc:creator>Addy Bhatia</dc:creator>
      <pubDate>Fri, 03 Jan 2025 14:58:22 +0000</pubDate>
      <link>https://dev.to/addy999/browsing-the-web-with-ai-perplexity-vs-copilot-vs-ai-agents-3456</link>
      <guid>https://dev.to/addy999/browsing-the-web-with-ai-perplexity-vs-copilot-vs-ai-agents-3456</guid>
      <description>&lt;p&gt;I'm diving head first into AI agents to find up to date info and I realized I need a consistent benchmark to measure results.&lt;/p&gt;

&lt;p&gt;So this is part of a series of small tests where we start with a query and compare how different tools provide results.&lt;/p&gt;

&lt;p&gt;The tools I chose to compare (not exhaustive):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.perplexity.ai/" rel="noopener noreferrer"&gt;Perplexity&lt;/a&gt; - an LLM search-engine with up-to-date data from the web

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.google.com/" rel="noopener noreferrer"&gt;Google AI Overview&lt;/a&gt;  discarded because it's hard to reproduce results&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://copilot.microsoft.com/" rel="noopener noreferrer"&gt;Copilot&lt;/a&gt; - LLM with internet connection (similar to ChatGPT with browsing enabled)&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://onequery.app/" rel="noopener noreferrer"&gt;OneQuery&lt;/a&gt; - AI agent to browse the web&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;To keep things consistent, I'm going to paste the raw results from these tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) Task
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Find two issues open on the pyppeteer PR&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2) 💡 Results
&lt;/h2&gt;

&lt;p&gt;Let's look at how each tool performed.&lt;/p&gt;

&lt;h3&gt;
  
  
  ♾️ Perplexity
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The two open issues on the Pyppeteer pull request (PR) relate to functionality and compatibility concerns within the library:&lt;br&gt;
&lt;strong&gt;1. Browser Connection Issues&lt;/strong&gt;: One issue involves difficulties in establishing a connection to the browser when running Pyppeteer on specific platforms like PythonAnywhere. The user reports that while their code works locally, it fails on the server due to problems with the WebSocket endpoint URL, specifically when attempting to call &lt;code&gt;urlopen(url)&lt;/code&gt; on a local address (&lt;code&gt;http://127.0.0.1:46574/json/version&lt;/code&gt;). This indicates that the server's environment does not support socket connections properly, leading to unexpected browser closure errors.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.pythonanywhere.com/forums/topic/28206/" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;2. Deprecation Warnings in Async Code&lt;/strong&gt;: Another issue raised pertains to the use of deprecated features in Python 3.8 and later versions. The user has encountered a DeprecationWarning when using asyncio.wait() with coroutine objects, which is set for removal in Python 3.11. They are seeking a more current implementation that adheres to best practices and avoids these warnings, suggesting a transition to using asyncio.gather() instead.&lt;br&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/74963221/pyppeteer-page-click-and-page-waitfornavigation-issues-while-going-through-mult" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  👉 AI Agent (OneQuery)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"issues"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"3 weeks ago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"can not get document object in evaluate function"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datuizhuang"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"User is unable to get document object in evaluate function, receiving None as result. When using page.evaluate(&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;'document&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;') or page.evaluate(&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;document.querySelector(&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;'body&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;')&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;) it returns None, but page.querySelector(&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;'body&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;') works correctly."&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/pyppeteer/pyppeteer/issues/486"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2 weeks ago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Generate fingerprint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"krolaper"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Issue #487 related to fingerprint generation, though specific details are not provided in the given text."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/pyppeteer/pyppeteer/issues/487"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎤 Copilot
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here are summaries of two open issues on the Pyppeteer GitHub repository:&lt;br&gt;
&lt;strong&gt;1. Issue #487: "Can not get document object in evaluate function"&lt;/strong&gt; - This issue was opened recently by a user named krolaper. The problem is related to the inability to retrieve the document object when using the &lt;code&gt;evaluate&lt;/code&gt; function in Pyppeteer. This issue is currently open and awaiting a solution.&lt;br&gt;
&lt;strong&gt;2. Issue #484: "Chrome version --\u003E (129.0) open a blank browser window in headless mode!"&lt;/strong&gt; - Reported by Basselfathy, this issue involves Chrome version 129.0 opening a blank browser window when running in headless mode. This problem is causing difficulties for users who rely on headless browsing for automation tasks.&lt;br&gt;
Would you like more details on any of these issues?&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/pyppeteer/pyppeteer/issues" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3) 🔎 Compare
&lt;/h2&gt;

&lt;p&gt;Accuracy will be judged on if these tools can return the &lt;strong&gt;latest&lt;/strong&gt; open issues as well as ease of use.&lt;/p&gt;

&lt;p&gt;At the time of this post, these are the current open issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pyppeteer/pyppeteer/issues/487" rel="noopener noreferrer"&gt;Generate fingerprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pyppeteer/pyppeteer/issues/486" rel="noopener noreferrer"&gt;can not get document object in evaluate function&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
   &lt;thead&gt;
      &lt;tr&gt;
         &lt;th&gt;Tool&lt;/th&gt;
         &lt;th&gt;Accuracy&lt;/th&gt;
         &lt;th&gt;Ease of use&lt;/th&gt;
      &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
      &lt;tr&gt;
         &lt;td&gt;Perplexity&lt;/td&gt;
         &lt;td&gt;❌ - Stale issues&lt;/td&gt;
         &lt;td&gt;✅ Simple API&lt;br&gt;✅ Returns citations&lt;br&gt;✅ Low latency&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;AI Agent&lt;/td&gt;
         &lt;td&gt;✅ - Current issues&lt;/td&gt;
         &lt;td&gt;✅ Simple API&lt;br&gt;✅ Returns citations&lt;br&gt;⚠️ Async instead of instant, takes about a minute&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;Copilot&lt;/td&gt;
         &lt;td&gt;⚠️ - Got 1/2 issues right&lt;/td&gt;
         &lt;td&gt;⚠️ No API&lt;br&gt;✅ Returns citations&lt;br&gt;✅ Low latency&lt;/td&gt;
      &lt;/tr&gt;
   &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Seems like LLMs are great at getting instant results but because of their large index, it's hard to nail down factual data with accuracy. It might be possible to get "real time" data if prompted with extra context, such as "what are the issues in December 2024". AI agents have an upper hand here since they &lt;code&gt;browse&lt;/code&gt; the web for you. But due to their async nature, it's easier to use them in the background than as part of a data fetching script.&lt;/p&gt;




&lt;p&gt;&lt;br&gt;&lt;br&gt;
This was a fun exercise as I learn more about this field, hope it was an interesting read! To keep in mind: the comparisons are judged according to a developer's POV not a regular user.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>webdev</category>
      <category>api</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
