<?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: Vince Lwt</title>
    <description>The latest articles on DEV Community by Vince Lwt (@vincelwt).</description>
    <link>https://dev.to/vincelwt</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%2F1191888%2Fcf64fae8-17ca-4e83-86e9-ca7d3ba0b0dc.png</url>
      <title>DEV Community: Vince Lwt</title>
      <link>https://dev.to/vincelwt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vincelwt"/>
    <language>en</language>
    <item>
      <title>Looking for something simpler than LangChain?</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Sun, 09 Feb 2025 15:52:31 +0000</pubDate>
      <link>https://dev.to/vincelwt/looking-for-something-simpler-than-langchain-4oj1</link>
      <guid>https://dev.to/vincelwt/looking-for-something-simpler-than-langchain-4oj1</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/lunary_hugh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2838018%2F57f8e08f-a749-4622-8a4c-82c24d16e0e8.jpeg" alt="lunary_hugh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/lunary_hugh/abso-the-universal-typescript-sdk-for-ai-one-interface-all-llms-1op5" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Abso: The Universal TypeScript SDK for AI - One Interface, All LLMs 🐠&lt;/h2&gt;
      &lt;h3&gt;Hugues Chocart ・ Feb 9&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#llm&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#openai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#typescript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>llm</category>
      <category>openai</category>
      <category>typescript</category>
      <category>ai</category>
    </item>
    <item>
      <title>⭐ 6 Open-Source Vector Databases to Power Your AI App 🔗💽</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Fri, 22 Dec 2023 14:47:41 +0000</pubDate>
      <link>https://dev.to/lunary/6-open-source-vector-databases-to-power-your-ai-app-o45</link>
      <guid>https://dev.to/lunary/6-open-source-vector-databases-to-power-your-ai-app-o45</guid>
      <description>&lt;p&gt;In the era of AI-driven applications, the ability to efficiently handle and search through vector data is crucial. &lt;/p&gt;

&lt;p&gt;Vector databases are designed specifically for this purpose, providing a robust infrastructure for applications such as retrieval-augmented generation (RAG) apps, recommendation systems, and advanced search engines. &lt;/p&gt;

&lt;p&gt;Whether you're creating an app to "Chat with a PDF" or need to power a complex recommendation system, vector databases are the engines under the hood that make it all possible.&lt;/p&gt;

&lt;p&gt;Today we're diving into 6 open-source vector databases that not only store vectors efficiently but also offer powerful search capabilities, scalability, and ease of integration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p5ykfvc9j49615alh8c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p5ykfvc9j49615alh8c.gif" alt="Cat let's do this"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Before we jump into the list, we wanted to mention our open-source project &lt;strong&gt;Lunary.ai&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌌 &lt;a href="https://github.com/lunary-ai/lunary" rel="noopener noreferrer"&gt;Lunary.ai&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" alt="lunary"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;Lunary.ai&lt;/strong&gt;, we're building an open-source toolkit for AI developers that's a cut above the rest. &lt;/p&gt;

&lt;p&gt;Key features of Lunary.ai include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observability&lt;/strong&gt;: Keep a close eye on your models' performance, costs and behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Management&lt;/strong&gt;: Craft and fine-tune prompts to perfection. Collaborate with non-technical team members.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat Tracking&lt;/strong&gt;: Record chatbot interactions to ensure your AI stays on track.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our platform is designed for developers by developers. We understand the challenges that come with AI development, and that's why we're building the tools to help you best.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/lunary-ai/lunary" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;🌟 Star us on GitHub 🌟&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧲 &lt;a href="https://github.com/pgvector/pgvector" rel="noopener noreferrer"&gt;PGVector&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g2oji8dzdlurybfcguw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g2oji8dzdlurybfcguw.gif" alt="PGVector"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PGVector&lt;/strong&gt; brings the power of vector similarity search to Postgres. Its seamless integration with Postgres allows you to store vectors alongside other data types, enjoying the full suite of Postgres features like ACID compliance and point-in-time recovery.&lt;/p&gt;

&lt;p&gt;Unique aspects of PGVector:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compatibility&lt;/strong&gt;: Works with any language that has a Postgres client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile&lt;/strong&gt;: Supports exact and approximate nearest neighbor search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diverse Metrics&lt;/strong&gt;: Accommodates L2 distance, inner product, and cosine distance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drawbacks: While powerful, PGVector's reliance on Postgres may not suit all use cases, especially when specialized vector database functionality is needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pgvector/pgvector" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star PGVector on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 &lt;a href="https://github.com/weaviate/weaviate" rel="noopener noreferrer"&gt;Weaviate&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F490dl19mfi0xofauxnxc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F490dl19mfi0xofauxnxc.gif" alt="Weaviate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weaviate&lt;/strong&gt; is an AI-native vector database that excels in creating intuitive and reliable AI-powered applications. It uniquely combines vector and keyword search, enhancing semantic understanding and accuracy.&lt;/p&gt;

&lt;p&gt;Why Weaviate stands out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual Search&lt;/strong&gt;: Offers both vector and keyword search capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration-Friendly&lt;/strong&gt;: Supports a variety of neural search frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vectorization Modules&lt;/strong&gt;: Choose from Weaviate's modules for out-of-the-box vectorization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Potential drawbacks: The richness of features may come with a steeper learning curve for developers new to vector databases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/weaviate/weaviate" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star Weaviate on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 &lt;a href="https://github.com/chroma-core/chroma" rel="noopener noreferrer"&gt;ChromaDB&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlogveq9eb31x752h0k1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlogveq9eb31x752h0k1.gif" alt="ChromaDB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChromaDB&lt;/strong&gt; is all about simplicity and developer productivity. It's a vector database designed for speed and ease of use, especially when building Python or JavaScript LLM apps.&lt;/p&gt;

&lt;p&gt;ChromaDB's distinctive features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer-Friendly&lt;/strong&gt;: Boasts a fully-typed, tested, and documented API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Runs in a python notebook and scales to your cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich Feature Set&lt;/strong&gt;: Offers queries, filtering, and density estimation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drawbacks: ChromaDB's focus on simplicity may limit some advanced use cases that require more complex database operations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/chroma-core/chroma" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star ChromaDB on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 &lt;a href="https://github.com/milvus-io/milvus" rel="noopener noreferrer"&gt;Milvus&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kj50lxujpkrgg429v0q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kj50lxujpkrgg429v0q.gif" alt="Milvus"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Milvus&lt;/strong&gt; is a cloud-native vector database that is highly scalable and elastic. It's designed to make unstructured data search more accessible, with a consistent user experience across various environments.&lt;/p&gt;

&lt;p&gt;What makes Milvus special:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Delivers millisecond search on trillion vector datasets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elasticity&lt;/strong&gt;: Stateless components enhance scalability and flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Search&lt;/strong&gt;: Supports both vectors and scalar data types for complex searches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drawbacks: The sophistication of Milvus might be overkill for smaller projects that don't require its extensive feature set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/milvus-io/milvus" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star Milvus on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 &lt;a href="https://github.com/qdrant/qdrant" rel="noopener noreferrer"&gt;Qdrant&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpi62arp7u7y9j0sfjeu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpi62arp7u7y9j0sfjeu.gif" alt="Qdrant"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qdrant&lt;/strong&gt; is a vector similarity search engine and database written in Rust, making it fast and reliable even under high load. It's tailored to extended filtering support, which is useful for a variety of applications.&lt;/p&gt;

&lt;p&gt;Qdrant's key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust Performance&lt;/strong&gt;: Offers speed and reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extended Filtering&lt;/strong&gt;: Ideal for neural-network or semantic-based matching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-Ready&lt;/strong&gt;: Provides a convenient API for storage, search, and management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Potential drawbacks: The Rust-based nature of Qdrant might present a learning curve for teams not familiar with the language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/qdrant/qdrant" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star Qdrant on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🔎 &lt;a href="https://github.com/elastic/elasticsearch" rel="noopener noreferrer"&gt;ElasticSearch&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk956qh3fr2uy8u0z4lmt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk956qh3fr2uy8u0z4lmt.gif" alt="Elastic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While &lt;strong&gt;ElasticSearch&lt;/strong&gt; isn't a dedicated vector database, it's an invaluable tool for storing and searching over vector data. It's optimized for speed and relevance on production-scale workloads.&lt;/p&gt;

&lt;p&gt;ElasticSearch's advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Architecture&lt;/strong&gt;: Ideal for real-time search on large datasets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatility&lt;/strong&gt;: Handles vector search, full-text search, logs, metrics, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drawbacks: ElasticSearch's broad scope may require additional configuration to optimize for vector-specific use cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/elastic/elasticsearch" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star ElasticSearch on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;Vector databases are the unsung heroes of AI applications, providing the infrastructure needed for sophisticated data handling and retrieval. &lt;/p&gt;

&lt;p&gt;Whether you're building a chatbot that can converse with a PDF or a complex recommendation engine, these open-source vector databases offer the power and flexibility to bring your ideas to life.&lt;/p&gt;

&lt;p&gt;Do you have experience with any of these vector databases, or do you have another favorite that didn't make the list? Share your thoughts in the comments and let's discuss the best database for the job!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>database</category>
      <category>github</category>
    </item>
    <item>
      <title>⭐ 9 Open Source tools to take your AI app to the next level 🚀🤖</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Mon, 06 Nov 2023 06:43:03 +0000</pubDate>
      <link>https://dev.to/lunary/10-open-source-tools-to-take-your-ai-app-to-the-next-level-59b7</link>
      <guid>https://dev.to/lunary/10-open-source-tools-to-take-your-ai-app-to-the-next-level-59b7</guid>
      <description>&lt;p&gt;The AI ecosystem is booming. &lt;/p&gt;

&lt;p&gt;If you've started building AI-powered apps, you might have missed some of those awesome open-source projects that can help you make your LLM queries, more relevant and improve the general quality of your chatbots and AI apps.&lt;/p&gt;

&lt;p&gt;Here are 9 projects to take your app to the next level in 2023.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjumj7mw1keatqorh6rv8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjumj7mw1keatqorh6rv8.gif" alt="go"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/llmonitor/llmonitor" rel="noopener noreferrer"&gt;LLMonitor&lt;/a&gt; (sponsored)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" alt="llmonitor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLMonitor&lt;/strong&gt; is an all-in-one open-source toolkit for AI devs ready to take their app to production, with features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💵 &lt;strong&gt;Cost&lt;/strong&gt; &amp;amp; &lt;strong&gt;latency&lt;/strong&gt; analytics&lt;/li&gt;
&lt;li&gt;👪 &lt;strong&gt;Users&lt;/strong&gt; tracking&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Traces&lt;/strong&gt; to debug easily&lt;/li&gt;
&lt;li&gt;🔍 Inspect &amp;amp; &lt;strong&gt;replay&lt;/strong&gt; AI requests&lt;/li&gt;
&lt;li&gt;🏷️ &lt;strong&gt;Label&lt;/strong&gt; and export fine-tuning datasets&lt;/li&gt;
&lt;li&gt;🖲️ Collect &lt;strong&gt;feedback&lt;/strong&gt; from users&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Evaluate&lt;/strong&gt; prompts against tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you're ready for users to try your app, using an observability solution is essential. &lt;/p&gt;

&lt;p&gt;We invite you to give LLMonitor a shot (it's completely free up to 1000 events / day).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/llmonitor/llmonitor" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Give LLMonitor a ⭐️ on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/guidance-ai/guidance" rel="noopener noreferrer"&gt;Guidance&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Guidance is a new language format released by Microsoft allowing to create complex agent flows. It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;experts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;guidance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'''&lt;/span&gt;&lt;span class="s"&gt;
{{#system~}}
You are a helpful and terse assistant.
{{~/system}}

{{#user~}}
I want a response to the following question:
{{query}}
Name 3 world-class experts (past or present) who would be great at answering this?
Don&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t answer the question yet.
{{~/user}}

{{#assistant~}}
{{gen &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;expert_names&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; temperature=0 max_tokens=300}}
{{~/assistant}}

{{#user~}}
Great, now please answer the question as if these experts had collaborated in writing a joint anonymous answer.
{{~/user}}

{{#assistant~}}
{{gen &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; temperature=0 max_tokens=500}}
{{~/assistant}}
&lt;/span&gt;&lt;span class="sh"&gt;'''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;gpt4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This interleaving of generation and prompting allows for precise output structure that might help produce clear and parsable results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/guidance-ai/guidance" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/BerriAI/litellm" rel="noopener noreferrer"&gt;LiteLLM&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Call any LLM API using the OpenAI format (Bedrock, Huggingface, Cohere, TogetherAI, Azure, OpenAI, etc.)&lt;/p&gt;

&lt;p&gt;For example, integrating Anthropic will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;litellm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;## set ENV variables
&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, how are you?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, you can integrate different models in your app without learning and intergrating new APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/BerriAI/litellm" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/getzep/zep" rel="noopener noreferrer"&gt;Zep&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3s5a00f6uk90aop5vny.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3s5a00f6uk90aop5vny.jpeg" alt="Zep"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zep allows you to summarize, embed, and enhance chat histories and documents asynchronously. It ensures that these operations do not impact the chat experience of your users. &lt;/p&gt;

&lt;p&gt;With Zep, chatbot histories are persisted to a database, enabling you to easily scale out as your user base grows.&lt;/p&gt;

&lt;p&gt;As a drop-in replacement for popular LangChain components, Zep allows you to get your application into production within minutes, without the need to rewrite your existing code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/getzep/zep" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/langchain-ai/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Who hasn't heard of LangChain by the now? LangChain is the most popular AI framework allowing you to plug together models into chains, with vector stores and more to build powerful AI apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/langchain-ai/langchain" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/confident-ai/deepeval" rel="noopener noreferrer"&gt;DeepEval&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0uco0v6g37yeo46mgbhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0uco0v6g37yeo46mgbhg.png" alt="DeepEval"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DeepEval is an evaluation framework designed for LLM apps that is straightforward to use and available open-source.&lt;/p&gt;

&lt;p&gt;It functions similarly to Pytest, but with a specialization in testing LLM applications. DeepEval assesses using metrics like factual consistency, accuracy, and answer relevancy utilizing LLMs along with various other NLP models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/confident-ai/deepeval" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/pgvector/pgvector" rel="noopener noreferrer"&gt;pgVector&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;pgVector is a Postgres extension to store your embeddings and perform operations such as similarity search. &lt;/p&gt;

&lt;p&gt;If you're using Supabase, pgVector is already available.&lt;/p&gt;

&lt;p&gt;You could use pgVector instead of specialized vector databases Pinecone to simplify your stack. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pgvector/pgvector" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/promptfoo/promptfoo" rel="noopener noreferrer"&gt;promptfoo&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8eepsigk70oyxjr0t8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8eepsigk70oyxjr0t8z.png" alt="promptfoo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With promptfoo, similarly to deepEval, you can test your prompts &amp;amp; models against predefined test cases. &lt;/p&gt;

&lt;p&gt;Evaluate quality and catch regressions by comparing LLM outputs side-by-side, score outputs automatically by defining test cases. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/promptfoo/promptfoo" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://github.com/lgrammel/modelfusion" rel="noopener noreferrer"&gt;Model Fusion&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Model Fusion is a TypeScript library designed for building AI applications, chatbots, and agents. &lt;/p&gt;

&lt;p&gt;It offers support for a wide range of models, including text generation, image generation, text-to-speech, speech-to-text, and embedding models. &lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multimodal: combine different modalities such as text, images, and speech.&lt;/li&gt;
&lt;li&gt;Streaming: Model Fusion supports streaming for many generation models, including text streaming, structure streaming, and full duplex speech streaming.&lt;/li&gt;
&lt;li&gt;Utility: Model Fusion provides a set of utility functions for tools and tool usage, vector indices, and guard functions.&lt;/li&gt;
&lt;li&gt;Type inference and validation: Model Fusion leverages TypeScript to infer types and validate model responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful if you're prefer Typescript to Python. &lt;/p&gt;

&lt;p&gt;Model fusion is a quite new but very promising project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/lgrammel/modelfusion" rel="noopener noreferrer"&gt;⭐ Check out on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thank you for reading!&lt;/p&gt;

&lt;p&gt;Any project we missed? please tell us in the comments :)&lt;/p&gt;

&lt;p&gt;A star on our GitHub project would mean the world 🙏 Click on the cat to make him happy 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/llmonitor/llmonitor" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0mpfa3ux5va5mo9z8w6.png" alt="Stars please"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>7 Open Source AI projects to code faster in 2023 🧑‍💻🚀</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Tue, 31 Oct 2023 08:05:38 +0000</pubDate>
      <link>https://dev.to/lunary/7-open-source-ai-projects-to-code-faster-in-2023-2306</link>
      <guid>https://dev.to/lunary/7-open-source-ai-projects-to-code-faster-in-2023-2306</guid>
      <description>&lt;p&gt;It's 2023. You should be at least 50% more productive than last year with all the AI tools that came up.&lt;/p&gt;

&lt;p&gt;Here are 7 &lt;strong&gt;open-source tools&lt;/strong&gt; that you can add to your development workflow to be faster and more productive. These tools go from simple code completion, to full fledged app builders.&lt;/p&gt;

&lt;p&gt;Feel free to explore these projects, contribute to your favorites, and support them by starring their repositories.🌟&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p5ykfvc9j49615alh8c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p5ykfvc9j49615alh8c.gif" alt="Cat let's do this"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 &lt;a href="https://github.com/continuedev/continue" rel="noopener noreferrer"&gt;continue&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpphdn3ewowgf8ke90xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpphdn3ewowgf8ke90xz.png" alt="Continue.dev"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've used the &lt;strong&gt;Cursor editor&lt;/strong&gt;, Continue is the closest to what you can get in open-source. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continue&lt;/strong&gt; serves as an &lt;strong&gt;open-source code copilot&lt;/strong&gt;, acting as an IDE extension that integrates into VS Code and JetBrains. &lt;/p&gt;

&lt;p&gt;It facilitates &lt;strong&gt;autocompletion&lt;/strong&gt;, answers coding queries, enables &lt;strong&gt;editing&lt;/strong&gt; in natural language, file generation from scratch, and &lt;strong&gt;debugging&lt;/strong&gt; errors/exceptions. It employs GPT-4 and GPT-3.5-turbo via the OpenAI API but is configurable to use other LLM. &lt;/p&gt;

&lt;p&gt;A cool feature is its error understanding functionality which, when triggered, throws the stack trace into Continue to explain the issue to the user​.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/continuedev/continue" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🏎️ &lt;a href="https://github.com/Pythagora-io/gpt-pilot" rel="noopener noreferrer"&gt;gpt-pilot&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftutgnlijl9gi79kv0d1z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftutgnlijl9gi79kv0d1z.gif" alt="gpt-pilot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT Pilot&lt;/strong&gt; helps &lt;strong&gt;expedite app development by 20x&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;You define your app idea, and GPT Pilot handles the rest—setting up the environment, coding, and even seeking your review after each task. &lt;/p&gt;

&lt;p&gt;It's like having a coder to handle the legwork while you oversee the project.&lt;/p&gt;

&lt;p&gt;This project explores GPT-4's potential in creating production-ready apps, with the belief that AI can handle 95% of the code, while developers cover the remaining 5% (till we achieve full AGI​1​ at least).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Pythagora-io/gpt-pilot" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 &lt;a href="https://github.com/m1guelpf/auto-commit" rel="noopener noreferrer"&gt;auto-commit&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;auto-commit&lt;/strong&gt; is a super simple CLI tool that will &lt;strong&gt;auto-generate commit messages&lt;/strong&gt; for you. Not the biggest game-changer, but that's something less to think about!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1587127315317723136-965" src="https://platform.twitter.com/embed/Tweet.html?id=1587127315317723136"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1587127315317723136-965');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1587127315317723136&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/m1guelpf/auto-commit" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ &lt;a href="https://github.com/OpenBMB/ChatDev" rel="noopener noreferrer"&gt;ChatDev&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ChatDev&lt;/strong&gt; is like a virtual software company run by &lt;strong&gt;AI agents&lt;/strong&gt; embodying various roles—from &lt;strong&gt;CEOs&lt;/strong&gt; to &lt;strong&gt;programmers&lt;/strong&gt;, all collaborating to "revolutionize the digital world through programming." It offers a customizable, extendable framework based on LLMs, ideal for exploring collective intelligence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh0j4r2slfcxupb4aoki.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh0j4r2slfcxupb4aoki.gif" alt="chatdev"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/OpenBMB/ChatDev" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧑‍🚀 &lt;a href="https://github.com/TabbyML/tabby" rel="noopener noreferrer"&gt;TabbyML&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Tabby is a &lt;strong&gt;self-hosted AI coding assistant&lt;/strong&gt;, presenting an open-source and on-premises &lt;strong&gt;alternative to GitHub Copilot&lt;/strong&gt;. Its key features include being self-contained with no need for a DBMS or cloud service, an OpenAPI interface for easy integration with existing infrastructure like Cloud IDEs, and support for &lt;strong&gt;laptop GPUs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yzd7qwe2cc0itr35eq3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yzd7qwe2cc0itr35eq3.gif" alt="tabby"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/TabbyML/tabby" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🛜 &lt;a href="https://github.com/danielgross/localpilot" rel="noopener noreferrer"&gt;localpilot&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;localpilot is a &lt;strong&gt;local proxy&lt;/strong&gt; that allows you to use the native &lt;strong&gt;GitHub Copilot&lt;/strong&gt; with local open-source models such as &lt;strong&gt;Mistral-7b&lt;/strong&gt; or &lt;strong&gt;CodeLlama&lt;/strong&gt;. By plugging directly into the native GitHub copilot extension, you can easily switch between models if they don't satisfy your needs.&lt;/p&gt;

&lt;p&gt;This also allows you to use GitHub Copilot &lt;strong&gt;offline&lt;/strong&gt; (finally!).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoy7tk59zky0kx384h59.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoy7tk59zky0kx384h59.gif" alt="localpilot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/danielgross/localpilot" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Star on GitHub&lt;/a&gt;
&lt;/p&gt;




&lt;h1&gt;
  
  
  More AI projects
&lt;/h1&gt;




&lt;h2&gt;
  
  
  📈 &lt;a href="https://github.com/llmonitor/llmonitor" rel="noopener noreferrer"&gt;llmonitor&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajkymh104pj8pwqh0p59.png" alt="llmonitor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're building an LLM-powered app, you need to a way to monitor your queries and track costs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLMonitor&lt;/strong&gt; helps you with just that. &lt;/p&gt;

&lt;p&gt;LLMonitor helps AI devs monitor their apps in production, with features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💵 Cost, token &amp;amp; latency &lt;strong&gt;analytics&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;👪 Track &lt;strong&gt;users&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Traces&lt;/strong&gt; to debug easily&lt;/li&gt;
&lt;li&gt;🔍 Inspect full requests&lt;/li&gt;
&lt;li&gt;🏷️ &lt;strong&gt;Label&lt;/strong&gt; and &lt;strong&gt;export&lt;/strong&gt; fine-tuning datasets&lt;/li&gt;
&lt;li&gt;🖲️ Collect &lt;strong&gt;feedback&lt;/strong&gt; from users&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Unit tests&lt;/strong&gt; &amp;amp; prompt evaluations (soon)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤖 Usable with any model, not just OpenAI&lt;/li&gt;
&lt;li&gt;📦 Easy to integrate (2 minutes)&lt;/li&gt;
&lt;li&gt;🧑‍💻 Simple to self-host (deploy to Vercel &amp;amp; Supabase)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready to take your app to prod?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/llmonitor/llmonitor" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐ Give LLMonitor a ⭐️ on GitHub!&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🍥 &lt;a href="https://github.com/swirlai/swirl-search" rel="noopener noreferrer"&gt;swirl&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxaw7ds6qzzoj6u2201zt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxaw7ds6qzzoj6u2201zt.gif" alt="Swirl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swirl&lt;/strong&gt;, is a search platform that changes how you interact with your data.&lt;/p&gt;

&lt;p&gt;Think of it as ChatGPT explicitly tailored for your unique datasets. Whether it's notes, code snippets, PDF files, or emails, Swirl is your go-to platform for instant, AI-driven insights.&lt;/p&gt;

&lt;p&gt;Features that set Swirl apart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Universal Search&lt;/strong&gt;: Seamlessly search through notes, codes, docs, databases, emails, chats, logs, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile Answer Formats&lt;/strong&gt;: Get responses in ChatGPT, BingAI, or Bard styles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Saver&lt;/strong&gt;: Become more efficient with instant answers, turning Swirl into your ultimate knowledge companion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal AI-Powered Knowledge Assistant&lt;/strong&gt;: You can build a secure, searchable knowledge base for your company, startup or personal data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready to explore?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/swirlai/swirl-search" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;🌟 Give Swirl a ⭐️ on GitHub!&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;Do you know how any other tool that boosts developer productivity? share it in the comments so everyone can check it out :)&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>productivity</category>
      <category>github</category>
    </item>
    <item>
      <title>What's your honest opinion of the Next.js App Router?</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Mon, 30 Oct 2023 05:36:00 +0000</pubDate>
      <link>https://dev.to/lunary/whats-your-honest-opinion-of-the-nextjs-app-router-2n12</link>
      <guid>https://dev.to/lunary/whats-your-honest-opinion-of-the-nextjs-app-router-2n12</guid>
      <description>&lt;p&gt;So I tried using the App Router in a new project, but to be honest it felt weird.&lt;/p&gt;

&lt;p&gt;For example: server forms, where the backend logic ends up in the same file as the frontend, but it's not clear which code is executed where? not being able to use &lt;code&gt;useState&lt;/code&gt; and &lt;code&gt;useEffect&lt;/code&gt; in server components, but it works when splitting in another file?&lt;/p&gt;

&lt;p&gt;I feel like I just don't get it. Pages router seemed much simpler and clearer.&lt;/p&gt;

&lt;p&gt;Maybe I just need to rethink how everything is done, but I don't know, the performance improvements seemed minimal for my use case.&lt;/p&gt;

&lt;p&gt;With Next.js 14 coming out, curious to hear from people that fully made the switch on big projects, or those that tried it but didn't get it like me, what do you think? Is it really the future of web dev or meh? &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Password Reset Page with Supabase and Next.js</title>
      <dc:creator>Vince Lwt</dc:creator>
      <pubDate>Mon, 23 Oct 2023 09:41:12 +0000</pubDate>
      <link>https://dev.to/lunary/password-reset-page-with-supabase-and-nextjs-5de9</link>
      <guid>https://dev.to/lunary/password-reset-page-with-supabase-and-nextjs-5de9</guid>
      <description>&lt;p&gt;In this tutorial, we will create a password reset page using Supabase and Next.js. &lt;/p&gt;

&lt;p&gt;We will create two pages: one for requesting a password reset and another for updating the password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Setting up the Request Password Reset Page
&lt;/h2&gt;

&lt;p&gt;First, let's create a page where users can request a password reset. We'll call this page request-reset.tsx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useSessionContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@supabase/auth-helpers-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;PasswordReset&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;supabaseClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSessionContext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handlePasswordReset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supabaseClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resetPasswordForEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;redirectTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/update-password`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Password reset email sent.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Forgot&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handlePasswordReset&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
          &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
          &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Your email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;Submit&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using &lt;code&gt;supabaseClient.auth.resetPasswordForEmail&lt;/code&gt;, we instruct Supabase to send a password reset email with a link to our second page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Setting up the Update Password Page
&lt;/h2&gt;

&lt;p&gt;Next, let's create a page where users can update their password after they have received the password reset email. We'll call this page update-password.tsx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useSessionContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useUser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@supabase/auth-helpers-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/router&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;UpdatePassword&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPassword&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;supabaseClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSessionContext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handlePasswordReset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supabaseClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Password updated successfully&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

      &lt;span class="c1"&gt;// Redirect your user to the app&lt;/span&gt;
      &lt;span class="nx"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Reset&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;onSubmit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handlePasswordReset&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;
          &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setPassword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
          &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;Submit&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/form&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! You've got a basic password reset logic using Supabase and Next.js.&lt;/p&gt;

&lt;p&gt;You can now add the link to &lt;code&gt;/request-reset&lt;/code&gt; on your login page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/request-reset&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;Forgot&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Link&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
