diff --git a/examples/third_party/Automated_Finetuning_with_MindsDB.ipynb b/examples/third_party/Automated_Finetuning_with_MindsDB.ipynb new file mode 100644 index 00000000..1a72971f --- /dev/null +++ b/examples/third_party/Automated_Finetuning_with_MindsDB.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "attachments": { + "a746bc32-a593-4599-9ee0-86b4daefdd95.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "48a102bd-9fac-4422-a966-64c562fddcc9", + "metadata": {}, + "source": [ + "![image.png](attachment:a746bc32-a593-4599-9ee0-86b4daefdd95.png)" + ] + }, + { + "cell_type": "markdown", + "id": "dc004d0f-9a2e-41a4-9902-749bf5f45465", + "metadata": {}, + "source": [ + "[MindsDB](https://github.com/mindsdb/mindsdb) is the platform for customizing AI from enterprise data. With MindsDB and its nearly 200 integrations to data sources and AI/ML frameworks, any developer can deploy, serve, and fine-tune models in real-time, and build AI-powered applications." + ] + }, + { + "cell_type": "markdown", + "id": "fd1a412b-bfa7-48c2-a92f-cdf81341e064", + "metadata": {}, + "source": [ + "[MindsDB integrates with OpenAI](https://docs.mindsdb.com/integrations/ai-engines/openai), enabling users to deploy, serve, and fine-tune OpenAI models within MindsDB, making them accessible to numerous data sources.\n", + "\n", + "In this example we are going to teach an OpenAI model, how to write MindsDB AI SQL queries" + ] + }, + { + "cell_type": "markdown", + "id": "d4f62724-f89d-418e-a3e5-6fe334940d51", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "Before proceeding, ensure the following prerequisites are met:\n", + "\n", + "- Install MindsDB locally via [Docker.](https://docs.mindsdb.com/setup/self-hosted/docker)\n", + "- Obtain the OpenAI API key required to deploy and use OpenAI models within MindsDB." + ] + }, + { + "cell_type": "markdown", + "id": "a123da53-94c8-4137-af9b-07dd99484fe0", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "MindsDB provides the [OpenAI handler](https://github.com/mindsdb/mindsdb/tree/staging/mindsdb/integrations/handlers/openai_handler) that enables you to create OpenAI models within MindsDB.\n", + "\n", + "## AI Engine\n", + "\n", + "Before creating a model, it is required to create an AI engine based on the provided handler." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa7ec23f-37d3-4b6b-9884-410d1a399825", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE ML_ENGINE openai_engine\n", + "FROM openai\n", + "USING\n", + " openai_api_key = 'your-openai-api-key';" + ] + }, + { + "cell_type": "markdown", + "id": "e055ce51-c94f-4adf-aeee-60da2f82e08a", + "metadata": {}, + "source": [ + "## AI Model" + ] + }, + { + "cell_type": "markdown", + "id": "cb50d7f1-d661-42b8-8a9a-144d3ee32d72", + "metadata": {}, + "source": [ + "Then, create a model to answer questions about MindsDB’s custom SQL syntax using this engine:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52e5fe9e-8192-4118-ab0d-9240bff73ac1", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE MODEL openai_davinci\n", + "PREDICT completion\n", + "USING\n", + " engine = 'openai_engine',\n", + " model_name = 'davinci-002',\n", + " prompt_template = 'Return a valid SQL string for the following question about MindsDB in-database machine learning: {{prompt}}';" + ] + }, + { + "cell_type": "markdown", + "id": "235057a2-45db-456f-9268-5c055e4050a6", + "metadata": {}, + "source": [ + "You can check model status with this command:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e06cb6b9-8ace-43b5-b392-465bdabef80c", + "metadata": {}, + "outputs": [], + "source": [ + "DESCRIBE openai_davinci;" + ] + }, + { + "cell_type": "markdown", + "id": "b07b55a4-9427-420d-b793-f0f85b5f0201", + "metadata": {}, + "source": [ + "Once the status is complete, we can query for predictions:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13185a09-20d4-4a29-ac68-eb144a5ab67d", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT prompt, completion\n", + "FROM openai_davinci as m\n", + "WHERE prompt = 'What is the SQL syntax to join input data with predictions from a MindsDB machine learning model?'\n", + "USING max_tokens=400;" + ] + }, + { + "cell_type": "markdown", + "id": "64e0d76b-1881-4f93-a152-b2651c08b2f1", + "metadata": {}, + "source": [ + "On execution, we get:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc3fc557-1aec-4f3c-81de-5fffecbe0d6e", + "metadata": {}, + "outputs": [], + "source": [ + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+\n", + "| prompt | completion |\n", + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+\n", + "| What is the SQL syntax to join input data with predictions from a MindsDB machine learning model? | The SQL syntax is: SELECT * FROM input_data INNER JOIN predictions ON input_data.id = predictions.id |\n", + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+" + ] + }, + { + "cell_type": "markdown", + "id": "40c01e12-9f7d-4907-af7c-65d53cafcda9", + "metadata": {}, + "source": [ + "## Finetune Model" + ] + }, + { + "cell_type": "markdown", + "id": "16796956-7b36-43ce-908d-c2851c7050d1", + "metadata": {}, + "source": [ + "Now, we’ll fine-tune our model using a table that stores details about MindsDB’s custom SQL syntax.\n", + "\n", + "[Upload](https://docs.mindsdb.com/mindsdb_sql/sql/create/file) this [dataset](https://github.com/mindsdb/mindsdb/blob/staging/docs/use-cases/automated_finetuning/data.csv) as a file which you can use as a table." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc394180-1cc0-4494-88b2-29e05a4af7d1", + "metadata": {}, + "outputs": [], + "source": [ + "FINETUNE openai_davinci\n", + "FROM files\n", + " (SELECT prompt, completion FROM openai_learninghub_ft);" + ] + }, + { + "cell_type": "markdown", + "id": "56d6adb5-8adc-4198-882f-56d2cd251922", + "metadata": {}, + "source": [ + "The `FINETUNE` command creates a new version of the openai_davinci model. You can query all available versions as below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "410063cc-9b64-462f-bc16-17b5c0b1583c", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT *\n", + "FROM models_versions\n", + "WHERE name = 'openai_davinci';" + ] + }, + { + "cell_type": "markdown", + "id": "3fc43552-7dbd-44da-ba96-6ce626ceefa7", + "metadata": {}, + "source": [ + "Once the new version status is complete and active, we can query the model again, expecting a more accurate output." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c513479e-b8e0-4d6d-b3fd-a20c23c52ab7", + "metadata": {}, + "outputs": [], + "source": [ + "SELECT prompt, completion\n", + "FROM openai_davinci as m\n", + "WHERE prompt = 'What is the SQL syntax to join input data with predictions from a MindsDB machine learning model?'\n", + "USING max_tokens=400;" + ] + }, + { + "cell_type": "markdown", + "id": "3e9ece4a-09b8-440c-a9c7-c6f3401f4849", + "metadata": {}, + "source": [ + "On execution you get:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b3ebaaf-d95a-496a-8318-9ad6f1e8d150", + "metadata": {}, + "outputs": [], + "source": [ + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+\n", + "| prompt | completion |\n", + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+\n", + "| What is the SQL syntax to join input data with predictions from a MindsDB machine learning model? | SELECT * FROM mindsdb.models.my_model JOIN mindsdb.input_data_name; |\n", + "+---------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+" + ] + }, + { + "cell_type": "markdown", + "id": "2cc7e120-6195-4b89-b673-6766febf5463", + "metadata": {}, + "source": [ + "If you have dynamic data that gets updated regularly, you can set up an automated fine-tuning as below.\n", + "\n", + "Note that the data source must contain an incremental column, such as timestamp or integer, so MindsDB can pick up only the recently added data.\n", + "\n", + "Create a view to store recently added data with the help of the `LAST` keyword:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "178e16e6-6243-4414-801f-a024fd7d3ac5", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE VIEW recent_data (\n", + " SELECT *\n", + " FROM files.openai_learninghub_ft\n", + " WHERE timestamp > LAST\n", + ");" + ] + }, + { + "cell_type": "markdown", + "id": "1cd1446b-b910-47fa-984a-5b1190eeaea5", + "metadata": {}, + "source": [ + "Create a job to fine-tune the model periodically." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2a2c3877-e1ee-4dcd-b0f0-50e3b51643aa", + "metadata": {}, + "outputs": [], + "source": [ + "CREATE JOB automated_finetuning (\n", + "\n", + " FINETUNE openai_davinci\n", + " FROM mindsdb\n", + " (SELECT * FROM recent_data)\n", + ")\n", + "EVERY 1 day;" + ] + }, + { + "cell_type": "markdown", + "id": "3376252e-fa19-4777-9580-8e3b59138c58", + "metadata": {}, + "source": [ + "Now your model will be fine-tuned with newly added data every day." + ] + }, + { + "cell_type": "markdown", + "id": "cbcbf589-061b-46ab-912b-f94526f36e82", + "metadata": {}, + "source": [ + "See below more Usecases:\n", + "\n", + "- [Text Summarization with MindsDB and OpenAI using SQL](https://docs.mindsdb.com/use-cases/data_enrichment/text-summarization-inside-mysql-with-openai)\n", + "- [Sentiment Analysis with MindsDB and OpenAI using SQL](https://docs.mindsdb.com/use-cases/data_enrichment/sentiment-analysis-inside-mysql-with-openai)\n", + "- [Question Answering with MindsDB and OpenAI using SQL](https://docs.mindsdb.com/use-cases/data_enrichment/question-answering-inside-mysql-with-openai)\n", + "- [Extract JSON from Text](https://docs.mindsdb.com/use-cases/data_enrichment/json-from-text)\n", + "- [Text Summarization with MindsDB and OpenAI using MQL](https://docs.mindsdb.com/use-cases/data_enrichment/text-summarization-inside-mongodb-with-openai)\n", + "- [Sentiment Analysis with MindsDB and OpenAI using MQL](https://docs.mindsdb.com/use-cases/data_enrichment/sentiment-analysis-inside-mongodb-with-openai)\n", + "- [Question Answering with MindsDB and OpenAI using MQL](https://docs.mindsdb.com/use-cases/data_enrichment/question-answering-inside-mongodb-with-openai)" + ] + }, + { + "cell_type": "markdown", + "id": "dea49252-c6d8-4f49-b0a0-a96a6440a037", + "metadata": {}, + "source": [ + "Follow MindsDB's [OpenAI documentation](https://docs.mindsdb.com/integrations/ai-engines/openai) for more information." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}