{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/iBFviTzvnvHxI1h9Dqaa/FCP7t6FMYwNAIPJDTrJ0/jx5MRPdv1-7.js"],
  "sourcesContent": ["import{jsx as e,jsxs as t}from\"react/jsx-runtime\";import{ComponentPresetsConsumer as n,Link as i}from\"framer\";import{motion as a}from\"framer-motion\";import*as o from\"react\";import r from\"https://framerusercontent.com/modules/pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js\";export const richText=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"Deploying AI systems using the conventional approach requires a complex infrastructure setup, skilled and expensive professionals, and a significant amount of time. This level of investment, both in terms of finances and time, is feasible for only a select few enterprises that can commit to constructing an entire AI system from start to finish. Yet, the aspiration to harness the advantages inherent in their data and information repositories is universal among all companies.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"MindsDB is an AI database that offers a comprehensive solution for deploying and managing AI models. It \",/*#__PURE__*/e(i,{href:\"https://www.youtube.com/watch?v=tnB4Y9T1E2k\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"abstracts AI models as virtual tables\"})}),\", bringing AI closer to data sources. It goes further by automating and optimizing the complete AI workflow, starting with data source integration and ML framework configuration, advancing through AI model deployment, and concluding with automation of AI workflows. The outcome? Real-time predictions are at your disposal whenever fresh data arrives.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Employing Jobs for AI Workflow Automation\"}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s start from the beginning by connecting the data source to MindsDB and configuring the ML framework of choice.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"The \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/database\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"CREATE DATABASE\"})}),\" statement enables you to connect virtually any data source, including databases, data warehouses, data lakehouses, and even applications.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'CREATE DATABASE data_source\\nWITH\\n     ENGINE = engine,\\n     PARAMETERS = {\\n       \"key\": \"value\",\\n       ...\\n     };',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"You can choose one of \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/data-sources-overview\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"over 100 data integrations\"})}),\" and follow instructions on how to connect it to MindsDB with the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/database\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"CREATE DATABASE\"})}),\" statement.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"MindsDB integrates \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/ml-engines-overview\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"over 10 ML frameworks\"})}),\" that can be configured with the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/ml-engine\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"CREATE ML_ENGINE\"})}),\" statement. For example, if you opt for the OpenAI framework, you may need to provide your OpenAI API key, as below.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE ML_ENGINE openai_engine\\nFROM openai\\nUSING\\n     api_key = \u201Cyour_api_key\u201D;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Now that we connected the data source and configured the ML framework, we can go ahead and create a model. The \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/model\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"CREATE MODEL\"})}),\" statement creates, trains, and deploys models. It abstracts models as virtual tables so you can fetch predictions and forecasts by joining the model with the input data table.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL ai_model\\nFROM training_dataset\\n     (SELECT predict_column, feature_column1, feature_column2, \u2026\\n      FROM training_table)\\nPREDICT predict_column\\nUSING\\n     engine = engine_name;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Check out how to create \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/tutorials/home-rentals\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"regression models\"})}),\", \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/tutorials/customer-churn\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"classification models\"})}),\", and \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/tutorials/house-sales-forecasting\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"time series models\"})}),\", and how to use large language models (LLMs), such as \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/custom-model/openai\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"OpenAI\"})}),\" or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/custom-model/huggingface\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Hugging Face\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Here is how to make batch predictions by joining the model with the input data table:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input.feature_column1, input.feature_column2, output.predict_column\\nFROM data_source.data_table AS input\\nJOIN ai_model AS output;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"The feature columns from the input data table are fed into the model, which then processes all input data using the underlying algorithm and outputs the predictions for each data row.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"It is common that in time you may have more training data available and want to enhance the model\u2019s capabilities. MindsDB provides the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/api/finetune\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"FINETUNE\"})}),\" command that finetunes the model with defined data.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"FINETUNE ai_model\\nFROM data_source\\n     (SELECT predict_column, feature_column1, feature_column2, \u2026\\n      FROM training_table\\n      WHERE created_at > \u201C2023-08-04\u201D);\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"All training data created after Aug 4th, 2023 is going to be utilized for finetuning the model.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Alternatively, you can opt for using the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/api/retrain\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"RETRAIN\"})}),\" command that retrains the model with the entire training dataset, including old and new data. This process takes at least as much time as the initial training of the model, as there is more data available now.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Now, if we want to ensure the most accurate predictions, we should automate the process of finetuning the model and saving predictions into a database table that could then be used to visualize results, for example, with \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/connect/tableau\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Tableau\"})}),\". Let\u2019s see how to do that with jobs.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"We use the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/jobs\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"CREATE JOB\"})}),\" statement to create and schedule a job.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE JOB ai_workflow_automation (\\n\\xa0\\n         -- finetuning a model with new training data\\n         FINETUNE ai_model\\n         FROM data_source\\n              (SELECT predict_column, feature_column1, feature_column2, \u2026\\n               FROM training_table\\n               WHERE created_at > \u201C2023-08-04 00:00:00\u201D\\n               AND created_at > \u201C{{PREVIOUS_START_DATETIME}}\u201D)\\n         USING\\n              join_learn_process = true;\\n\\xa0\\n         -- creating or replacing an existing table with predictions made by the finetuned model\\n         CREATE OR REPLACE TABLE predictions (\\n              SELECT input.feature_column1, input.feature_column2, output.predict_column\\n              FROM data_source.data_table AS input\\n              JOIN ai_model AS output;\\n         )\\n)\\nSTART '2023-09-01 00:00:00'\\nEND '2023-12-01 00:00:00'\\nEVERY 7 days;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"The job is scheduled to run once a week starting from September till December. Every time the job runs, it is going to finetune the model with the new training data, as defined by created_at > \u201C{{PREVIOUS_START_DATETIME}}\u201D. We use the {{PREVIOUS_START_DATETIME}} variable that will be replaced by the timestamp of the previous job run to ensure that only the new training data is used to finetune the model. The join_learn_process parameter ensures that the finetuning process must complete before we query for predictions.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"The next part of the job is to create a new data table or replace an existing one and save predictions made by the newly fine-tuned model. This ensures that we utilize all the resources (here, all the historical data) to make sure the predictions are accurate.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Check out more examples of automating AI workflows by following our tutorials like \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/tutorials/twitter-chatbot\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Twitter chatbot\"})}),\" or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/tutorials/slack-chatbot\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack chatbot\"})}),\".\"]}),/*#__PURE__*/e(\"h2\",{children:\"Elevate Productivity through AI Workflow Automation\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB simplifies AI workflows, making them accessible and intuitive for all developers. Furthermore, it introduces AI automation, allowing you to relax while your data works to yield advantageous outcomes.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Take a hands-on approach to exploring MindsDB by creating a \",/*#__PURE__*/e(i,{href:\"https://cloud.mindsdb.com/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"demo account on MindsDB Cloud\"})}),\" or installing MindsDB locally (via \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/pip/source\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"pip\"})}),\" or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Docker\"})}),\"). And if you plan to utilize MindsDB for production systems, we recommend considering \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/pricing\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB Starter\"})}),\" which provides managed instances, ensuring greater security and scalability for your projects.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Whichever option you choose, MindsDB provides flexibility and ensures a smooth experience for all your AI projects.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})})]});export const richText1=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"The demand for skilled AI developers is reaching new heights in today's rapidly evolving technological landscape. As businesses embrace the power of machine learning to drive innovation and gain a competitive edge, developers are seeking efficient ways to transition into the realm of AI.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"MindsDB empowers developers to upskill and seamlessly deploy AI models using their existing SQL knowledge. With MindsDB, the path to becoming an AI developer becomes accessible to a broader audience, eliminating the steep learning curve often associated with traditional AI frameworks and enabling developers to integrate AI into their projects effortlessly. Let's explore how MindsDB helps developers to become proficient AI practitioners, one SQL query at a time.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we'll begin by providing an introduction to MindsDB, shedding light on its core functionalities and capabilities. Next, we'll delve into the existing challenges of the AI development workflow and how MindsDB offers a solution to overcome these obstacles. Lastly, we'll walk you through a comprehensive example that demonstrates the seamless integration of Language Model Models (LLMs) into your data using MindsDB.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"h2\",{children:\"What is MindsDB\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB is a cloud for serving Artificial Intelligence Logic, enabling developers to ship AI-powered projects from prototyping & experimentation to production in a fast & scalable way.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"We do this by abstracting Generative AI, LLMs, and other AI model output as a virtual table (AI-Tables) on top of enterprise databases. This increases accessibility within organizations and enables development teams to use their existing skills to build applications powered by AI.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"By taking a data-centric approach to AI, MindsDB brings the process closer to the source of the data minimizing the need to build and maintain data pipelines and ETL\u2019ing, speeding up the time to deployment and reducing complexity.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"h2\",{children:\"Current Challenges in AI Development\"}),/*#__PURE__*/e(\"p\",{children:\"One of the significant challenges in AI development is the time-consuming process of implementing AI models. Commonly, developing and deploying AI models requires extensive coding, data preprocessing, and feature engineering. AI Engineers often spend a considerable amount of time researching, experimenting, and fine-tuning models to achieve satisfactory results. This iterative process can significantly delay the deployment of AI systems and hinder rapid development cycles.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"Another challenge lies in the complex setup of ETL pipelines to bring data to AI models, as data preparation and preprocessing play a crucial role in building effective AI models. Managing the entire ETL workflow, including data collection, preprocessing, transformation, and integration, can be intricate and time-consuming. Data engineers and scientists often face challenges aligning diverse data sources, handling missing values, and ensuring data quality, making the setup process arduous and error-prone.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"Implementing an AI system traditionally demands a team of highly skilled and specialized professionals, including data scientists, machine learning engineers, and domain experts. These professionals must possess expertise in various areas, such as data analysis, statistical modeling, algorithm development, and infrastructure setup. However, the scarcity and high demand for these professionals can make building an AI system a costly endeavor. The expense of hiring and maintaining a skilled team can be beyond reach for many organizations, limiting their ability to adopt AI technology effectively.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"Addressing these challenges is crucial for the wider adoption and successful implementation of AI systems. Luckily, MindsDB offers a solution that simplifies and streamlines the AI development workflow, mitigating these hurdles and enabling a more accessible path to AI-powered solutions.\"}),/*#__PURE__*/e(\"h2\",{children:\"How MindsDB Helps Upskill your Development Team\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB effectively overcomes the challenges mentioned earlier by bringing AI models to your data. Once you connect your database to MindsDB, a world of predictive modeling becomes readily accessible. With a wide array of pre-trained models at your disposal, including OpenAI, LangChain, and Hugging Face, MindsDB empowers you to make accurate predictions on your data effortlessly. It allows you to leverage the power of machine learning without the need for extensive coding or complex setup, enabling you to unlock valuable insights and drive informed decision-making right from where your data resides.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"\u200D\"})}),/*#__PURE__*/e(\"p\",{children:\"MindsDB provides invaluable support in upskilling your development team by seamlessly integrating AI and ML capabilities into your data. SQL expertise is all that's required to deploy and utilize powerful AI models with MinsdDB. We leverage custom SQL queries to train, deploy, and use AI models directly from your database. With MindsDB, the path to upskilling your development team in AI becomes accessible, efficient, and highly effective.\"}),/*#__PURE__*/e(\"h2\",{children:\"Enrich your Data with MinsdDB\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB helps you enrich your data with the help of Large Language Models (LLMs).\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"389\",src:\"https://framerusercontent.com/images/od6zzyDrMOsxD6qz91u7blkQcec.png\",srcSet:\"https://framerusercontent.com/images/od6zzyDrMOsxD6qz91u7blkQcec.png?scale-down-to=512 512w,https://framerusercontent.com/images/od6zzyDrMOsxD6qz91u7blkQcec.png 899w\",style:{aspectRatio:\"899 / 779\"},width:\"449\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Imagine you run an online store on Amazon and want to analyze all customer reviews for each product. To accomplish this task, we can use the OpenAI GPT-4 model, which is a pre-trained large language model.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"We\u2019ve got a table that stores products and customer reviews.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT product_name, review\\nFROM mysql_demo_db.amazon_reviews;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"figure\",{className:\"framer-table-wrapper\",children:/*#__PURE__*/e(\"table\",{children:/*#__PURE__*/t(\"tbody\",{children:[/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"product_name\"})}),/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"review\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Power Adapter\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It is a great product.\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Bluetooth and Wi-Fi Speaker\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It is ok.\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Kindle eReader\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It doesn\u2019t work.\"})})]})]})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Before utilizing all tools provided by MindsDB on your data, you need to connect your database to MindsDB.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'CREATE DATABASE mysql_demo_db\\nWITH ENGINE = \\'mysql\\',\\nPARAMETERS = {\\n    \"user\": \"user\",\\n    \"password\": \"MindsDBUser123!\",\\n    \"host\": \"db-demo-data.cwoyhfn6bzs0.us-east-1.rds.amazonaws.com\",\\n    \"port\": \"3306\",\\n    \"database\": \"public\"\\n};',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Now, we can enrich your data by creating an OpenAI model that assigns sentiment to each review.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'CREATE MODEL seniment_classifier\\nPREDICT sentiment\\nUSING\\n\tengine = \u2018openai\u2019,\\n\tmodel_name = \u2018gpt-4\u2019,\\n\tprompt_template = \\'describe the sentiment of the reviews strictly as \\n                         \t\t\"positive\", \"neutral\", or \"negative\".\\n                           \t\t\"I love the product\":positive\\n                           \t\t\"It is a scam\":negative\\n                           \t\t\"{{review}}.\":\\';',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here, we use the OpenAI engine and its latest GPT-4 model. We provide a message to be answered by the model in the prompt_template parameter.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"As it is a pre-trained model, its generating and training phases complete almost instantaneously, so we can use it to make predictions right away.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input.product_name, input.review, output.sentiment\\nFROM mysql_demo_db.amazon_reviews AS input\\nJOIN sentiment_classifier AS output;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"The above SELECT statement joins the data table (mysql_demo_\",/*#__PURE__*/e(i,{href:\"https://cloud.mindsdb.com/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"db.amazon\"})}),\"_reviews table) and the model (sentiment_classifier). The review values come from the data table and serve as an input to the model. Next, the model processes its input data and assigns a sentiment value to each review.\"]}),/*#__PURE__*/e(\"figure\",{className:\"framer-table-wrapper\",children:/*#__PURE__*/e(\"table\",{children:/*#__PURE__*/t(\"tbody\",{children:[/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"product_name\"})}),/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"review\"})}),/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"sentiment\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Power Adapter\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It is a great product.\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"positive\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Bluetooth and Wi-Fi Speaker\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It is ok.\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"neutral\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Kindle eReader\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"It doesn\u2019t work.\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"negative\"})})]})]})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Now, the input table contains not only product and review columns but also the sentiment column added by the model.\"}),/*#__PURE__*/e(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/e(\"p\",{children:\"The field of AI development faces numerous challenges as it continues to evolve. From data scarcity and complex model training to interpretability and bias concerns, these obstacles can impede progress and hinder the adoption of AI solutions.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"MindsDB emerges as a powerful and innovative solution that tackles these challenges head-on. MindsDB offers a transformative approach to data enrichment and predictive modeling by harnessing the potential of LLMs and providing a user-friendly platform.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Should you require any assistance, join our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community to ask questio\"})}),\"ns and share feedback.\u200D\"]})]});export const richText2=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"Understanding customer sentiment is essential to excellent customer service. The sentiments expressed in customer support tools hold the key to unlocking valuable insights that drive better decision-making and enhance customer experiences. By combining the power of GPT models, Airbyte data sync capabilities, and MindsDB's AI logic automation, businesses can gain actionable insights and revolutionize their customer service strategies.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"In this tutorial we\u2019ll set up sentiment analysis of Intercom chats, empowering you to understand your customers at a deeper level and enhance their satisfaction.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The solution is fully automated and consists of 3 parts:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Use \",/*#__PURE__*/e(i,{href:\"https://airbyte.com/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Airbyte\"})}),\" to extract conversations from Intercom and store them in the data warehouse for analysis (we\u2019ll use Google\u2019s BigQuery for this example)\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Set up an automated sentiment analysis workflow using \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB\"})}),\", which will automatically process conversations through OpenAI\u2019s GPT Large Language Model to analyze their sentiment and store the results back into the data warehouse.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Visualize the results in a decision-maker-friendly BI dashboard using \",/*#__PURE__*/e(i,{href:\"https://www.metabase.com/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Metabase\"})}),\", an analytics platform.\"]})})]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"450\",src:\"https://framerusercontent.com/images/4KbBHfpzJzEMNaYZWJPEHLMmOLs.png\",srcSet:\"https://framerusercontent.com/images/4KbBHfpzJzEMNaYZWJPEHLMmOLs.png?scale-down-to=512 512w,https://framerusercontent.com/images/4KbBHfpzJzEMNaYZWJPEHLMmOLs.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/4KbBHfpzJzEMNaYZWJPEHLMmOLs.png 1600w\",style:{aspectRatio:\"1600 / 900\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Let's dive into the details of each step now!\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"h2\",{children:\"Part 1 - Ingest Intercom Data to BigQuery using Airbyte\"}),/*#__PURE__*/t(\"p\",{children:[\"We\u2019ll be leveraging our Intercom data to understand the sentiment of our customer support conversations. Airbyte and its Intercom connector is a perfect tool for the job, and will allow us to bring that data into a data warehouse that could be read by MindsDB, in this case BigQuery. For this tutorial we\u2019ll be setting things up using Airbyte Cloud, but you can also accomplish the same using the \",/*#__PURE__*/e(i,{href:\"https://docs.airbyte.com/quickstart/deploy-airbyte/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"open source version\"})}),\".\"]}),/*#__PURE__*/e(\"h3\",{children:\"Step 1: Setting up Intercom as a Source\"}),/*#__PURE__*/e(\"p\",{children:\"To begin, let\u2019s set up Intercom as a data source in Airbyte:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Open Airbyte Cloud \",/*#__PURE__*/e(i,{href:\"https://airbyte.com/tutorials/measure-customer-support-sentiment-analysis-with-gpt-airbyte-and-mindsdb\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"https://cloud.airbyte.com/\"})})]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:'Click on \"Sources\" in the left-hand navigation menu and select \"Intercom\"'})})]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"182\",src:\"https://framerusercontent.com/images/E5iqPLJb1kY7uJZPirLlXs8sI4.png\",srcSet:\"https://framerusercontent.com/images/E5iqPLJb1kY7uJZPirLlXs8sI4.png?scale-down-to=512 512w,https://framerusercontent.com/images/E5iqPLJb1kY7uJZPirLlXs8sI4.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/E5iqPLJb1kY7uJZPirLlXs8sI4.png 1600w\",style:{aspectRatio:\"1600 / 365\"},width:\"800\"}),/*#__PURE__*/t(\"ol\",{start:\"3\",children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Authenticate your Intercom source using OAuth\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Save and Test the connection to ensure Airbyte can access your Intercom data successfully.\"})})]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"For more information, see the Airbyte docs for Intercom: \",/*#__PURE__*/e(i,{href:\"https://airbyte.com/tutorials/measure-customer-support-sentiment-analysis-with-gpt-airbyte-and-mindsdb\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"https://docs.airbyte.com/integrations/sources/intercom/\"})})]}),/*#__PURE__*/e(\"h3\",{children:\"Step 2: Configuring BigQuery as a Destination\"}),/*#__PURE__*/e(\"p\",{children:\"Next, we need to configure BigQuery as the destination for our Intercom data:\"}),/*#__PURE__*/e(\"ol\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:'Click on \"Destinations\" in the left-hand navigation menu and select \"BigQuery\"'})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"153\",src:\"https://framerusercontent.com/images/XpOKdFOjKFQbrH3M4ggWaqthk.png\",srcSet:\"https://framerusercontent.com/images/XpOKdFOjKFQbrH3M4ggWaqthk.png?scale-down-to=512 512w,https://framerusercontent.com/images/XpOKdFOjKFQbrH3M4ggWaqthk.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/XpOKdFOjKFQbrH3M4ggWaqthk.png 1203w\",style:{aspectRatio:\"1203 / 307\"},width:\"601\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Enter your Google Cloud project details and authenticate Airbyte with your Google Cloud account.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Specify the desired dataset and table name where you want to load the Intercom data in BigQuery.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Test the connection to ensure Airbyte can successfully connect to your BigQuery project.\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"For more information, see the Airbyte docs for BigQuery: \",/*#__PURE__*/e(i,{href:\"https://airbyte.com/tutorials/measure-customer-support-sentiment-analysis-with-gpt-airbyte-and-mindsdb\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"https://docs.airbyte.com/integrations/destinations/bigquery\"})})]}),/*#__PURE__*/e(\"h3\",{children:\"Step 3: Creating a Connection\"}),/*#__PURE__*/e(\"p\",{children:\"Now that both Intercom and BigQuery are set up as a source and destination, respectively, we can create a connection between the two and start to move the data:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:'Click on \"Connections\" in the left-hand navigation menu and select \"+ New Connection\"'})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Choose the existing Intercom source you set up in Step 1 and the existing BigQuery destination configured in Step 2.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Configure the connection with a Connection name, replication frequency, destination namespace. You should enable the following streams for this tutorial: conversation_parts and conversations\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"When you are finished, click \u201CSet up connection\u201D\"})})]}),/*#__PURE__*/e(\"h3\",{children:\"Step 4: Running the Connection\"}),/*#__PURE__*/e(\"p\",{children:\"Once the connection is set up, you can run and monitor the data ingestion process:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:'Click on \"Connections\" in the left-hand navigation menu.'})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Click the connection you created\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Click \u201CSync enabled streams\u201D to start a sync\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Monitor the job status and progress to ensure the data is being transferred successfully.\"})})]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"413\",src:\"https://framerusercontent.com/images/6OoKjiGpZezt0NaD829sqb6hz0.png\",srcSet:\"https://framerusercontent.com/images/6OoKjiGpZezt0NaD829sqb6hz0.png?scale-down-to=512 512w,https://framerusercontent.com/images/6OoKjiGpZezt0NaD829sqb6hz0.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/6OoKjiGpZezt0NaD829sqb6hz0.png 1600w\",style:{aspectRatio:\"1600 / 826\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The Airbyte connection will create the following tables in BigQuery that are used in MindsDB:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"conversations, which contains all intercom conversations\"})})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"conversation_parts, which contains individual messages from the conversations\"})})})]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"409\",src:\"https://framerusercontent.com/images/dahKX5NFSlsj6nAVaVHFF7zpurY.png\",srcSet:\"https://framerusercontent.com/images/dahKX5NFSlsj6nAVaVHFF7zpurY.png 490w\",style:{aspectRatio:\"490 / 819\"},width:\"245\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"405\",src:\"https://framerusercontent.com/images/HuzmRRP21TSh4vcOgd5qg8ueDE.png\",srcSet:\"https://framerusercontent.com/images/HuzmRRP21TSh4vcOgd5qg8ueDE.png 475w\",style:{aspectRatio:\"475 / 810\"},width:\"237\"}),/*#__PURE__*/e(\"h2\",{children:\"Part 2 - Automate GPT-based sentiment analysis using MindsDB queries and jobs\"}),/*#__PURE__*/e(\"p\",{children:\"Now that our intercom data has been synced to BigQuery, it\u2019s time to enrich our conversation data with user sentiment. We can leverage MindsDB and its OpenAI integration to bring the power of the GPT-4 large language model into the database. MindsDB will allow us to set up our model, construct a prompt and run completions by simply using SQL.\"}),/*#__PURE__*/e(\"h3\",{children:\"Getting Started with MindsDB\"}),/*#__PURE__*/t(\"p\",{children:[\"Just like Airbyte, MindsDB is open source and can be \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"installed locally\"})}),\". However, we\u2019ll be using \",/*#__PURE__*/e(i,{href:\"https://cloud.mindsdb.com/register/airbyte-intercom?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB Cloud\u2019s\"})}),\" free demo tier to get up and running quickly.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"After registering for a MindsDB Cloud account, you\u2019ll be automatically provided a MindsDB Instance for you to use.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"204\",src:\"https://framerusercontent.com/images/wRvG8lvvPexYJ2EKAUyNRQHE6o.png\",srcSet:\"https://framerusercontent.com/images/wRvG8lvvPexYJ2EKAUyNRQHE6o.png?scale-down-to=512 512w,https://framerusercontent.com/images/wRvG8lvvPexYJ2EKAUyNRQHE6o.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/wRvG8lvvPexYJ2EKAUyNRQHE6o.png 1600w\",style:{aspectRatio:\"1600 / 409\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"You\u2019ll also get access to the built-in SQL Editor, where we\u2019ll be running the queries to set up our sentiment analysis model. Click on your instance to access the editor.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"486\",src:\"https://framerusercontent.com/images/jMdfQ4e9ZQvMrgxQ4tLelOqhsE.png\",srcSet:\"https://framerusercontent.com/images/jMdfQ4e9ZQvMrgxQ4tLelOqhsE.png?scale-down-to=512 512w,https://framerusercontent.com/images/jMdfQ4e9ZQvMrgxQ4tLelOqhsE.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/jMdfQ4e9ZQvMrgxQ4tLelOqhsE.png 1600w\",style:{aspectRatio:\"1600 / 972\"},width:\"800\"}),/*#__PURE__*/e(\"h3\",{children:\"Connecting to the BigQuery data source\"}),/*#__PURE__*/e(\"p\",{children:\"We\u2019ll first need to establish a connection between MindsDB and BigQuery. To do so, we can create a data source. This configuration will include the necessary parameters to connect to the appropriate project and dataset in BigQuery.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"To create the BigQuery database connection in MindsDB, execute the following SQL statement:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'CREATE DATABASE bq\\nWITH\\n   ENGINE = \\'bigquery\\',\\n   PARAMETERS = {\\n     \"project_id\": \"<your_project_id>\",\\n     \"dataset\": \"<your_dataset>\",\\n     \"service_account_json\": {\\n         \"type\": \"service_account\",\\n         >...<\\n    }\\n};',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Make sure to input your project_id, dataset and service_account_json parameters as appropriate to connect to your BigQuery instance. For more information, see the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/data-integrations/google-bigquery\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB docs for Google BigQuery\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"After executing the SQL statement, MindsDB will create the BigQuery database configuration named bq. This configuration will be used to reference the BigQuery data source in subsequent queries and operations within MindsDB. With the BigQuery data source successfully connected, we can proceed to leverage MindsDB's features and capabilities for sentiment analysis and predictive modeling on our Intercom data stored in BigQuery.\"}),/*#__PURE__*/e(\"h3\",{children:\"Setting up the sentiment analysis model\"}),/*#__PURE__*/t(\"p\",{children:[\"We\u2019ll be using OpenAI\u2019s \",/*#__PURE__*/e(i,{href:\"https://openai.com/gpt-4\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"GPT-4\"})}),\" to calculate the user sentiment on our conversations. As a large language model, it\u2019s been pre-trained to understand natural language and provide outputs in response to inputs or prompts, which means it can be used pretty much out of the box for our sentiment analysis use case without any additional training.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s write a prompt for the model that instructs it to return the sentiment of a provided conversation. MindsDB\u2019s built-in model support and prompt templates make it easy to set up prompts that can be combined with input variables, which we\u2019ll need in order to pass along our conversation contents.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"The following SQL statement shows how \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/custom-model/openai?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"OpenAI GPT-4 model can be enabled in MindsDB\"})}),\":\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE ML_ENGINE my_openai\\nFROM openai\\nUSING\\n     api_key = 'YOUR_OPENAI_API_KEY';\\n\\xa0\\nCREATE MODEL sentiment_classifier_model\\nPREDICT sentiment\\nUSING\\n  engine = 'my_openai',\\n  model_name = 'gpt-4',\\n  prompt_template = 'describe the user sentiment from the following conversation strictly as \\\"positive\\\", \\\"neutral\\\", or \\\"negative\\\".\\\\n###\\\\n{{conversation}}\\\\n###\\\\n';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"First, we create an OpenAI engine using our own API key. Then, we use this ML engine while creating a model.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Note that in the prompt template we specified {{conversation}} with double curly braces. This is how we can tell MindsDB that we\u2019re working with an input variable that should be replaced.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"After creating the model, it will take a few seconds to be ready for use. You can check on the status of the model by running the following query:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"DESCRIBE sentiment_classifier_model;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Once the status shows up as \u201Ccomplete\u201D, we\u2019ll be able to use it for predictions.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"94\",src:\"https://framerusercontent.com/images/N66FC9Vy3RmhsceXYQEwHZLsKek.png\",srcSet:\"https://framerusercontent.com/images/N66FC9Vy3RmhsceXYQEwHZLsKek.png?scale-down-to=512 512w,https://framerusercontent.com/images/N66FC9Vy3RmhsceXYQEwHZLsKek.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/N66FC9Vy3RmhsceXYQEwHZLsKek.png 1600w\",style:{aspectRatio:\"1600 / 188\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"To test the model, we can do so with a simple SQL select statement. Here\u2019s a quick example you can run to verify things are working:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT conversation, sentiment FROM sentiment_classifier_model\\nWHERE conversation = 'i am very happy with the service';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"95\",src:\"https://framerusercontent.com/images/GNEHvOWCHHNgqMZspj36OSqsEo.png\",srcSet:\"https://framerusercontent.com/images/GNEHvOWCHHNgqMZspj36OSqsEo.png?scale-down-to=512 512w,https://framerusercontent.com/images/GNEHvOWCHHNgqMZspj36OSqsEo.png 856w\",style:{aspectRatio:\"856 / 190\"},width:\"428\"}),/*#__PURE__*/e(\"h3\",{children:\"Running the model on Intercom conversation data\"}),/*#__PURE__*/e(\"p\",{children:\"As you may have noticed when building the prompt in the previous step, we\u2019ll need to provide the text of the conversation to the model. Since the Intercom data as output by Airbyte to BigQuery contains each message of a conversation as separate rows in the conversation_parts table, we\u2019ll need to aggregate these message parts into a single text column. Giving the model a chunk of the latest messages rather than calculating sentiment for each individual message allows it to better determine the overall sentiment of the conversation.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Before we run the model, let\u2019s briefly preview what our data looks like. The following query will retrieve the 20 latest conversations, along with the conversation chunk as we will send it along to the model:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'SELECT * FROM bq (\\n  select \\n      conversation_id,\\n      RIGHT(string_agg(concat(\"[\", json_value(p.author, \\'$.type\\'), \"]\", p.body), \"\\\\n\" order by p.updated_at), 25000) as conversation\\n  from conversations c\\n  join conversation_parts p on p.conversation_id = c.id\\n  where p.part_type = \\'comment\\'\\n  group by conversation_id, c.updated_at\\n  having conversation is not null\\n  order by c.updated_at\\n  limit 20\\n)',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Breaking it down a bit, you\u2019ll notice we start with SELECT * FROM bq. This instructs MindsDB to run the subquery directly in BigQuery, allowing us to use BigQuery-specific syntax. The subquery then retrieves the intercom conversations, along with the concatenated conversation text. Note that the RIGHT function is used to limit the conversation text to the last 25,000 characters to prevent exceeding the model's input length limitation.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here are the first two results from running this against our previously synced intercom data:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"258\",src:\"https://framerusercontent.com/images/BNa3nQrvJv3SDZ9YoUgtqxgMnM.png\",srcSet:\"https://framerusercontent.com/images/BNa3nQrvJv3SDZ9YoUgtqxgMnM.png?scale-down-to=512 512w,https://framerusercontent.com/images/BNa3nQrvJv3SDZ9YoUgtqxgMnM.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/BNa3nQrvJv3SDZ9YoUgtqxgMnM.png 1600w\",style:{aspectRatio:\"1600 / 516\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Then, to run the model and get sentiment prediction for each of these conversations, all we have to do is \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/api/join?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"JOIN\"})}),\" it with our data like so:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'SELECT * FROM bq (\\n  select \\n      conversation_id,\\n      RIGHT(string_agg(concat(\"[\", json_value(p.author, \\'$.type\\'), \"]\", p.body), \"\\\\n\" order by p.updated_at), 25000) as conversation\\n  from conversations c\\n  join conversation_parts p on p.conversation_id = c.id\\n  where p.part_type = \\'comment\\'\\n  group by conversation_id, c.updated_at\\n  having conversation is not null\\n  order by c.updated_at\\n  limit 20\\n)as intercom_conversations JOIN sentiment_classifier_model AS sentiment',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Because we constructed our prompt template with {{conversation}} as a placeholder for our conversation, MindsDB will replace this with the conversation column we selected when joining the data.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The results of the above query would look something like this:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"160\",src:\"https://framerusercontent.com/images/QkORs6Wvzg1OObFsGlN2yoM3uo.png\",srcSet:\"https://framerusercontent.com/images/QkORs6Wvzg1OObFsGlN2yoM3uo.png?scale-down-to=512 512w,https://framerusercontent.com/images/QkORs6Wvzg1OObFsGlN2yoM3uo.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/QkORs6Wvzg1OObFsGlN2yoM3uo.png 1600w\",style:{aspectRatio:\"1600 / 320\"},width:\"800\"}),/*#__PURE__*/e(\"h3\",{children:\"Writing sentiment analysis back to BigQuery\"}),/*#__PURE__*/e(\"p\",{children:\"Great! We\u2019re able to calculate the sentiment of a given conversation. But how do we get this information back to our data warehouse?\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"First, we need to create a new BigQuery table where the results should be stored. To create the table, you can run the following statement within the MindsDB editor:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT * from bq (\\n  CREATE TABLE mindsdb_conversation_sentiments (\\n    conversation_id STRING NOT NULL,\\n    sentiment STRING NOT NULL,\\n    conversation_updated_at INT NOT NULL,\\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP() NOT NULL\\n  )\\n)\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Once the table is created, you can modify the previous query to insert the results into the new table by simply wrapping it with an insert statement and selecting the columns we want to insert:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'INSERT INTO bq.mindsdb_conversation_sentiments (\\n  SELECT conversation_id, sentiment, conversation_updated_at FROM bq (\\n    select \\n        conversation_id,\\n        c.updated_at as conversation_updated_at,\\n        RIGHT(string_agg(concat(\"[\", json_value(p.author, \\'$.type\\'), \"]\", p.body), \"\\\\n\" order by p.updated_at), 25000) as conversation\\n    from conversations c\\n    join conversation_parts p on p.conversation_id = c.id\\n    where p.part_type = \\'comment\\'\\n    group by conversation_id, c.updated_at\\n    having conversation is not null\\n    order by c.updated_at\\n    limit 20\\n  ) as intercom_conversations JOIN sentiment_classifier_model AS sentiment\\n)',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"After this runs, we can run a SELECT to see the calculated sentiment for each of our 20 conversations:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"select * from bq.mindsdb_conversation_sentiments;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"107\",src:\"https://framerusercontent.com/images/mt6Z4Tcf2Q35G6ufMRT46xEUY.png\",srcSet:\"https://framerusercontent.com/images/mt6Z4Tcf2Q35G6ufMRT46xEUY.png?scale-down-to=512 512w,https://framerusercontent.com/images/mt6Z4Tcf2Q35G6ufMRT46xEUY.png 742w\",style:{aspectRatio:\"742 / 214\"},width:\"371\"}),/*#__PURE__*/e(\"h3\",{children:\"Creating a recurring job\"}),/*#__PURE__*/t(\"p\",{children:[\"To automate the sentiment analysis task and ensure that sentiment results are consistently updated, we can create a recurring job in MindsDB. Again, we can do this right from the MindsDB editor by running the following SQL to \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/create/jobs?utm_medium=referral&utm_source=partner&utm_campaign=23q2-airbyte-intercom-article\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"create a job\"})}),\" that runs once per day:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:'CREATE JOB run_intercom_sentiment_analysis (\\n  INSERT INTO bq.mindsdb_conversation_sentiments (\\n    SELECT conversation_id, sentiment, conversation_updated_at FROM bq (\\n      select \\n          conversation_id,\\n          c.updated_at as conversation_updated_at,\\n          RIGHT(string_agg(concat(\"[\", json_value(p.author, \\'$.type\\'), \"]\", p.body), \"\\\\n\" order by p.updated_at), 25000) as conversation\\n      from conversations c\\n      join conversation_parts p on p.conversation_id = c.id\\n      where p.part_type = \\'comment\\' AND c.updated_at > IFNULL((SELECT max(conversation_updated_at) FROM mindsdb_conversation_sentiments), -1)\\n      group by conversation_id, c.updated_at\\n      having conversation is not null\\n      order by c.updated_at\\n    ) as intercom_conversations JOIN sentiment_classifier_model AS sentiment\\n  )\\n) EVERY day;',language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We\u2019ve modified our query to work incrementally to only process conversations that have been added or changed since our last sentiment calculation. By comparing the conversation_updated_at timestamp with the maximum timestamp from the existing results, we can identify and select only the conversations that need to be processed.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"You can view any jobs that have been created by running SELECT \",/*#__PURE__*/e(\"em\",{children:\"FROM jobs; or get the job history with SELECT \"}),\"FROM jobs_history;.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Part 3 - Visualize the Results\"}),/*#__PURE__*/e(\"p\",{children:\"The MindsDB job we\u2019ve set up will write the results of the job to a table in BigQuery. We can query this table from BigQuery directly, or visualize the output with a BI tool. In this example, we will visualize the results using Metabase Cloud.\"}),/*#__PURE__*/e(\"h3\",{children:\"Create Metabase Model\"}),/*#__PURE__*/t(\"p\",{children:[\"To start, we created a \",/*#__PURE__*/e(i,{href:\"https://www.metabase.com/learn/data-modeling/models\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Model\"})}),\" in Metabase called \",/*#__PURE__*/e(\"strong\",{children:\"Intercom Sentiment Data\"}),\" using a SQL query against the conversation_sentiment table in BigQuery. We joined this with the support_case data that contains our modeled Intercom conversations:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"with conversation_sentiments as (\\n\\xa0\\n    select * from conversation_sentiments\\n\\xa0\\n),\\n\\xa0\\nsupport_cases as (\\n\\xa0\\n    select * from support_case\\n),\\n\\xa0\\nintercom_chats as (\\n\\xa0\\n    select *\\n    from support_cases \\n    where intercom_chat_id is not null\\n),\\n\\xa0\\njoined as (\\n\\xa0\\n    select \\n        intercom_chats.*,\\n        conversation_sentiments.sentiment\\n    from intercom_chats\\n    left join conversation_sentiments\\n        on intercom_chats.intercom_chat_id = conversation_sentiments.conversation_id\\n),\\n\\xa0\\nfinal as (\\n\\xa0\\n    select *\\n    from joined\\n    where sentiment is not null\\n\\xa0\\n)\\n\\xa0\\nselect * from final\",language:\"SQL\"})})}),/*#__PURE__*/e(\"h3\",{children:\"Create Metabase Questions\"}),/*#__PURE__*/t(\"p\",{children:[\"We then used the \",/*#__PURE__*/e(i,{href:\"https://www.metabase.com/glossary/query_builder\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Query Builder\"})}),\" in Metabase to generate each of the charts in our dashboard.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here is an example of how we created the Conversations by Sentiment pie chart:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"258\",src:\"https://framerusercontent.com/images/7a4b3RMxGMG0BoEQr29GiWrqUaQ.png\",srcSet:\"https://framerusercontent.com/images/7a4b3RMxGMG0BoEQr29GiWrqUaQ.png?scale-down-to=512 512w,https://framerusercontent.com/images/7a4b3RMxGMG0BoEQr29GiWrqUaQ.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/7a4b3RMxGMG0BoEQr29GiWrqUaQ.png 1175w\",style:{aspectRatio:\"1175 / 516\"},width:\"587\"}),/*#__PURE__*/e(\"h3\",{children:\"Create Dashboard\"}),/*#__PURE__*/t(\"p\",{children:[\"We arranged all of the charts on the \",/*#__PURE__*/e(\"strong\",{children:\"Intercom Conversation Sentiment\"}),\" dashboard. This dashboard looks at the sentiment analysis for the previous month of support conversations.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We can use this dashboard to determine if our support conversations are trending in a positive or negative direction month over month. For Executives, it is a great tool to pulse check the general sentiment from customers each month. For the Support team, they can use this data to further evaluate negative conversations and report any concerns to Engineering and Product teams.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"354\",src:\"https://framerusercontent.com/images/fhOft9EBgJcf2nv9XFUnglailQ.png\",srcSet:\"https://framerusercontent.com/images/fhOft9EBgJcf2nv9XFUnglailQ.png?scale-down-to=512 512w,https://framerusercontent.com/images/fhOft9EBgJcf2nv9XFUnglailQ.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/fhOft9EBgJcf2nv9XFUnglailQ.png 1600w\",style:{aspectRatio:\"1600 / 708\"},width:\"800\"}),/*#__PURE__*/e(\"p\",{children:\"This is just a glance at the kind of insights you can derive from enriching your data with sentiment analysis, however this can be extended with visualizations relevant to your use-case.\"}),/*#__PURE__*/e(\"h2\",{children:\"Next Steps\"}),/*#__PURE__*/e(\"p\",{children:\"In this tutorial we\u2019ve shown how you can harness Airbyte\u2019s data integration tools, MindsDB\u2019s AI logic automation and OpenAI\u2019s powerful models to leverage your data to keep an eye on customer sentiment and effectively turn that data into actionable insights. However, we\u2019ve only scratched the surface of what\u2019s possible.\"}),/*#__PURE__*/e(\"h3\",{children:\"Operationalizing the data\"}),/*#__PURE__*/e(\"p\",{children:\"Visualizing the results is just the beginning of the things that we can start to do with the output from MindsDB. To take this a step further, we can use Reverse ETL tools to push the sentiment data into our business systems, such as Salesforce or Zendesk. This allows our Sales and Support teams to quickly understand previous customer interactions without needing to read through all of the conversation data.\"}),/*#__PURE__*/e(\"h3\",{children:\"Beyond sentiment analysis\"}),/*#__PURE__*/e(\"p\",{children:\"This same workflow can be used to power tons of other use-cases for leveraging your data in other ways. This includes conversation summarization, extracting critical keywords, categorization, spotting spammy conversations, etc.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"While we\u2019ve used GPT-4 in this post, you can also experiment with other LLMs or models specifically tuned for tasks like sentiment analysis or text summarization, or tweak the prompts to get better results for your data.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"})]});export const richText3=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"As the artificial intelligence (AI) landscape continues to rapidly evolve, new risks and vulnerabilities emerge. Businesses positioned to leverage large language models (LLMs) to enhance and automate their processes must be careful about the degree of autonomy and access privileges they confer to LLM-powered AI solutions, wherein lies a new frontier of cybersecurity challenges.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"In this article, we take a closer look at \",/*#__PURE__*/e(\"em\",{children:\"prompt hacking\"}),\" (or \",/*#__PURE__*/e(i,{href:\"https://simonwillison.net/2023/May/2/prompt-injection-explained/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:/*#__PURE__*/e(\"em\",{children:\"prompt injection\"})})}),\"), a manipulation technique through which users may potentially access sensitive information by tailoring the initial prompt given to a language model. In the context of production systems that house a wealth of sensitive data in databases, prompt hacking poses a significant threat to data privacy and security from malicious actors. A successful prompt hacking attack against these resources could enable unauthorized reading or writing of data, leading to breaches, corruption, or even cascading system failures.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Understanding and mitigating the risks associated with prompt hacking in large language models is critical for organizations leveraging these advanced AI tools. We will delve into the nature of these risks, the potential impacts, and strategies to prevent this emerging threat to our digital infrastructures. Through informed action, we can continue to harness the promise of AI advancements while minimizing the associated cybersecurity risks.\"}),/*#__PURE__*/e(\"h2\",{children:\"LLMs, Prompts, and the Art of Prompt Engineering\"}),/*#__PURE__*/e(\"p\",{children:\"Lately, LLMs have taken the AI subfield known as natural language processing (NLP) by storm. It turns out that training these architectures on large text corpus can lead them to successfully solve many tasks, across many different languages. The most widely known example of this is OpenAI\u2019s ChatGPT (initially powered by the GPT-3.5 model, now using the fourth iteration).\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"An auto-regressive large language model, like GPT-4, has been trained on a vast amount of text data (millions of books, websites, instructions, codes, and human feedback), and its task at the most fundamental level is to predict the next word in a sentence, given all of the previous words.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Once the answer generation starts, some of the previous words will be model-generated. Hence, the \",/*#__PURE__*/e(\"em\",{children:\"auto-regressive\"}),\" aspect. In statistics, \",/*#__PURE__*/e(\"em\",{children:\"regression\"}),\" is about predicting a future value based on previous values, and \",/*#__PURE__*/e(\"em\",{children:\"auto\"}),\" implies that the model uses its own previous outputs as inputs for future predictions.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"In this context, a \",/*#__PURE__*/e(\"em\",{children:\"prompt\"}),\" is the initial user-provided input that the model will complete. So when you give GPT-4 a prompt, it generates the next word that seems likely based on what was learned from the training data. Then, it takes that word and the original prompt to guess the next word, and so on, until it generates a full text response.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We\u2019re still in the early stages of research for understanding the full capabilities, limitations, and implications that LLMs have. In particular, from a user\u2019s perspective, the impact of the prompt, or the input to these models, cannot be overstated. The same model can generate vastly different outputs based on minor changes in the prompt, shedding light on the sensitivity and unpredictability of these systems.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Consequently, \",/*#__PURE__*/e(\"em\",{children:\"prompt engineering\"}),\" \u2013 the practice of carefully crafting prompts to guide the model's outputs \u2013 has emerged as a crucial aspect of working with these models. It is still a nascent practice and requires a nuanced understanding of both the model's operation and the task at hand.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Counter Prompt Hacking: Exploring Defensive and Offensive Strategies\"}),/*#__PURE__*/e(\"p\",{children:\"Researchers have quickly showed that LLMs can be easily manipulated and coerced into doing something that strays away from the initial task that a prompt defines, or from the set of behavioral values infused to the model (for example, via fine-tuning or reinforcement learning by human feedback, as in the case of ChatGPT).\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"As a user, you can try to persuade the AI to ignore preset guidelines via injection of instructions that supersede previous ones, pretending to change the \",/*#__PURE__*/e(\"em\",{children:\"context\"}),\" under which the model operates. Or you can manipulate it so that hidden context in the system\u2019s prompt (not intended for user viewing) is exposed or \",/*#__PURE__*/e(\"em\",{children:\"leaked\"}),\". Commonly, hidden prompts direct the AI to adopt a certain persona, prioritize specific tasks, or avoid certain words. While it's typically assumed that the AI will abide by these guidelines for non-adversarial users, inadvertent guideline violations may occur.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Currently, there are no strategies that effectively thwart these attacks, so it is crucial to prepare for the possibility that the AI might disclose parts of the hidden prompt template when dealing with an adversarial user. Therefore:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"hidden prompts should be viewed as a tool for aligning user experience more closely with the targeted persona and should never contain information that isn't appropriate for on-screen viewing by users.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"builders that heavily use LLMs should never forget that, by construction, these models will always generate completions that, according to the model\u2019s internals, are likely to follow the previous chunk of text, \",/*#__PURE__*/e(\"em\",{children:\"irrespective of who actually wrote it\"}),\". This means that both system and adversarial inputs are, in principle, equals.\"]})})]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Broadly speaking, common strategies for mitigating the risk of prompt hacking can be categorized into \",/*#__PURE__*/e(\"em\",{children:\"defensive\"}),\" and \",/*#__PURE__*/e(\"em\",{children:\"offensive\"}),\" measures, as per the popular \",/*#__PURE__*/e(i,{href:\"https://learnprompting.org/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Learn Prompting resource\"})}),\".\"]}),/*#__PURE__*/e(\"h3\",{children:\"Defensive Measures\"}),/*#__PURE__*/t(\"p\",{children:[\"In order to safeguard against the potential risks and vulnerabilities associated with prompt hacking, it is crucial to implement effective \",/*#__PURE__*/e(\"strong\",{children:\"defensive measures\"}),\". This section outlines a range of defensive strategies and techniques that can be employed to mitigate the impact of prompt hacking attacks.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Filtering\"})})})}),/*#__PURE__*/e(\"p\",{children:\"It involves checking the initial prompt or the generated output for specific words or phrases that should be restricted. Two common filtering approaches are the use of blacklists and whitelists. A blacklist comprises words and phrases that are prohibited, while a whitelist consists of words and phrases that are permitted.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Instruction Defence\"})})})}),/*#__PURE__*/e(\"p\",{children:\"By including instructions within a prompt, it is possible to guide the language model and influence its behavior in subsequent text generation. These instructions prompt the model to exercise caution and be mindful of the content it produces in response to the given input. This technique helps steer the model towards desired outputs by setting explicit expectations and encouraging careful consideration of the following text.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Post-Prompting\"})})})}),/*#__PURE__*/e(\"p\",{children:\"The post-prompting defense involves placing the user input ahead of the prompt itself. By rearranging the order, the user's input is followed by the instructions as intended by the system.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Random Sequence Enclosure\"})})})}),/*#__PURE__*/e(\"p\",{children:\"It involves surrounding the user input with two random sequences of characters. This technique aims to add an additional layer of protection by obfuscating the user input, making it more challenging for potential prompt hackers to exploit or manipulate the model's response.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Sandwich Defense\"})})})}),/*#__PURE__*/e(\"p\",{children:\"The sandwich defense is a strategy that entails placing the user input between two prompts. By surrounding the user input with prompts, this technique helps ensure that the model pays attention to the intended context and generates text accordingly.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"XML Tagging\"})})})}),/*#__PURE__*/e(\"p\",{children:\"XML tagging can serve as a strong defense mechanism against prompt hacking. This approach involves encapsulating user input within XML tags, effectively delineating and preserving the integrity of the input.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Separate LLM Evaluation or Dual LLM pattern\"})})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"It involves employing an additional language model to evaluate the user input. This secondary LLM is responsible for assessing the safety of the input. If the user input is determined to be safe, it is then forwarded to another model for further processing. It sounds similar to the \",/*#__PURE__*/e(i,{href:\"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"dual LLM pattern\"})}),\".\"]}),/*#__PURE__*/e(\"h3\",{children:\"Offensive Measures\"}),/*#__PURE__*/t(\"p\",{children:[\"In the realm of prompt hacking, \",/*#__PURE__*/e(\"strong\",{children:\"offensive measures\"}),\" can be employed to exploit vulnerabilities and manipulate language models for desired outcomes. This section explores various offensive strategies and techniques used in prompt hacking, shedding light on the potential risks and implications they pose.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Obfuscation / Token Smuggling\"})})})}),/*#__PURE__*/e(\"p\",{children:\"Obfuscation is used to circumvent filters. This technique involves replacing words that might trigger filters with synonyms or introducing slight modifications, such as typos, to the words themselves.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Payload Splitting\"})})})}),/*#__PURE__*/e(\"p\",{children:\"Payload splitting is a technique used in prompt hacking to manipulate the behavior of a language model. This method involves dividing an adversarial input into multiple segments or parts.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Defined Dictionary Attack\"})})})}),/*#__PURE__*/e(\"p\",{children:\"A defined dictionary attack is a prompt injection technique used to bypass the sandwich defense. In this method, a pre-defined dictionary is created to map the instructions that follow the user input. The dictionary contains specific mappings between actual prompt and desired instructions, allowing the attacker to manipulate the prompt and influence the model's response.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Virtualization\"})})})}),/*#__PURE__*/e(\"p\",{children:\"Virtualization is a technique that aims to influence the behavior of an AI model by setting a specific context or scenario through a series of consecutive prompts. Similar to role prompting, this approach involves sending multiple prompts in succession to guide the model toward generating undesirable outputs.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Indirect Injection\"})})})}),/*#__PURE__*/e(\"p\",{children:\"Indirect prompt injection involves introducing adversarial instructions through a third-party data source, such as a web search or API call. You can request a model to read content from a website that contains malicious prompt instruction. The key distinction of indirect prompt injection is that you are not directly instructing the model, but rather utilizing an external resource to convey the instructions.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Recursive Injection\"})})})}),/*#__PURE__*/e(\"p\",{children:\"One of the defense mechanisms against prompt hacking is to employ one language model to evaluate the output of another one, ensuring there is no adversarial content. However, this defense can be circumvented with a recursive injection attack. In this attack, a prompt is inserted into the first LLM, generating output that includes an injection instruction for the second LLM.\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"Code Injection\"})})})}),/*#__PURE__*/e(\"p\",{children:\"Code injection is a form of prompt hacking that involves the attacker executing arbitrary code, typically in Python, within a language model. This exploit can occur in LLMs that are augmented with tools capable of sending code to an interpreter. Additionally, it can also happen when the LLM itself is used to evaluate and execute code.\"}),/*#__PURE__*/e(\"h2\",{children:\"Navigating the Ever-Evolving Landscape of Prompt Hacking and Defense\"}),/*#__PURE__*/e(\"p\",{children:\"Safeguarding your prompt against prompt hacking is of paramount importance to ensure the integrity and reliability of language models. Throughout this article, we have explored various defensive measures that can be employed to mitigate the risks associated with prompt hacking. However, it is crucial to acknowledge that there is currently no foolproof or ideal solution to fully protect prompts against such attacks.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Prompt hacking techniques continue to evolve, presenting ongoing challenges for researchers, developers, and users alike. It is imperative to remain vigilant, stay updated on emerging threats, and adopt a multi-faceted approach that combines robust defenses, constant monitoring, and responsible usage of language models. As the field advances, ongoing research and collaboration are vital to strengthening prompt protection and ensuring continued trust and reliability of these powerful AI systems.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"You can effectively tackle prompt injection by implementing the dual LLM pattern solution. \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/blog/harnessing-the-dual-llm-pattern-for-prompt-security-with-mindsdb\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"This article\"})}),\" provides valuable insights and practical steps to mitigate prompt injection and its associated challenges.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"})]});export const richText4=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"In today's digital landscape, where artificial intelligence (AI) models play an increasingly pivotal role, ensuring the security of their inputs, known as prompts, has become a critical concern. Prompt hacking, the act of manipulating or exploiting prompts to generate biased or malicious outputs, poses significant risks to the integrity and reliability of AI systems. As a result, safeguarding prompt security has emerged as a key priority.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"This article introduces the \",/*#__PURE__*/e(i,{href:\"https://simonwillison.net/2023/Apr/25/dual-llm-pattern/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"dual LLM pattern\"})}),\" to combat prompt hacking. We will explore how the dual LLM pattern serves as an effective measure in mitigating prompt hacking and ensuring the security of AI systems. By leveraging the capabilities of MindsDB, we can better understand the implementation and benefits of the dual LLM pattern in safeguarding prompt integrity.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"For a deeper understanding of prompt hacking, as well as defensive and offensive measures to mitigate it, we encourage you to explore \",/*#__PURE__*/e(i,{href:\"http://mindsdb.com/blog/unveiling-the-dark-side-of-ai-how-prompt-hacking-can-sabotage-your-ai-systems\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"this article\"})}),\".\"]}),/*#__PURE__*/e(\"h2\",{children:\"Introducing the Dual LLM Pattern\"}),/*#__PURE__*/e(\"p\",{children:\"In the realm of prompt security, the dual LLM pattern has emerged as a powerful mechanism to mitigate risks associated with prompt hacking. This approach revolves around the collaboration of two large language models: the Privileged LLM and the Quarantined LLM. While the dual LLM pattern provides a valuable defensive measure, it is important to note that it does not guarantee absolute protection against prompt hacking. However, it significantly enhances the security of AI systems by segregating trusted and untrusted content.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"282\",src:\"https://framerusercontent.com/images/NbCyVo6cGldJJSGxAe0AnUqUDBs.png\",srcSet:\"https://framerusercontent.com/images/NbCyVo6cGldJJSGxAe0AnUqUDBs.png?scale-down-to=512 512w,https://framerusercontent.com/images/NbCyVo6cGldJJSGxAe0AnUqUDBs.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/NbCyVo6cGldJJSGxAe0AnUqUDBs.png 1082w\",style:{aspectRatio:\"1082 / 565\"},width:\"541\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The Privileged LLM serves as the core component responsible for processing inputs received from trusted sources. Equipped with various tools and functionalities, the Privileged LLM can execute actions such as sending emails or modifying calendar entries. It carries out these operations while maintaining the integrity and security of the system.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"In contrast, the Quarantined LLM is employed whenever untrusted content is encountered, which may potentially include prompt injection attacks. The Quarantined LLM operates within a controlled environment and does not have access to tools. This isolation is crucial as it recognizes the possibility that the Quarantined LLM may go rogue at any moment, requiring cautious handling.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"To ensure prompt security, a fundamental principle must be followed: unfiltered content generated by the Quarantined LLM should never be forwarded to the Privileged LLM. However, an exception exists for content that can be verified, such as classifying text into predefined categories (as we\u2019ll see in the following demo). In such cases, if the Quarantined LLM outputs verifiable and untainted results, they can be safely passed on to the Privileged LLM. But, for any output that could potentially host further injection attacks, a different approach is necessary. Rather than forwarding the text as it is, unique tokens representing the potentially tainted content can be utilized. This mitigates the risk of injecting malicious code or content into the subsequent models or actions.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"To facilitate the interaction between the LLMs, an additional component called the Controller comes into play. The Controller, implemented as regular software and not a language model, handles user interactions, triggers the LLMs, and executes actions. It acts as an intermediary layer between the LLMs, ensuring the seamless flow of information while preserving security protocols.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"By implementing the dual LLM pattern alongside the Controller, prompt security is significantly bolstered. While it is essential to recognize that this pattern is not an infallible solution, it provides effective measures to segregate trusted and untrusted content, reducing the risk of prompt hacking and safeguarding the integrity of AI systems.\"}),/*#__PURE__*/e(\"h2\",{children:\"Implementing the Dual LLM Pattern with MindsDB\"}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s create quarantined and privileged models as instructed in the dual LLM pattern.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"The quarantined model is responsible for taking the user\u2019s input and classifying it. We use the Hugging Face model that classifies the input as \",/*#__PURE__*/e(\"em\",{children:\"spam\"}),\" or \",/*#__PURE__*/e(\"em\",{children:\"ham\"}),\".\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL quarantined_llm_classifies_input\\nPREDICT category\\nUSING\\n  engine = 'huggingface',              \\n  task = 'text-classification',        \\n  model_name = 'mrm8488/bert-tiny-finetuned-sms-spam-detection',\\n  input_column = 'prompt',        \\n  labels = ['ham', 'spam'];\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"The privileged model receives the input classified as \",/*#__PURE__*/e(\"em\",{children:\"ham\"}),\" and provides answers accordingly. We use the OpenAI GPT-4 model to answer users\u2019 inquiries.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL privileged_llm_provides_answers\\nPREDICT answer\\nUSING\\n    engine = 'openai',\\n    model_name = 'gpt-4',\\n    prompt_template = 'provide a helpful answer to the user inquiry:\\n                        {{prompt}}';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Now that the models are ready, let\u2019s see the total workflow, utilizing SQL queries to filter the prompt messages and provide trusted content to the privileged LLM to get answers.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"For the purpose of this example, we\u2019ll use a table that stores sample prompt messages that would normally be provided by the users.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT * FROM prompts;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"figure\",{className:\"framer-table-wrapper\",children:/*#__PURE__*/e(\"table\",{children:/*#__PURE__*/t(\"tbody\",{children:[/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"prompt\"})})}),/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What is the distance between Earth and Sun?\"})})}),/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Get a free entry for the game. Text your login credentials to 12345.\"})})}),/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What to do when my tooth aches?\"})})}),/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Can you tell me what movie to watch?\"})})}),/*#__PURE__*/e(\"tr\",{children:/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"As a valued network customer you have been selected to receive a prize reward! To claim call 09061701461.\"})})})]})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"We use the quarantined model to classify the prompts.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input.prompt, output.category\\nFROM prompts AS input\\nJOIN quarantined_llm_classifies_input AS output;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"figure\",{className:\"framer-table-wrapper\",children:/*#__PURE__*/e(\"table\",{children:/*#__PURE__*/t(\"tbody\",{children:[/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"prompt\"})}),/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"category\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What is the distance between Earth and Sun?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"ham\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Get a free entry for the game. Text your login credentials to 12345.\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"spam\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What to do when my tooth aches?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"ham\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Can you tell me what movie to watch?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"ham\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"As a valued network customer you have been selected to receive a prize reward! To claim call 09061701461.\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"spam\"})})]})]})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Now it\u2019s time to filter the prompt messages based on the classification performed by the quarantined model.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"We start by creating a view that stores the classification output.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE VIEW prompts (\\n  SELECT input.prompt, output.category\\n  FROM local_postgres.prompts AS input\\n  JOIN quarantined_llm_classifies_input AS output\\n);\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Then, we create another view with the filtered content.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE VIEW ham_prompts (\\n  SELECT *\\n  FROM prompts\\n  WHERE category = 'ham'\\n);\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The filtered prompts are passed to the privileged model to get answers.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input.prompt, output.answer\\nFROM ham_prompts AS input\\nJOIN privileged_llm_provides_answers AS output;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"figure\",{className:\"framer-table-wrapper\",children:/*#__PURE__*/e(\"table\",{children:/*#__PURE__*/t(\"tbody\",{children:[/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"prompt\"})}),/*#__PURE__*/e(\"th\",{children:/*#__PURE__*/e(\"p\",{children:\"answer\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What is the distance between Earth and Sun?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"The distance between Earth and the Sun is approximately 93 million miles...\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"What to do when my tooth aches?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"When you experience a toothache, you can try the following steps to alleviate the pain...\"})})]}),/*#__PURE__*/t(\"tr\",{children:[/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:\"Can you tell me what movie to watch?\"})}),/*#__PURE__*/e(\"td\",{children:/*#__PURE__*/e(\"p\",{children:'Of course! I would recommend watching \"The Shawshank Redemption.\" It\\'s a classic drama film...'})})]})]})})}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB offers a comprehensive selection of machine learning frameworks and large language models, including OpenAI and Hugging Face, that are well-suited for implementing the dual LLM pattern. With MindsDB, developers can bridge the gap between data and ML models to build robust AI systems. Whether it's leveraging pre-trained models or training custom models, MindsDB provides the flexibility and scalability needed to implement the dual LLM pattern effectively.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Additionally, MindsDB offers convenient software development kits (SDKs) in both \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sdk/python-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Python\"})}),\" and \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sdk/javascript-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"JavaScript\"})}),\", enabling seamless integration directly into your codebase. This empowers developers to incorporate prompt security measures effortlessly while harnessing the power of MindsDB's machine learning capabilities.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"To streamline and automate the workflow described in this section, MindsDB offers the \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/blog/mindsdb-introduces-jobs-a-new-feature-for-automated-machine-learning-workflows\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"jobs feature\"})}),\" that lets you effortlessly automate the execution of tasks. This functionality empowers users to schedule and manage recurring or time-dependent processes, enhancing the efficiency and productivity of AI systems.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Stay Vigilant\"}),/*#__PURE__*/e(\"p\",{children:\"In this article, we have explored the power of the dual LLM pattern in bolstering prompt security within AI systems. By leveraging the capabilities of MindsDB, we have demonstrated how this pattern can mitigate the risks associated with prompt hacking.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB provides developers with the necessary tools to implement the dual LLM pattern seamlessly. The Python and JavaScript SDKs further enable developers to integrate it directly into their code. And, by utilizing the jobs feature, workflows can be streamlined and executed effortlessly.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"It is important to note that while the dual LLM pattern is a significant measure for prompt security, it does not provide foolproof protection against all potential threats. Constant vigilance, continuous monitoring, and keeping up with evolving security practices are essential to maintain a robust defense against prompt hacking.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"})]});export const richText5=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"In the world of data-driven decision-making, time series forecasting plays an essential role in predicting future trends and driving business success. To empower organizations with even greater predictive capabilities, MindsDB is thrilled to announce its recent integration with Nixtla's StatsForecast, a machine learning engine tailored for accurate and efficient time series forecasting.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we introduce the StatsForecast engine and present usage examples.\"}),/*#__PURE__*/e(\"h2\",{children:\"Streamline Forecasting with StatsForecast\"}),/*#__PURE__*/e(\"p\",{children:\"The advantages brought to time series forecasting by the StatsForecast engine integration with MindsDB include fast and accurate implementations of models, probabilistic forecasting and confidence intervals, support for exogenous variables and static covariates, anomaly detection, and more.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"To explore the implementation details and features of StatsForecast in-depth, please refer to \",/*#__PURE__*/e(i,{href:\"https://nixtla.github.io/statsforecast/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"this link\"})}),\". Please note that this integration does not cover all available features of StatsForecast; we\u2019re working on enabling more features soon.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Example: Forecasting Future Expenses\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s create a model based on the StatsForecast engine to estimate monthly expenses of various categories.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL quarterly_expenditure_forecaster\\nFROM mysql_demo_db\\n  (SELECT * FROM historical_expenditures)\\nPREDICT expenditure\\nORDER BY month\\nGROUP BY category\\nHORIZON 3\\nUSING\\n        ENGINE = 'statsforecast';\\n        HIERARCHY = [\u2018category\u2019];\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We use the CREATE MODEL statement to create and train the quarterly_expenditure_forecaster model.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"As it is not a pre-trained model, we must provide a training dataset in the FROM clause so the model learns from patterns followed by historical data. We use the historical_expenditures table that stores monthly expenditures of different categories.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Next, we define the column to be predicted (here, it is the expenditure column). It is followed by the ORDER BY clause, ensuring chronological order of records, and the GROUP BY clause to split data into groups (here, based on expenditure categories).\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Since the interval between data records is one month, by defining HORIZON 3, we ask the model to predict expenditures for the upcoming three months.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"At last, we use the USING clause to define the engine as statsforecast. Optionally, we can define the HIERARCHY parameter to support hierarchical reconciliation that may improve prediction accuracy when the data has a hierarchical structure. This option is powered by another Nixtla library that focuses exclusively on this technique, \",/*#__PURE__*/e(i,{href:\"https://nixtla.github.io/hierarchicalforecast/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Hierarchical Forecast\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"To explore more examples, visit \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/nixtla/statsforecast\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation here\"})}),\".\"]}),/*#__PURE__*/e(\"h2\",{children:\"What\u2019s Next\"}),/*#__PURE__*/e(\"p\",{children:\"If you are already familiar with MinsdDB, we encourage you to try its new integration with Nixtla\u2019s StatsForecast ML engine, as it can enhance time series forecasting with its wide range of features.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"And if you are new to MindsDB, you can access MindsDB via local \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Docker installation\"})}),\", \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker-desktop\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB\u2019s extension\"})}),\" on Docker Desktop or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/cloud/aws-marketplace\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"AWS Marketplace\"})}),\". Join our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community\"})}),\" to ask questions and share feedback.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})})]});export const richText6=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"MindsDB developed the Python SDK that enables users to interact with MindsDB directly from Python code. You can leverage the power of AI in your applications without the need for ETL pipelines or model-serving architecture.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we\u2019ll show you how to use our Python SDK to create and train models directly in Python.\"}),/*#__PURE__*/e(\"h2\",{children:\"How to Use Python SDK\"}),/*#__PURE__*/t(\"p\",{children:[\"To use MindsDB\u2019s Python SDK, you need to \",/*#__PURE__*/e(i,{href:\"https://pypi.org/project/mindsdb-sdk/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"install it via pip\"})}),\", as below:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"pip install mindsdb_sdk\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"You can connect to the MindsDB server from Python using HTTP API:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"server_local = mindsdb_sdk.connect('http://127.0.0.1:47334')\\nserver_cloud = mindsdb_sdk.connect(login='a@b.com', password='pass123')\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"If you installed MindsDB locally via \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/pip/source\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"pip\"})}),\" or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Docker\"})}),\", use the connect method with one argument being your IP address and port. And if you use the MindsDB Cloud account, provide your login and password to connect.\"]}),/*#__PURE__*/e(\"h3\",{children:\"Working with MindsDB Objects\"}),/*#__PURE__*/e(\"p\",{children:\"Python SDK provides all methods necessary to interact with databases, tables, projects, models, views, and jobs. These include listing available objects, fetching objects with the get method, creating new objects, making predictions, and more.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Once you store the connection to MindsDB in the server variable, you can use it to fetch one of the connected data sources, like this:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"database = server.get_database('example_db')\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Now let\u2019s get a table stored in this data source:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"table = database.get_table('demo_data.home_rentals')\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"To get a project, we use again the server variable:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"project = server.get_project(\u2018mindsdb\u2019)\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"In MindsDB, projects are a natural way to keep artifacts, such as models or views, separate according to what predictive task they solve. You can learn more about MindsDB projects \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/project\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"here\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"The models, views, and jobs reside within projects. So to list or fetch them, you call the methods on the project variable.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s save one of the models available in the mindsdb project, so we can make predictions:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"model = project.get_model(\u2018home_rentals_model\u2019)\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here is how to make predictions:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"predictions = model.predict(table)\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The predict method is called on the model variable. The table variable stores the input data used to make predictions.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"Visit \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sdk/python-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation\"})}),\" to see more examples of how to use MindsDB\u2019s Python SDK.\"]}),/*#__PURE__*/e(\"h2\",{children:\"What\u2019s Next\"}),/*#__PURE__*/e(\"p\",{children:\"If you are already familiar with MinsdDB, we encourage you to try interacting with MindsDB via the Python SDK. It enables you to automate the process of training models and making predictions by running Python code.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"And if you are new to MindsDB, go ahead and create a demo account to explore \",/*#__PURE__*/e(i,{href:\"https://cloud.mindsdb.com/\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB Cloud\"})}),\". Join our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community\"})}),\" to ask questions and share feedback.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"})]});export const richText7=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"In the vast world of artificial intelligence, language processing is a captivating and complex field. It requires robust frameworks and innovative solutions to comprehend and generate human language. Excitingly, MinsdDB's integration with LangChain combines powerful in-database AI capabilities and a cutting-edge language processing framework for developing applications powered by large language models (LLMs). Together, they empower developers, data scientists, and businesses to effortlessly interact with their databases, unlocking new possibilities for data exploration, analysis, and decision-making.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"LangChain models address the limitations of working directly with large language models (such as the GPT family from OpenAI) by providing better control and accuracy in text generation. LangChain allows users to connect multiple large language models in a logical way using chains, leveraging the strengths of each model and expanding the capabilities of language processing systems. It also enables the usage of mechanisms like memories and output parsers, which can improve the robustness of LLM-based applications. By employing chains, memories, and output parsers, LangChain empowers users to create, among other things, so-called \u201Cagents\u201D that emerge out of forcing LLMs into a structured loop to achieve reasoning. These agents can understand and interact with data, making communication with data more efficient and intuitive.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we delve into the transformative potential of MinsdDB's integration with LangChain starting from natural language understanding by the LangChain model to communicating with your database.\"}),/*#__PURE__*/e(\"h2\",{children:\"Communicate with your Database using LangChain and MindsDB\"}),/*#__PURE__*/e(\"p\",{children:\"The ability to seamlessly communicate with databases is a fundamental requirement for numerous applications and industries. With the powerful combination of LangChain and MindsDB, this essential task becomes not only efficient but also remarkably intuitive.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here is how to create a LangChain model in MindsDB to accomplish the aforementioned tasks:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL tool_based_agent\\nPREDICT completion\\nUSING\\n    engine = 'langchain',\\n    prompt_template = 'Answer the users input in a helpful way: {{input}}';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"This model is going to act as an agent between you and your data. Every time we interact with the model, we pass the user\u2019s input in the {{input}} variable.\"}),/*#__PURE__*/e(\"h3\",{children:\"Describing the Data\"}),/*#__PURE__*/e(\"p\",{children:\"In the ever-evolving landscape of data-driven decision-making, the ability to accurately describe and understand complex datasets is of paramount importance.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here is how to inquire about data descriptions from the agent:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input, completion\\nFROM tool_based_agent\\nWHERE input = 'Could you describe the `mysql_demo_db.house_sales` table please?'\\nUSING\\n    verbose = True,\\n    tools = [],\\n    max_iterations = 10;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We ask the agent to describe the house_sales table available in the connected data source named mysql_demo_db.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"And here is the answer:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"The `mysql_demo_db.house_sales` table has four columns: \\n\t`saledate` (text), \\n\t`house_price_moving_average` (integer), \\n\t`type` (text), \\n\tand `bedrooms` (integer).\",language:\"Markdown\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"The agent uses its Metadata tool to fetch information about the table. Then it writes an answer back to the user.\"}),/*#__PURE__*/e(\"h3\",{children:\"Analyzing the Data\"}),/*#__PURE__*/e(\"p\",{children:\"In the realm of data analysis, the ability to extract meaningful insights from vast amounts of information is a game-changer for businesses and researchers alike. We present here the transformative potential of utilizing LangChain and MindsDB for data analysis.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Let's prompt our agent to perform data analysis:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT input, completion\\nFROM tool_based_agent\\nWHERE input = 'I want to know the average number of beds in the downtown neighbourhood as per the `mysql_demo_db.home_rentals` table'\\nUSING\\n    verbose = True,\\n    tools = [],\\n    max_iterations = 10;\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here the agent must figure out a way to find out the average number of beds in the downtown neighbourhood using the home_rentals table available in the connected data source named mysql_demo_db.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Using the Metadata tool, the agent comes up with this query:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"SELECT AVG(number_of_rooms)\\nFROM mysql_demo_db.home_rentals\\nWHERE neighborhood = 'downtown';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"It returns 1.6, which is written back to the user as below:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"The average number of beds in the downtown neighbourhood \\nas per the `mysql_demo_db.home_rentals` table is 1.6.\",language:\"Markdown\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"To see more examples of how to describe, analyze, retrieve, and insert data using LangChain and MindsDB, visit \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/custom-model/langchain\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation here\"})}),\".\"]}),/*#__PURE__*/e(\"h2\",{children:\"What\u2019s Next\"}),/*#__PURE__*/e(\"p\",{children:\"If you are already familiar with MinsdDB, we encourage you to try its new integration with the LangChain ML engine, as it enables you to retrieve insights and manipulate your data through natural language queries.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"And if you are new to MindsDB, go ahead and try it out by installing it locally via \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Docker \"})}),\"or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker-desktop\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"MindsDB\u2019s extension\"})}),\" on Docker Desktop. Join our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community\"})}),\" to ask questions and share feedback.\"]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"})]});export const richText8=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"We are excited to introduce to our community a new way of interacting with MindsDB via the JavaScript SDK. You can create, train, and use ML models directly from the JavaScript code. Read along to learn how to leverage the power of AI in your web applications.  \"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we introduce the JavaScript SDK. It enables you to perform most of the MindsDB operations inside the JavaScript code, including connecting databases, training and querying models, and more.\"}),/*#__PURE__*/e(\"h2\",{children:\"How to Use JavaScript SDK\"}),/*#__PURE__*/e(\"p\",{children:\"Before we can use the JS SDK, we must install it by running the following command:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"npm install --save mindsdb-js-sdk\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Another way is to clone the \",/*#__PURE__*/e(i,{href:\"https://github.com/mindsdb/mindsdb-js-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"JS SDK repository\"})}),\" and install all dependencies manually.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Once installation of the package succeeds, the next step is to connect MindsDB. You can connect either your local installation or your MindsDB Cloud account, as below.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"const MindsDB = require(\\\"mindsdb-js-sdk\\\").default;\\n\\xa0\\ntry {\\n\\xa0\\n  await MindsDB.connect({\\n    user: 'user@email.com',\\n    password: 'password'\\n  });\\n  console.log('connected');\\n\\xa0\\n} catch(error) {\\n  // Failed to authenticate\\n  console.log(error);\\n}\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Please visit \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sdk/javascript-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation\"})}),\" for details.\"]}),/*#__PURE__*/e(\"h3\",{children:\"Forecasting House Sales using a Time Series Model with JavaScript SDK\"}),/*#__PURE__*/e(\"p\",{children:\"JavaScript SDK provides functions to interact with databases, tables, projects, models, and views. These include listing available objects, fetching objects with the get method, creating new objects, making predictions, and more.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Let\u2019s go over an example of creating and training a time series model, and then, using it to make batch predictions.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"First, we need to define the training options, including training data, columns used to order and group data, the window clause defining how many rows to look back at, and the horizon clause defining how many data records to forecast.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Defining training options\\nconst timeSeriesTrainingOptions = {\\n  integration: 'example_db',\\n  select: 'SELECT * FROM demo_data.house_sales',\\n  orderBy: 'saledate',\\n  groupBy: 'bedrooms',\\n  window: 8,\\n  horizon: 4\\n}\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We use the trainModel function to create and train a model. Its first argument is the model name. The second argument stores a column to be predicted. And in the third argument, we pass all training options defined above.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Creating and training a model\\nlet houseSalesForecastModel = await MindsDB.Models.trainModel(\\n  'house_sales_model',\\n  'ma',\\n  'mindsdb',\\n  timeSeriesTrainingOptions);\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"It may take some time to train the model. Here is how to check the model status until it finishes the training phase.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Waiting for the training to be complete\\nwhile (houseSalesForecastModel.status !== 'complete' && houseSalesForecastModel.status !== 'error') {\\n  houseSalesForecastModel = await MindsDB.Models.getModel('house_sales_model', 'mindsdb');\\n}\\n\\xa0\\n// Checking model's status\\nconsole.log('Model status: ' + houseSalesForecastModel.status);\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"You can also describe a model. It is equivalent to using the \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sql/api/describe\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"DESCRIBE\"})}),\" statement.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Describing a model\\nconst modelDescription = await houseSalesForecastModel.describe();\\nconsole.log('Model description:');\\nconsole.log(modelDescription\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Now that the model is ready, we can make predictions. In the case of time series models, we make batch predictions by joining the data table with the model, where the data table serves as input data for the model.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Defining query options\\nconst queryOptions = {\\n  // Join model to this data source\\n  join: 'example_db.demo_data.house_sales',\\n  // When using batch queries, the 't' alias is used for the joined data source ('t' is short for training/test)\\n  // The 'm' alias is used for the trained model to be queried\\n  where: ['t.saledate > LATEST', 't.bedrooms = 2'],\\n  limit: 4\\n}\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"We use the batchQuery function to query for batch predictions.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"// Querying for batch predictions\\nconst rentalPriceForecasts = await houseSalesForecastModel.batchQuery(queryOptions);\\nconsole.log('Batch predictions:');\\nrentalPriceForecasts.forEach(f => {\\n  console.log(f.value);\\n  console.log(f.explain);\\n  console.log(f.data);\\n})\",language:\"JavaScript\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"Visit \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/sdk/javascript-sdk\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation\"})}),\" to learn more about all functions available in the JS SDK.\"]}),/*#__PURE__*/e(\"h2\",{children:\"What\u2019s Next\"}),/*#__PURE__*/e(\"p\",{children:\"If you are already familiar with MinsdDB, we encourage you to try interacting with MindsDB via the JavaScript SDK. It enables you to create and train models and make predictions right inside your web applications.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"If you are new to MindsDB, go ahead and and try it out by installing it locally via \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:/*#__PURE__*/e(\"strong\",{children:\"Docker\"})})}),/*#__PURE__*/e(\"strong\",{children:\" \"}),\"or \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker-desktop\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:/*#__PURE__*/e(\"strong\",{children:\"MindsDB\u2019s extension\"})})}),\" on Docker Desktop.\",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker-desktop\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\" \"})}),/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/setup/self-hosted/docker\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Join \"})}),\"our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!1,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community\"})}),\" to ask questions and share feedback.\"]})]});export const richText9=/*#__PURE__*/t(o.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"We are happy to announce a new feature available for MindsDB Pro users - Bring Your Own Model (BYOM). This feature lets you upload custom ML models to MindsDB and incorporate them into the MindsDB ecosystem.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we'll introduce the BYOM feature and present how to upload a custom model to MindsDB.\"}),/*#__PURE__*/e(\"h2\",{children:\"Why Bring Your Models to MindsDB\"}),/*#__PURE__*/e(\"p\",{children:\"Integrating ML models with data can be a daunting task, often requiring complex Extract, Transform, Load (ETL) pipelines. MindsDB streamlines this process by facilitating in-database machine learning. With MindsDB, you can train and deploy your custom model directly within the data environment, eliminating the need for intricate data movement and transformation steps.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"By uploading your model to MindsDB, you gain the advantage of utilizing it seamlessly with all connected data sources. MindsDB allows you to leverage your model across diverse datasets. Whether your data resides in relational databases, cloud storage, or data warehouses, MindsDB ensures that your uploaded model can effortlessly access and analyze the data it requires.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"The ease of using your uploaded model with various data sources opens up a world of opportunities. You can conduct real-time predictions, forecast trends, and gain valuable insights from the continuously evolving data landscape. Within MindsDB, your custom model stays synchronized with the connected data sources, enabling you to make decisions based on the most up-to-date information.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"To summarize, here are the benefits of uploading your custom ML model to MindsDB:\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It simplifies the process of incorporating custom models into the data environment.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It eliminates complex ETL pipelines.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It enables in-database machine learning.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"With the BYOM feature, MindsDB helps you leverage the power of your models across diverse datasets and stay ahead of the curve in data-driven decision-making.\"}),/*#__PURE__*/e(\"h2\",{children:\"How to Bring Your Own Model\"}),/*#__PURE__*/e(\"p\",{children:\"ML models are commonly implemented using the Python programming language. To bring your custom model to MindsDB, you must upload the Python code along with the requirements.txt file.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"To do so, click the Add button and Upload custom model, like this:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"336\",src:\"https://framerusercontent.com/images/14wN3igu66ZUjV5buehXasYpVs.png\",srcSet:\"https://framerusercontent.com/images/14wN3igu66ZUjV5buehXasYpVs.png?scale-down-to=512 512w,https://framerusercontent.com/images/14wN3igu66ZUjV5buehXasYpVs.png 1018w\",style:{aspectRatio:\"1018 / 672\"},width:\"509\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"Here is the form that needs to be filled out in order to bring your model to MindsDB:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"524\",src:\"https://framerusercontent.com/images/pCavx7PjALMxEg7rfEv7Pi3GrhM.png\",srcSet:\"https://framerusercontent.com/images/pCavx7PjALMxEg7rfEv7Pi3GrhM.png?scale-down-to=512 512w,https://framerusercontent.com/images/pCavx7PjALMxEg7rfEv7Pi3GrhM.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/pCavx7PjALMxEg7rfEv7Pi3GrhM.png 1401w\",style:{aspectRatio:\"1401 / 1049\"},width:\"700\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/e(\"p\",{children:\"First, you must upload a Python file with the model\u2019s implementation followed by the requirements file that stores all the dependencies. Then provide an engine name that will be used to create the model.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Here is an example of how to set up your model in MindsDB (given the engine name is custom_ML_engine):\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(r,{...t,code:\"CREATE MODEL custom_model\\nFROM my_integration\\n    (SELECT * FROM my_table)\\nPREDICT target\\nUSING\\n    ENGINE = 'custom_ML_engine';\",language:\"SQL\"})})}),/*#__PURE__*/e(\"p\",{children:\"Once your model is uploaded, it can leverage all available MindsDB features.\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Use the SELECT command to make predictions.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Use the JOIN clause to join your model with a data table and make batch predictions.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/e(\"p\",{children:\"Stay tuned for the upcoming features:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Describing models with the DESCRIBE command.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Retraining models to accommodate the latest developments with the RETRAIN command.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Finetuning models using a specific dataset with the FINETUNE command.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"To learn more, check out \",/*#__PURE__*/e(i,{href:\"https://docs.mindsdb.com/custom-model/byom\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"our documentation here\"})}),\".\"]}),/*#__PURE__*/e(\"h2\",{children:\"Try It Out\"}),/*#__PURE__*/e(\"p\",{children:\"MindsDB offers a variety of resources to help you get started and succeed in your ML projects. If you are a MindsDB Pro user, you can upload your own custom model and incorporate it into the MindsDB ecosystem using the BYOM feature.\"}),/*#__PURE__*/e(\"p\",{children:\"\u200D\"}),/*#__PURE__*/t(\"p\",{children:[\"If you are new to MindsDB and require any assistance, join our \",/*#__PURE__*/e(i,{href:\"https://mindsdb.com/joincommunity\",motionChild:!0,nodeId:\"jx5MRPdv1\",openInNewTab:!0,scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(a.a,{children:\"Slack community\"})}),\" to ask questions and share feedback.\"]})]});\nexport const __FramerMetadata__ = {\"exports\":{\"richText5\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText2\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText4\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText3\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText1\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText9\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText8\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText6\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText7\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "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",
  "names": ["richText", "u", "x", "p", "Link", "motion", "ComponentPresetsConsumer", "t", "CodeBlock_default", "richText1", "richText2", "richText3", "richText4", "richText5", "richText6", "richText7", "richText8", "richText9", "__FramerMetadata__"]
}
