<?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: Chih-Yu Yeh</title>
    <description>The latest articles on DEV Community by Chih-Yu Yeh (@cyyeh).</description>
    <link>https://dev.to/cyyeh</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%2F577089%2Fa5fb9262-91ea-42b4-ad6b-da682f2187b1.jpeg</url>
      <title>DEV Community: Chih-Yu Yeh</title>
      <link>https://dev.to/cyyeh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cyyeh"/>
    <language>en</language>
    <item>
      <title>Querying Your Data Easily and Smartly through Hugging Face</title>
      <dc:creator>Chih-Yu Yeh</dc:creator>
      <pubDate>Tue, 29 Aug 2023 09:48:47 +0000</pubDate>
      <link>https://dev.to/cyyeh/querying-your-data-easily-and-smartly-through-hugging-face-372p</link>
      <guid>https://dev.to/cyyeh/querying-your-data-easily-and-smartly-through-hugging-face-372p</guid>
      <description>&lt;p&gt;&lt;em&gt;TLDR: VulcanSQL, a free and open-source data API framework built specifically for data applications, empowers data professionals to generate and distribute data APIs quickly and effortlessly. It takes your SQL templates and transforms them into data APIs, with no backend expertise necessary.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preface
&lt;/h2&gt;

&lt;p&gt;Normally, in order to retrieve the data we need from a data source, we have to write SQL statements. However, this process could be &lt;strong&gt;time-consuming&lt;/strong&gt; especially when the data consumers have different requirements in short time. Now, to make this process easier and more flexible to data consumers, VulcanSQL has &lt;strong&gt;integrated HuggingFace inference capabilities&lt;/strong&gt;. This allows us to &lt;strong&gt;reduce the need for changing SQL templates&lt;/strong&gt; by simply allowing data consumers to ask questions and getting the results they need.&lt;/p&gt;

&lt;h2&gt;
  
  
  VulcanSQL HuggingFace Filters
&lt;/h2&gt;

&lt;p&gt;VulcanSQL leverages the Hugging Face Inference feature through the VulcanSQL &lt;a href="https://vulcansql.com/docs/develop/advanced#filters"&gt;Filters&lt;/a&gt; statement.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Hugging Face
&lt;/h3&gt;

&lt;p&gt;Hugging Face is an AI community that builds tools to enable users to build, train, and deploy machine learning models. Hugging Face makes it easy to share tools, models, model weights, and datasets among other practitioners through its toolkit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sUaEVsbM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37dfuf0i4oy17kpnhq9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sUaEVsbM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37dfuf0i4oy17kpnhq9d.png" alt="What is Hugging Face" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hugging Face provides the &lt;a href="https://huggingface.co/inference-api"&gt;Inference API&lt;/a&gt; feature that allows users to run pre-trained AI models for various natural language processing (NLP) tasks, making it easier to integrate powerful language models into applications and services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gJrQCEZZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h6cp554od5989qc4m51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gJrQCEZZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h6cp554od5989qc4m51.png" alt="Hugging Face Inference API" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Table Question Answering Task Filter
&lt;/h3&gt;

&lt;p&gt;"&lt;a href="https://huggingface.co/tasks/table-question-answering"&gt;Table Question Answering&lt;/a&gt;" is one of the NLP (Natural Language Processing) tasks provided by Hugging Face. Table Question Answering involves answering a question about the information in a given table. It allows for simulating SQL execution by inputting a table through its model.&lt;/p&gt;

&lt;p&gt;VulcanSQL currently integrates the table question answering feature by creating the filter named &lt;code&gt;huggingface_table_question_answering&lt;/code&gt; and allows you to apply functions to variables using the pipe operator (&lt;code&gt;|&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample 1 - send the data from the variable &lt;code&gt;set&lt;/code&gt; tag:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You could give the dataset with the &lt;strong&gt;&lt;code&gt;set&lt;/code&gt; tag&lt;/strong&gt; and give the question with the &lt;code&gt;query&lt;/code&gt; field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="k"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"vulcan-sql"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;"topic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;"analytics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"data-lake"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"data-warehouse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"api-builder"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="nv"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;"Create and share Data APIs fast! Data API framework for DuckDB, ClickHouse, Snowflake, BigQuery, PostgreSQL"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"accio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;"topic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;"data-analytics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"data-lake"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"data-warehouse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"bussiness-intelligence"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="nv"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"Query Your Data Warehouse Like Exploring One Big View."&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"hello-world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;"topic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
    &lt;span class="nv"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"Sample repository for testing"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;-- The source data for "huggingface_table_question_answering" needs to be an array of objects.&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="k"&gt;data&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;huggingface_table_question_answering&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;"How many repositories related to data-lake topic?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is a response returned by &lt;code&gt;huggingface_table_question_answering&lt;/code&gt;:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&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;answer&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;COUNT &amp;gt; vulcan-sql, accio&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;coordinates&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:[[0,0],[1,0]],&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;cells&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;vulcan-sql&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;accio&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;aggregator&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;COUNT&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&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;The result will be converted to a JSON string from &lt;code&gt;huggingface_table_question_answering&lt;/code&gt;. You could decompress the JSON string and use the result by yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample 2 - send the data from the &lt;code&gt;req&lt;/code&gt; tag:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You could also use the &lt;code&gt;req&lt;/code&gt; tag to keep the query result from the previous SQL condition and save it to a variable named &lt;code&gt;repositories&lt;/code&gt;. Then you can use &lt;code&gt;.value()&lt;/code&gt; to get the data result and pass it to &lt;code&gt;huggingface_table_question_answering&lt;/code&gt; with the pipe operator &lt;code&gt;|&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="n"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;read_csv_auto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Top200StaredRepositories.csv'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endreq&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="n"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;huggingface_table_question_answering&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wait_for_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may see we also pass the value &lt;code&gt;true&lt;/code&gt; to the &lt;code&gt;wait_for_model&lt;/code&gt; field, which means waiting for the HuggingFace table question answering to load the pre-trained model; otherwise it may fail due to the model not being loaded completely. For more information, please see the &lt;a href="https://vulcansql.com/docs/extensions/huggingface/huggingface-table-question-answering"&gt;VulcanSQL's Hugging Face Table Question Answering Filter Extension Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now we could request API with different questions by the parameter &lt;code&gt;question&lt;/code&gt; and get different results!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1&lt;/strong&gt; - We asked &lt;code&gt;Find the repository has the most stars?&lt;/code&gt;, and the Hugging Face model told us that freeCodeCamp has the most stars.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a7ERdsoL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42gzn9ft1buxc4zdkctf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a7ERdsoL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42gzn9ft1buxc4zdkctf.png" alt="scenario 1" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2&lt;/strong&gt; - We asked &lt;code&gt;How many repositories use Python language? Give repository name&lt;/code&gt;, and the Hugging Face model told us awesome-python, httpie and thefuck are using Python language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UP_CkM1k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q76k34myvc4e9n6krysu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UP_CkM1k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q76k34myvc4e9n6krysu.png" alt="scenario 2" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you see, after using the &lt;strong&gt;HuggingFace Table Answering Filter, the benefit is:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't need&lt;/strong&gt; to change the SQL template file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't need&lt;/strong&gt; to re-build the SQL template file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't need&lt;/strong&gt; to create another SQL template file to satisfy two query scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Notes: The quality of response depends on the model used in the HuggingFace Table Answering Filter and how we ask the questions to the model.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, VulcanSQL not only provides the Table Question Answering Filter feature but also publishes a popular Text Generation Filter for the Hugging Face Filters Extension.&lt;/p&gt;

&lt;p&gt;It means you could use the popular models &lt;a href="https://ai.meta.com/llama/"&gt;Meta Llama2&lt;/a&gt;! 🥳&lt;/p&gt;

&lt;h3&gt;
  
  
  Text Generation Task Filter
&lt;/h3&gt;

&lt;p&gt;"&lt;a href="https://huggingface.co/tasks/text-generation"&gt;Text Generation&lt;/a&gt;" is another NLP (Natural Language Processing) task provided by Hugging Face. Text generation means producing new text. These models can, for example, fill in incomplete text or paraphrase, or even answer your question according based on your input context.&lt;/p&gt;

&lt;p&gt;VulcanSQL also integrates the text generation feature by creating the filter named &lt;code&gt;huggingface_text_generation&lt;/code&gt; and allows you to apply functions to variables using the pipe operator (&lt;code&gt;|&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Besides, Hugging Face provides the popular &lt;a href="https://huggingface.co/meta-llama"&gt;Meta Llama2&lt;/a&gt; models, a collection of pre-trained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HbVVeRLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7elmeql0ix79v6dzrjzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HbVVeRLA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7elmeql0ix79v6dzrjzc.png" alt="Meta Llama2" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next sample, we are going to demonstrate how VulcanSQL uses the &lt;code&gt;huggingface_text_generation&lt;/code&gt; filter with the Llama2 model &lt;code&gt;meta-llama/Llama-2-13b-chat-hf&lt;/code&gt; to answer your question.&lt;/p&gt;

&lt;p&gt;Notes: If you would like to use the Meta Llama2 model, you have at least two options to choose from:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Subscribe to the &lt;a href="https://huggingface.co/pricing#pro"&gt;Hugging Face Pro Account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://huggingface.co/inference-endpoints"&gt;Hugging Face Inference Endpoints&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more information, please see &lt;a href="https://vulcansql.com/docs/extensions/huggingface/huggingface-text-generation"&gt;VulcanSQL's Text Generation Filter Extension Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample - send the data with the &lt;code&gt;req&lt;/code&gt; tag:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sample uses the HuggingFace access token of the &lt;a href="https://huggingface.co/pricing#pro"&gt;Pro Account&lt;/a&gt; to get &lt;br&gt;
the result by using the &lt;code&gt;meta-llama/Llama-2-13b-chat-hf&lt;/code&gt; model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Using the `meta-llama/Llama-2-13b-chat-hf` model, data must have less than 4096 tokens, so need to limit data row and column for universities.&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="n"&gt;universities&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;institution&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"location code"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"location"&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;read_csv_auto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'2023-QS-World-University-Rankings.csv'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endreq&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="n"&gt;universities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;huggingface_text_generation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;question&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="nv"&gt;"meta-llama/Llama-2-13b-chat-hf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wait_for_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Scenario 1&lt;/strong&gt; - We asked &lt;code&gt;Which university is the top-ranked university?&lt;/code&gt;, and the model gave us the top-ranked university.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fnTv1R2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzt4shbgmtcsgeha8x62.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fnTv1R2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzt4shbgmtcsgeha8x62.png" alt="scenario 1" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2&lt;/strong&gt; - We asked &lt;code&gt;Which university located in the UK is ranked at the top of the list?&lt;/code&gt;, and the model gave us the top-ranked university that is located in the UK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fmtYvZRA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uthuz4f6j08j9ujzqqqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fmtYvZRA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uthuz4f6j08j9ujzqqqz.png" alt="scenario 2" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wow! It's really amazing that the &lt;strong&gt;HuggingFace Text Generation Filter&lt;/strong&gt; can answer your question based on the given dataset!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With more and more great machine learning models coming out, it's great that we can utilize their power to make our daily work easier! We hope this blog post can give you a glimpse on how VulcanSQL can be involved in this revolutionary event in human history!&lt;/p&gt;

&lt;p&gt;Imaging a world that you can deliver APIs that users only need to query questions they have, the model handles SQL logic for you, and VulcanSQL takes care of the &lt;a href="https://vulcansql.com/docs/data-privacy/overview"&gt;data privacy&lt;/a&gt; and &lt;a href="https://vulcansql.com/docs/api-plugin/overview"&gt;API things&lt;/a&gt;. It sounds exciting, isn't it?&lt;/p&gt;

&lt;p&gt;In the near future, we'll publish detailed step-by-step guides to help you write your own AI-enabled filter extensions! Stay tuned!&lt;/p&gt;

</description>
      <category>huggingface</category>
      <category>llm</category>
      <category>api</category>
      <category>sql</category>
    </item>
    <item>
      <title>Make a Admin Panel in Appsmith</title>
      <dc:creator>Chih-Yu Yeh</dc:creator>
      <pubDate>Tue, 18 Jul 2023 02:00:54 +0000</pubDate>
      <link>https://dev.to/cyyeh/make-a-admin-panel-in-appsmith-58ec</link>
      <guid>https://dev.to/cyyeh/make-a-admin-panel-in-appsmith-58ec</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this demo, we'll showcase how &lt;a href="https://vulcansql.com/"&gt;VulcanSQL&lt;/a&gt; and &lt;a href="https://www.appsmith.com/"&gt;Appsmith&lt;/a&gt; make it effortless to create a Data API and build an application. Appsmith is a powerful open-source developer tool that simplifies the creation of internal tools like dashboards and database interfaces. With drag-and-drop functionality, Appsmith enables fast and customizable UI design. By combining VulcanSQL's Data API with Appsmith, you can quickly develop and deploy user-friendly applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sy_7VSEk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://vulcansql.com/assets/images/result-f143d3a6a8b89758bb2b0dd61f7b1bcc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sy_7VSEk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://vulcansql.com/assets/images/result-f143d3a6a8b89758bb2b0dd61f7b1bcc.gif" alt="result gif" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Difficulties
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Managing access and preventing information leakage
&lt;/h3&gt;

&lt;p&gt;Table sharing should be managed in a secure manner to limit access to all data and prevent the spreading of sensitive information. It is crucial to ensure the confidentiality, integrity, and availability of data throughout its lifecycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data lake or data warehouse not suitable for applications
&lt;/h3&gt;

&lt;p&gt;Data lakes and data warehouses may not be ideal for applications that require fast and frequent data access. Users today expect quicker and more frequent access to data for real-time analytics and data-driven decision-making.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hard to control cost
&lt;/h3&gt;

&lt;p&gt;One of the challenges with frequent and fast data access is the increased cost associated with it. Processing large volumes of data and providing real-time access can lead to higher infrastructure costs and resource utilization. Organizations need to carefully optimize their data access strategies to balance the need for speed with cost efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why VulcanSQL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Data access restrictions
&lt;/h3&gt;

&lt;p&gt;With VulcanSQL's &lt;a href="https://vulcansql.com/docs/develop/dynamic-param"&gt;dynamic parameter&lt;/a&gt; feature, users have precise control over the data they access. This enhances data privacy and reduces data transfer, improving efficiency and security. Moreover, VulcanSQL's &lt;a href="https://vulcansql.com/docs/data-privacy/overview"&gt;data privacy handling&lt;/a&gt; ensures the protection of sensitive information through encryption and access control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhance performance with caching mechanism
&lt;/h3&gt;

&lt;p&gt;To address the challenges of low-latency, VulcanSQL implements a caching mechanism using DuckDB. This caching layer allows VulcanSQL to synchronize data from DuckDB and serve it to users without the need to repeatedly connect to the data source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimize cost with caching layer
&lt;/h3&gt;

&lt;p&gt;By leveraging the DuckDB caching layer, VulcanSQL significantly reduces the need to fetch data from the data warehouse for most queries. This results in cost savings as it minimizes the resources consumed by querying the data warehouse. Instead, VulcanSQL can retrieve the data directly from the DuckDB cache, which offers faster access and eliminates the need for frequent queries to the data warehouse. This caching mechanism improves performance and helps optimize costs in data retrieval and processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;To successfully finish this guide, you'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Install VulcanSQL (&lt;a href="https://vulcansql.com/docs/get-started/installation"&gt;Installation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;  Appsmith account (&lt;a href="https://app.appsmith.com/"&gt;Register Appsmith Cloud&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo: VulcanSQL + Appsmith
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Set up your VulcanSQL starter project
&lt;/h3&gt;

&lt;p&gt;First, you need to follow the instruction to create an init template: &lt;a href="https://vulcansql.com/docs/develop/init"&gt;https://vulcansql.com/docs/develop/init&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what it will look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_sNhV0C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-vulcan-sql-start-a58e2d95aadc9c41640787709aefac77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_sNhV0C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-vulcan-sql-start-a58e2d95aadc9c41640787709aefac77.png" alt="appsmith-vulcan-sql-start" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this case, we will use &lt;a href="https://codesandbox.io/p/sandbox/demo-for-appsmith-frpcqz?file=%2Fdata%2Ffood_prices_2020.csv"&gt;&lt;code&gt;food_prices_2020.csv&lt;/code&gt;&lt;/a&gt; to practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write your SQL query
&lt;/h3&gt;

&lt;p&gt;With VulcanSQL's filtering feature, you have the ability to selectively expose specific data to your application. In our example, we have a dataset called food_prices_2020.csv, but we only want to present the fruit prices. To achieve this, we can dynamically add a parameter called &lt;code&gt;filter&lt;/code&gt; to specify the desired data filtering.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;food.yaml&lt;/code&gt;, we define the parameter we need to pass in the request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;urlPath: /foodrequest:  - fieldName: filter    fieldIn: query    description: filter Fruit or Vegetablesample:  profile: duckdbprofiles:  - duckdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;food.sql&lt;/code&gt;, we can use the &lt;code&gt;if/endif&lt;/code&gt; syntax to query the data conditionally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM read_csv_auto('data/food_prices_2020.csv'){% if context.params.filter %}    WHERE type = {{context.params.filter}}{% endif %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding parameters to our data operations provides a quick and semantic way to control and filter the accuracy of the data. By specifying parameters, we can precisely retrieve the desired information and ensure that the results are tailored to our specific requirements.&lt;/p&gt;

&lt;h4&gt;
  
  
  For those datasource on cloud:
&lt;/h4&gt;

&lt;p&gt;In low-latency scenarios, VulcanSQL offers a caching mechanism for datasources stored in data warehouses or data lakes. By caching datasets, the frequency of retrieving data from the original source is reduced, resulting in improved performance. To learn more about VulcanSQL's caching functionality and its usage, refer to the documentation on &lt;a href="https://vulcansql.com/docs/develop/cache"&gt;Caching Datasets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It can just as simple to use &lt;code&gt;cache/endcache&lt;/code&gt; syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{% cache %}SELECT * FROM cached_food{% if context.params.filter %}    WHERE type = {{context.params.filter}}{% endif %}{% endcache %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Set up Appsmith Application
&lt;/h3&gt;

&lt;p&gt;Now we start to set up Appsmith.&lt;/p&gt;

&lt;p&gt;After creating an Appsmith account, it will directly help create and navigate to &lt;code&gt;My first application&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_KwZv96X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1-5fadcdeedc28f08a656ef3a3da92896f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_KwZv96X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1-5fadcdeedc28f08a656ef3a3da92896f.png" alt="appsmith-setup-1.png" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We add a select Widget to canvas and name it &lt;code&gt;foodType&lt;/code&gt; to prepare the parameter for REST API in next step. In the Options section, we add the value &lt;code&gt;Fruit&lt;/code&gt; and &lt;code&gt;Vegetable&lt;/code&gt; for filtering the data and set default selected value to &lt;code&gt;Fruit&lt;/code&gt;. Name the select label to &lt;code&gt;Food Type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hIjUj9KR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1.1-234f27dc8b5baff121aec78b14d2fd84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hIjUj9KR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1.1-234f27dc8b5baff121aec78b14d2fd84.png" alt="appsmith-setup-1.1.png" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we select + New datasource on the sidebar in tab Explorer. Appsmith provides datasources for developers. In this case, we choose REST API for using VulcanSQL Data API as datasource.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p7OaXFNF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-2-8cdc42affaf9ba756352abbc44f10598.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p7OaXFNF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-2-8cdc42affaf9ba756352abbc44f10598.png" alt="appsmith-setup-2.png" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After navigate to the Queries/JS section, we edit the name to &lt;code&gt;getFruits&lt;/code&gt;. Add the API that was created in VulcanSQL previously. Include the dynamic parameter &lt;code&gt;{{foodType.selectedOptionValue}}&lt;/code&gt; in the filter key value. This will enable the API to interact with the food type selection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EIeF3Aco--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-3-98fd79a1f542697fe5d5128f87782b58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EIeF3Aco--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-3-98fd79a1f542697fe5d5128f87782b58.png" alt="appsmith-setup-3.png" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back to the select, we need to add the event to interact with the API's filtering parameter. Scroll down to the Events section and add an event to onOptionChange, choose Execute a query &amp;gt; &lt;code&gt;getFruits&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--crPlxor1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1.2-f0a50fe7d4d8e7ef1da893b7f993c29e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--crPlxor1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-1.2-f0a50fe7d4d8e7ef1da893b7f993c29e.png" alt="appsmith-setup-1.2.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting up the datasource, we can drag a Table to canvas and select &lt;code&gt;getFruits&lt;/code&gt; in the table data on the right sidebar. As you complete, you can click the Deploy button on the right top of the screen to deploy the application and test it in the view mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SS8x1UBX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-4-43708489e69c074b19ea201d5fa976cf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SS8x1UBX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-4-43708489e69c074b19ea201d5fa976cf.png" alt="appsmith-setup-4.png" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the deployed result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MaVnw51W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-5-75a7c08f1b9f21912aec8b2d3d0f8684.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MaVnw51W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://vulcansql.com/assets/images/appsmith-setup-5-75a7c08f1b9f21912aec8b2d3d0f8684.png" alt="appsmith-setup-5.png" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's it! This concludes our simple example: &lt;a href="https://app.appsmith.com/app/my-first-application/page1-64a6848a4d60e87c5655e3f6"&gt;Vulcan+Appsmith Demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To ensure a fast and seamless experience, we invite you to try out our &lt;a href="https://codesandbox.io/p/sandbox/demo-for-appsmith-frpcqz"&gt;VulcanSQL Demo&lt;/a&gt; template on CodeSandbox. By using VulcanSQL and Appsmith, you can fully experience their powerful capabilities. Enjoy the benefits and efficiency that VulcanSQL and Appsmith bring to your data operations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We have a &lt;a href="https://discord.gg/ztDz8DCmG4"&gt;Discord community&lt;/a&gt; and welcome to ask us anything or give us feedback! Also, we definitely welcome you to share interesting projects you've done using VulcanSQL in &lt;a href="https://discord.com/channels/1017514410677391420/1017514410677391427"&gt;#showcase&lt;/a&gt; channel!&lt;/p&gt;

&lt;p&gt;Finally, if VulcanSQL resonates with you, please consider starring us on GitHub!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>appsmith</category>
      <category>lowcode</category>
      <category>api</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What is your perspective on this "Data API Framework"?</title>
      <dc:creator>Chih-Yu Yeh</dc:creator>
      <pubDate>Wed, 12 Jul 2023 12:30:45 +0000</pubDate>
      <link>https://dev.to/cyyeh/how-do-you-think-about-this-data-api-framework-3h2a</link>
      <guid>https://dev.to/cyyeh/how-do-you-think-about-this-data-api-framework-3h2a</guid>
      <description>&lt;p&gt;Hey, friends&lt;/p&gt;

&lt;p&gt;If there is a Data API Framework with these functionalities listed below, what do you think about this tool(or what would you do with this tool)?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You only need to write SQL + Jinja(a template language)and the framework generates APIs and API documentation(based on Open API)for you. &lt;/li&gt;
&lt;li&gt;It has API catalog that helps non-tech user to explore your APIs and some simple guides to help him/her connect with other applications, such as Google Spreadsheet, Retool, etc.&lt;/li&gt;
&lt;li&gt;It supports several databases such as PostgreSQL, DuckDB, ClickHouse, BigQuery and Snowflake. You can also write your own connector.&lt;/li&gt;
&lt;li&gt;It has some API best practices built-in such as authorization, authentication, error handling, rate-limiting, CORS, pagination, etc.&lt;/li&gt;
&lt;li&gt;It utilizes DuckDB as a caching layer to improve query performance.&lt;/li&gt;
&lt;li&gt;It has data privacy mechanisms such as data masking, row/column level security, etc.&lt;/li&gt;
&lt;li&gt;It supports several deployment mechanisms such as node.js and Docker, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disclaimer: I am one of the members of the open source project &lt;a href="https://vulcansql.com/"&gt;VulcanSQL&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>database</category>
      <category>data</category>
    </item>
  </channel>
</rss>
