diff --git a/.circleci/config.yml b/.circleci/config.yml index ed5a05f5e9..26200eb04e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,12 @@ workflows: name: Linter | v3.10 | Linux mode: LINTER ################################ + ## DOC: All + ################################ + ################################ + - Doc: + name: Doc | v3.10 | Linux + ################################ #### PIP: Master ################################ ################################ @@ -94,6 +100,17 @@ workflows: - master - staging ################################ + ### THIRD PARTY: Staging, Master + ################################ + ################################ + - MySQL: + name: Third Party Test - MySQL | v3.10 | Linux + filters: + branches: + only: + - master + - staging + ################################ ### NOTEBOOKS: Staging, Master ################################ ################################ @@ -178,8 +195,8 @@ jobs: RAY: << parameters.ray >> command: | "python<< parameters.v >>" -m venv test_evadb - pip install --upgrade pip source test_evadb/bin/activate + pip install --upgrade pip if [ $RAY = "ENABLED" ]; then if [ $PY_VERSION != "3.11" ]; then pip install ".[dev,ray,qdrant]" @@ -225,6 +242,101 @@ jobs: paths: - test_evadb + Doc: + parameters: + v: + type: string + default: "3.10" + mode: + type: string + default: "DOC" + resource_class: large + docker: + # https://circleci.com/docs/circleci-images#language-image-variants + - image: "cimg/python:<< parameters.v >>-node" + steps: + + - checkout + + # Restore pip wheel + - restore_cache: + keys: + - v1-pip-wheel_cache-python<< parameters.v >>-{{ checksum "docs/requirements.txt" }}-{{ checksum "package-lock.json" }} + + - run: + name: Install EvaDB Doc dependencies + command: | + "python<< parameters.v >>" -m venv test_evadb_doc + source test_evadb_doc/bin/activate + pip install --upgrade pip + pip install -r docs/requirements.txt + npm install markdown-link-check + + - run: + name: Test doc build and link validation + no_output_timeout: 10m # 10 minute timeout + command: | + source test_evadb_doc/bin/activate + bash script/test/test.sh -m "<< parameters.mode >>" + + - save_cache: + key: v1-pip-wheel_cache-python<< parameters.v >>-{{ checksum "docs/requirements.txt" }}-{{ checksum "package-lock.json" }} + paths: + - test_evadb_doc + - node_modules + + MySQL: + parameters: + v: + type: string + default: "3.10" + resource_class: large + docker: + - image: "cimg/python:<< parameters.v >>" + - image: "cimg/mysql:8.0" + environment: + MYSQL_USER: eva + MYSQL_PASSWORD: password + MYSQL_DATABASE: evadb + + steps: + + - checkout + + # Restore pip wheel + - restore_cache: + keys: + - v1-pip-wheel_cache-python<< parameters.v >>-rayDISABLED-{{ checksum "setup.py" }} + + - restore_cache: + keys: + - v1-model_cache-{{ checksum "setup.py" }} + + - run: + name: Install dockerize + command: wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz + environment: + DOCKERIZE_VERSION: v0.6.1 + + - run: + name: Wait for DB to run + command : dockerize -wait tcp://localhost:3306 -timeout 1m + + - run: + name: Install EvaDB package from GitHub repo with all dependencies + command: | + "python<< parameters.v >>" -m venv test_evadb + pip install --upgrade pip + source test_evadb/bin/activate + pip install ".[dev]" + pip install -r evadb/third_party/databases/mysql/requirements.txt + + - run: + name: Run integration tests + command: | + source test_evadb/bin/activate + PYTHONPATH="." python -m pytest test/third_party_tests/test_native_executor.py -k test_should_run_query_in_mysql + Postgres: parameters: v: @@ -243,6 +355,11 @@ jobs: - checkout + # Restore pip wheel + - restore_cache: + keys: + - v1-pip-wheel_cache-python<< parameters.v >>-rayDISABLED-{{ checksum "setup.py" }} + - restore_cache: keys: - v1-model_cache-{{ checksum "setup.py" }} @@ -264,6 +381,7 @@ jobs: pip install --upgrade pip source test_evadb/bin/activate pip install ".[dev]" + pip install -r evadb/third_party/databases/postgres/requirements.txt - run: name: Run integration tests @@ -317,7 +435,7 @@ jobs: source test_evadb/bin/activate pip install --upgrade pip pip debug --verbose - pip install ".[dev,ludwig,qdrant]" + pip install ".[dev,ludwig,qdrant,forecasting]" source test_evadb/bin/activate bash script/test/test.sh -m "<< parameters.mode >>" diff --git a/.gitignore b/.gitignore index b9a2309a68..1a091b9894 100644 --- a/.gitignore +++ b/.gitignore @@ -205,8 +205,13 @@ dep.txt *eva_data/ *evadb_data/ -# models +# models, but not apply to codebase models/ +!evadb/models +!evadb/catalog/models +!test/unit_tests/models +!test/unit_tests/catalog/models + # test files test.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 1750e11127..54502ff89c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### [Deprecated] ### [Removed] +## [0.3.3] - 2023-08-29 + +* PR #983: doc: fix nav bar +* PR #982: fix: batch merge causing redundant row +* PR #981: fix: use the same interface +* PR #979: docs: added logo +* PR #980: docs: Update README.md +* PR #975: Simplify the ludwig dependency +* PR #972: feat: improve dev doc +* PR #971: Revert "feat: Integrating thirdy party Slack API " +* PR #967: feat: Integrating thirdy party Slack API +* PR #966: Developer guide for new structure data source integration +* PR #949: feat: improve circle ci +* PR #946: Support `SELECT Func + ## [0.3.2] - 2023-08-25 * PR #953: docs: Fix User Reference and Dev Guide diff --git a/README.md b/README.md index a6ea5572b2..b759853950 100644 --- a/README.md +++ b/README.md @@ -1,238 +1,252 @@ -# EvaDB: Database System for AI Apps - -
-# - - +Bring AI inside your database system and build AI-powered apps
+ ++ + + + + + + + + + + + + + + + + +
+ +Follow EvaDB
+ + - EvaDB is a database system for building simpler and faster AI-powered applications.
Share EvaDB
-EvaDB is a database system for developing AI apps. We aim to simplify the development and deployment of AI apps that operate on unstructured data (text documents, videos, PDFs, podcasts, etc.) and structured data (tables, vector index). +-The high-level Python and SQL APIs allow beginners to use EvaDB in a few lines of code. Advanced users can define custom user-defined functions that wrap around any AI model or Python library. EvaDB is fully implemented in Python and licensed under an Apache license. + + + + + +
+ + + +EvaDB enables software developers to build AI apps in a few lines of code. Its powerful SQL API simplifies AI app development for both structured and unstructured data. EvaDB's benefits include: +- 🔮 Easy to connect EvaDB with your SQL database system and build AI-powered apps with SQL queries +- 🤝 Query your data with a pre-trained AI model from Hugging Face, OpenAI, YOLO, PyTorch, and other AI frameworks +- ⚡️ Faster queries thanks to AI-centric query optimization +- 💰 Save money spent on running models by efficient CPU/GPU use +- 🔧 Fine-tune your AI models to achieve better results + +👋 Hey! If you're excited about our vision of bringing AI inside database systems, show some ❤️ by: ++ +
++ + + +
+ ++ + + +
## License -Copyright (c) 2018--present [Georgia Tech Database Group](http://db.cc.gatech.edu/). -Licensed under [Apache License](LICENSE). +Copyright (c) [Georgia Tech Database Group](http://db.cc.gatech.edu/). +Licensed under an [Apache License](LICENSE.txt). diff --git a/benchmark/text_summarization/text_summarization_with_evadb.py b/benchmark/text_summarization/text_summarization_with_evadb.py index 7e788a0882..f5e7e5237f 100644 --- a/benchmark/text_summarization/text_summarization_with_evadb.py +++ b/benchmark/text_summarization/text_summarization_with_evadb.py @@ -16,10 +16,10 @@ cursor.query("DROP UDF IF EXISTS TextSummarizer;").df() cursor.query("""CREATE UDF IF NOT EXISTS TextSummarizer TYPE HuggingFace - 'task' 'summarization' - 'model' 'sshleifer/distilbart-cnn-12-6' - 'min_length' 5 - 'max_length' 100;""").df() + TASK 'summarization' + MODEL 'sshleifer/distilbart-cnn-12-6' + MIN_LENGTH 5 + MAX_LENGTH 100;""").df() cursor.query("DROP TABLE IF EXISTS cnn_news_summary;").df() diff --git a/data/forecasting/air-passengers.csv b/data/forecasting/air-passengers.csv new file mode 100644 index 0000000000..c8e1fb2ba1 --- /dev/null +++ b/data/forecasting/air-passengers.csv @@ -0,0 +1,145 @@ +unique_id,ds,y +AirPassengers,1949-01-01,112 +AirPassengers,1949-02-01,118 +AirPassengers,1949-03-01,132 +AirPassengers,1949-04-01,129 +AirPassengers,1949-05-01,121 +AirPassengers,1949-06-01,135 +AirPassengers,1949-07-01,148 +AirPassengers,1949-08-01,148 +AirPassengers,1949-09-01,136 +AirPassengers,1949-10-01,119 +AirPassengers,1949-11-01,104 +AirPassengers,1949-12-01,118 +AirPassengers,1950-01-01,115 +AirPassengers,1950-02-01,126 +AirPassengers,1950-03-01,141 +AirPassengers,1950-04-01,135 +AirPassengers,1950-05-01,125 +AirPassengers,1950-06-01,149 +AirPassengers,1950-07-01,170 +AirPassengers,1950-08-01,170 +AirPassengers,1950-09-01,158 +AirPassengers,1950-10-01,133 +AirPassengers,1950-11-01,114 +AirPassengers,1950-12-01,140 +AirPassengers,1951-01-01,145 +AirPassengers,1951-02-01,150 +AirPassengers,1951-03-01,178 +AirPassengers,1951-04-01,163 +AirPassengers,1951-05-01,172 +AirPassengers,1951-06-01,178 +AirPassengers,1951-07-01,199 +AirPassengers,1951-08-01,199 +AirPassengers,1951-09-01,184 +AirPassengers,1951-10-01,162 +AirPassengers,1951-11-01,146 +AirPassengers,1951-12-01,166 +AirPassengers,1952-01-01,171 +AirPassengers,1952-02-01,180 +AirPassengers,1952-03-01,193 +AirPassengers,1952-04-01,181 +AirPassengers,1952-05-01,183 +AirPassengers,1952-06-01,218 +AirPassengers,1952-07-01,230 +AirPassengers,1952-08-01,242 +AirPassengers,1952-09-01,209 +AirPassengers,1952-10-01,191 +AirPassengers,1952-11-01,172 +AirPassengers,1952-12-01,194 +AirPassengers,1953-01-01,196 +AirPassengers,1953-02-01,196 +AirPassengers,1953-03-01,236 +AirPassengers,1953-04-01,235 +AirPassengers,1953-05-01,229 +AirPassengers,1953-06-01,243 +AirPassengers,1953-07-01,264 +AirPassengers,1953-08-01,272 +AirPassengers,1953-09-01,237 +AirPassengers,1953-10-01,211 +AirPassengers,1953-11-01,180 +AirPassengers,1953-12-01,201 +AirPassengers,1954-01-01,204 +AirPassengers,1954-02-01,188 +AirPassengers,1954-03-01,235 +AirPassengers,1954-04-01,227 +AirPassengers,1954-05-01,234 +AirPassengers,1954-06-01,264 +AirPassengers,1954-07-01,302 +AirPassengers,1954-08-01,293 +AirPassengers,1954-09-01,259 +AirPassengers,1954-10-01,229 +AirPassengers,1954-11-01,203 +AirPassengers,1954-12-01,229 +AirPassengers,1955-01-01,242 +AirPassengers,1955-02-01,233 +AirPassengers,1955-03-01,267 +AirPassengers,1955-04-01,269 +AirPassengers,1955-05-01,270 +AirPassengers,1955-06-01,315 +AirPassengers,1955-07-01,364 +AirPassengers,1955-08-01,347 +AirPassengers,1955-09-01,312 +AirPassengers,1955-10-01,274 +AirPassengers,1955-11-01,237 +AirPassengers,1955-12-01,278 +AirPassengers,1956-01-01,284 +AirPassengers,1956-02-01,277 +AirPassengers,1956-03-01,317 +AirPassengers,1956-04-01,313 +AirPassengers,1956-05-01,318 +AirPassengers,1956-06-01,374 +AirPassengers,1956-07-01,413 +AirPassengers,1956-08-01,405 +AirPassengers,1956-09-01,355 +AirPassengers,1956-10-01,306 +AirPassengers,1956-11-01,271 +AirPassengers,1956-12-01,306 +AirPassengers,1957-01-01,315 +AirPassengers,1957-02-01,301 +AirPassengers,1957-03-01,356 +AirPassengers,1957-04-01,348 +AirPassengers,1957-05-01,355 +AirPassengers,1957-06-01,422 +AirPassengers,1957-07-01,465 +AirPassengers,1957-08-01,467 +AirPassengers,1957-09-01,404 +AirPassengers,1957-10-01,347 +AirPassengers,1957-11-01,305 +AirPassengers,1957-12-01,336 +AirPassengers,1958-01-01,340 +AirPassengers,1958-02-01,318 +AirPassengers,1958-03-01,362 +AirPassengers,1958-04-01,348 +AirPassengers,1958-05-01,363 +AirPassengers,1958-06-01,435 +AirPassengers,1958-07-01,491 +AirPassengers,1958-08-01,505 +AirPassengers,1958-09-01,404 +AirPassengers,1958-10-01,359 +AirPassengers,1958-11-01,310 +AirPassengers,1958-12-01,337 +AirPassengers,1959-01-01,360 +AirPassengers,1959-02-01,342 +AirPassengers,1959-03-01,406 +AirPassengers,1959-04-01,396 +AirPassengers,1959-05-01,420 +AirPassengers,1959-06-01,472 +AirPassengers,1959-07-01,548 +AirPassengers,1959-08-01,559 +AirPassengers,1959-09-01,463 +AirPassengers,1959-10-01,407 +AirPassengers,1959-11-01,362 +AirPassengers,1959-12-01,405 +AirPassengers,1960-01-01,417 +AirPassengers,1960-02-01,391 +AirPassengers,1960-03-01,419 +AirPassengers,1960-04-01,461 +AirPassengers,1960-05-01,472 +AirPassengers,1960-06-01,535 +AirPassengers,1960-07-01,622 +AirPassengers,1960-08-01,606 +AirPassengers,1960-09-01,508 +AirPassengers,1960-10-01,461 +AirPassengers,1960-11-01,390 +AirPassengers,1960-12-01,432 diff --git a/docs/Makefile b/docs/Makefile index 6c27cca707..c17f086e1e 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -3,7 +3,7 @@ # You can set these variables from the command line, and also # from the environment for the first two. -SPHINXOPTS ?= -vvv +SPHINXOPTS ?= -vvv -W SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build @@ -21,4 +21,4 @@ help: clean: rm -rf $(BUILDDIR)/* - rm -rf ./source/reference/python/doc/* \ No newline at end of file + rm -rf ./source/reference/python/doc/* diff --git a/docs/Readme.md b/docs/README.md similarity index 76% rename from docs/Readme.md rename to docs/README.md index fa252de75d..7bd445ca80 100644 --- a/docs/Readme.md +++ b/docs/README.md @@ -8,9 +8,8 @@ make html open _build/html/index.html ``` -To test links: +To further test external links: ``` -cd evadb/docs -sphinx-build . _build -b linkcheck -``` \ No newline at end of file +make linkcheck +``` diff --git a/docs/_toc.yml b/docs/_toc.yml index ae1a4950f4..927d131973 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -5,34 +5,40 @@ parts: chapters: - file: source/overview/getting-started sections: - - file: source/overview/getting-started/install-guide - title: Installation Guide + - file: source/overview/getting-started/installation-options + title: Installation Options + - file: source/overview/connect-to-database + title: Connect to Database - file: source/overview/concepts - # - file: source/overview/faq + title: Concepts + sections: + - file: source/overview/concepts/data-sources + title: Data Sources + #- file: source/overview/faq - caption: Use Cases chapters: + - file: source/usecases/sentiment-analysis.rst + title: Sentiment Analysis + - file: source/usecases/question-answering.rst + title: Question Answering + - file: source/usecases/text-summarization.rst + title: Text Summarization - file: source/usecases/image-classification.rst title: Image Classification - - file: source/usecases/similar-image-search.rst - title: Image Search [FAISS] - - file: source/usecases/qa-video.rst - title: Q&A from Videos [ChatGPT + HuggingFace] - - file: source/usecases/02-object-detection.ipynb + - file: source/usecases/image-search.rst + title: Image Search + - file: source/usecases/object-detection.rst title: Object Detection - - file: source/usecases/03-emotion-analysis.ipynb + - file: source/usecases/emotion-analysis.rst title: Emotion Analysis - - file: source/usecases/07-object-segmentation-huggingface.ipynb - title: Image Segmentation [HuggingFace] - + - file: source/usecases/privategpt.rst + title: PrivateGPT - caption: User Reference chapters: - - file: source/reference/api - title: Python API - - file: source/reference/evaql - title: Eva Query Language + title: EvaQL sections: - file: source/reference/evaql/load - file: source/reference/evaql/select @@ -43,22 +49,34 @@ parts: - file: source/reference/evaql/insert - file: source/reference/evaql/delete - file: source/reference/evaql/rename + - file: source/reference/evaql/use - - file: source/reference/udfs/index - title: Models + - file: source/reference/api + title: Python API + + - file: source/reference/databases/index + title: Data Sources + sections: + - file: source/reference/databases/postgres + - file: source/reference/databases/sqlite + - file: source/reference/databases/mysql + + - file: source/reference/ai/index + title: AI Engines sections: - - file: source/reference/udfs/hf + - file: source/reference/ai/model-train + title: Model Training + - file: source/reference/ai/model-forecasting + title: Time Series Forecasting + - file: source/reference/ai/hf title: Hugging Face - - file: source/reference/udfs/openai + - file: source/reference/ai/openai title: OpenAI - - file: source/reference/udfs/yolo + - file: source/reference/ai/yolo title: YOLO - - file: source/reference/udfs/custom + - file: source/reference/ai/custom title: Custom Model - - file: source/reference/udfs/model-train - title: Model Train/Finetune - # - file: source/reference/io # title: IO Descriptors @@ -73,17 +91,14 @@ parts: - file: source/benchmarks/text_summarization.rst title: Text Summarization - - caption: Developer Guide + - caption: Developer Reference chapters: - - file: source/dev-guide/architecture - title: Architecture Design of EvaDB - - file: source/dev-guide/contribute title: Contributing to EvaDB sections: - file: source/dev-guide/contribute/setup-dev title: Setup Environment - - file: source/contribute/contribute/testing + - file: source/dev-guide/contribute/testing title: Testing - file: source/dev-guide/contribute/submit-pr title: Submit a PR @@ -98,7 +113,7 @@ parts: - file: source/dev-guide/debugger/vscode-debugger title: VSCode Debugger - file: source/dev-guide/debugger/alternative - title: Alternaitve Debugger + title: Alternative Debugger - file: source/dev-guide/extend title: Extending EvaDB @@ -114,4 +129,7 @@ parts: - file: source/dev-guide/release/pypi-account title: Setup PyPI Account - file: source/dev-guide/release/release-steps - title: How to Release + title: Release Guide + + - file: source/dev-guide/architecture + title: Architecture Diagram diff --git a/docs/conf.py b/docs/conf.py index 601fd64abe..644db7510f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -31,7 +31,7 @@ "sphinx_copybutton", "sphinx.ext.doctest", "sphinx.ext.coverage", - "sphinx.ext.autosectionlabel", +# "sphinx.ext.autosectionlabel", "sphinx.ext.autosummary", "sphinx.ext.autodoc", "sphinx.ext.autodoc.typehints", @@ -48,6 +48,9 @@ "versionwarning.extension", "IPython.sphinxext.ipython_console_highlighting", ] + +suppress_warnings = ["etoc.toctree", "myst.header"] + source_suffix = [".ipynb", ".html", ".md", ".rst"] autodoc_pydantic_model_show_json = False @@ -91,7 +94,8 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "README.md", "images/reference/README.md"] + # The name of the Pygments (syntax highlighting) style to use. # pygments_style = "lovelace" @@ -148,14 +152,10 @@ "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/solid.min.css", "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/brands.min.css"] -# Adding the Tutorial notebooks to ./docs/source/tutorials/ - -for i in os.listdir("../tutorials"): - if i.endswith(".ipynb"): - shutil.copy(f"../tutorials/{i}", "./source/usecases/") - -jupyter_execute_notebooks = "off" - +# Check link: https://stackoverflow.com/questions/14492743/have-sphinx-report-broken-links/14735060#14735060 +nitpicky = True +# BUG: https://stackoverflow.com/questions/11417221/sphinx-autodoc-gives-warning-pyclass-reference-target-not-found-type-warning +nitpick_ignore_regex = [('py:class', r'.*')] # -- Initialize Sphinx ---------------------------------------------- def setup(app): @@ -165,4 +165,4 @@ def setup(app): message=r".*Container node skipped.*", ) # Custom JS - app.add_js_file("js/top-navigation.js", defer="defer") \ No newline at end of file + app.add_js_file("js/top-navigation.js", defer="defer") diff --git a/docs/images/evadb/eva-arch-for-user.png b/docs/images/evadb/eva-arch-for-user.png new file mode 100644 index 0000000000..744a04c9f3 Binary files /dev/null and b/docs/images/evadb/eva-arch-for-user.png differ diff --git a/docs/index.rst b/docs/index.rst index d607a4651b..471829b8f5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,43 +1,37 @@ .. meta:: - :keywords: database, deep learning, video analytics, language models + :keywords: database, AI, language models, SQL, video analytics -Welcome to EvaDB! +Welcome to EvaDB! ================= -.. rubric:: Database system for building simpler and faster AI-powered apps. - -.. - .. figure:: https://raw.githubusercontent.com/georgia-tech-db/evadb/master/docs/images/evadb/evadb-banner.png - :target: https://github.com/georgia-tech-db/evadb - :width: 100% - :alt: EvaDB Banner - -.. |pypi_status| image:: https://img.shields.io/pypi/v/evadb.svg - :target: https://pypi.org/project/evadb -.. |License| image:: https://img.shields.io/badge/license-Apache%202-brightgreen.svg?logo=apache - :target: https://github.com/georgia-tech-db/evadb/blob/master/LICENSE.txt - - -|pypi_status| |License| +.. rubric:: Bring AI inside your Database System ---------- -EvaDB is an open-source unified framework for developing AI-powered apps on top of your data sources. It offers a SQL-like declarative language to simplify the development and deployment of AI-powered apps, which can work with structured data (such as tables and feature stores) and unstructured data (like videos, text, podcasts, PDFs, and more). +EvaDB enables software developers to build AI apps in a few lines of code. Its powerful SQL API simplifies AI app development for both structured and unstructured data. EvaDB's benefits include: -- Github: https://github.com/georgia-tech-db/evadb -- PyPI: https://pypi.org/project/evadb/ -- Twitter: https://twitter.com/evadb_ai -- Slack: https://join.slack.com/t/eva-db/shared_invite/zt-1i10zyddy-PlJ4iawLdurDv~aIAq90Dg +- 🔮 Easy to connect EvaDB with your SQL database system and build AI-powered apps with SQL queries +- 🤝 Query your data with a pre-trained AI model from Hugging Face, OpenAI, YOLO, PyTorch, and other AI frameworks +- ⚡️ Faster queries thanks to AI-centric query optimization +- 💰 Save money spent on running models by efficient CPU/GPU use +- 🔧 Fine-tune your AI models to achieve better results +👋 Hey! If you're excited about our vision of bringing AI inside database systems, show some ❤️ by: + +- 🐙 giving a ⭐ on our EvaDB repo on Github: https://github.com/georgia-tech-db/evadb +- 📟 joining our Slack Community: https://evadb.ai/community +- 🐦 following us on Twitter: https://twitter.com/evadb_ai +- 📝 following us on Medium: https://medium.com/evadb-blog Why EvaDB? ---------- -Over the last decade, AI models have radically changed the world of natural language processing and computer vision. They are accurate on various tasks ranging from question answering to object tracking in videos. However, it is challenging for users to leverage these models due to two challenges: +In the world of AI, we've reached a stage where many AI tasks that were traditionally handled by AI or ML engineers can now be automated. EvaDB enables software developers with the ability to perform advanced AI tasks without needing to delve into the intricate details. + +EvaDB covers many AI applications, including regression, classification, image recognition, question answering, and many other generative AI applications. EvaDB targets 99% of AI problems that are often repetitive and can be automated with a simple function call in an SQL query. Until now, there is no comprehensive open-source framework for bringing AI into an existing SQL database system with a principled AI optimization framework, and that's where EvaDB comes in. -- **Usability**: To use an AI model, the user needs to program against multiple low-level libraries, like PyTorch, Hugging Face, Open AI, etc. This tedious process often leads to a complex AI app that glues together these libraries to accomplish the given task. This programming complexity prevents people who are experts in other domains from benefiting from these models. +Our target audience is software developers who may not necessarily have a background in AI but require AI capabilities to solve specific problems. We target programmers who write simple SQL queries inside their CRUD apps. With EvaDB, it is possible to easily add AI features to these apps by calling built-in AI functions in the queries. -- **Money & Time**: Running these deep learning models on large document or video datasets is costly and time-consuming. For example, the state-of-the-art object detection model takes multiple GPU years to process just a week's videos from a single traffic monitoring camera. Besides the money spent on hardware, these models also increase the time that you spend waiting for the model inference to finish. Getting Started ---------------- @@ -48,7 +42,7 @@ Getting Started