From e9ef40af70afb1edbfc6f57b80552358ff42c344 Mon Sep 17 00:00:00 2001 From: Rami Date: Tue, 30 Apr 2024 19:41:59 +0200 Subject: [PATCH] feat: Fix for packaging with name DataLine --- .github/workflows/bundling.yml | 8 ++++---- entrypoint-wine.sh | 2 +- text2sql-backend/BUNDLING.md | 6 +++--- text2sql-backend/dataline/config.py | 12 +++++------ text2sql-backend/main.py | 19 +++++++++--------- .../{dataline => }/samples/dvd_rental.sqlite3 | Bin .../{dataline => }/samples/netflix.sqlite3 | Bin .../{dataline => }/samples/titanic.sqlite3 | Bin 8 files changed, 22 insertions(+), 25 deletions(-) rename text2sql-backend/{dataline => }/samples/dvd_rental.sqlite3 (100%) rename text2sql-backend/{dataline => }/samples/netflix.sqlite3 (100%) rename text2sql-backend/{dataline => }/samples/titanic.sqlite3 (100%) diff --git a/.github/workflows/bundling.yml b/.github/workflows/bundling.yml index bf8887c3..06d71c72 100644 --- a/.github/workflows/bundling.yml +++ b/.github/workflows/bundling.yml @@ -79,7 +79,7 @@ jobs: - name: Run pyinstaller run: | pyinstaller --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data alembic:alembic --add-data alembic.ini:. --add-data dataline/samples:dataline/samples --add-data templates:templates --add-data assets:assets \ + --add-data alembic:alembic --add-data alembic.ini:. --add-data samples:samples --add-data templates:templates --add-data assets:assets \ --collect-data llama_index --distpath ../linux_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y - uses: actions/upload-artifact@v4 with: @@ -118,7 +118,7 @@ jobs: - name: Run pyinstaller run: | pyinstaller --windowed -i ../images/logo.ico --name DataLine --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite ` - --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "dataline/samples;dataline/samples" --add-data "templates;templates" --add-data "assets;assets" ` + --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "samples;samples" --add-data "templates;templates" --add-data "assets;assets" ` --collect-data llama_index --distpath ../win64_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y - uses: actions/upload-artifact@v4 with: @@ -156,8 +156,8 @@ jobs: pip install -r requirements.txt pyinstaller==5.13.2 - name: Run pyinstaller run: | - pyinstaller --windowed -i ../images/logo.icns --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data alembic:alembic --add-data alembic.ini:. --add-data dataline/samples:dataline/samples --add-data templates:templates --add-data assets:assets \ + pyinstaller --name DataLine --windowed -i ../images/logo.icns --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ + --add-data alembic:alembic --add-data alembic.ini:. --add-data samples:samples --add-data templates:templates --add-data assets:assets \ --collect-data llama_index --distpath ../macos_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y - uses: actions/upload-artifact@v4 with: diff --git a/entrypoint-wine.sh b/entrypoint-wine.sh index 62e87e54..e59c0920 100644 --- a/entrypoint-wine.sh +++ b/entrypoint-wine.sh @@ -41,7 +41,7 @@ if [[ "$@" == "" ]]; then fi # [ -f requirements.txt ] pyinstaller --windowed -i logo.ico --name DataLine --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "dataline/samples;dataline/samples" --add-data "templates;templates" --add-data "assets;assets" \ + --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "samples;samples" --add-data "templates;templates" --add-data "assets;assets" \ --collect-data llama_index --distpath /win64_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y chown -R --reference=. /win64_dist # pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec diff --git a/text2sql-backend/BUNDLING.md b/text2sql-backend/BUNDLING.md index 974c6a54..5c398d3c 100644 --- a/text2sql-backend/BUNDLING.md +++ b/text2sql-backend/BUNDLING.md @@ -17,7 +17,7 @@ cp dist/manifest.json ../text2sql-backend/assets/manifest.json ```bash cd text2sql-backend pyinstaller --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data alembic:alembic --add-data alembic.ini:. --add-data dataline/samples:dataline/samples --add-data templates:templates --add-data assets:assets \ + --add-data alembic:alembic --add-data alembic.ini:. --add-data samples:samples --add-data templates:templates --add-data assets:assets \ --collect-data llama_index --distpath ../linux_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y ``` @@ -28,7 +28,7 @@ You can find the executable under `linux_dist/main/main`. Once run, go to localh ```bash cd text2sql-backend pyinstaller --windowed -i ../images/logo.icns --name DataLine --clean --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data alembic:alembic --add-data alembic.ini:. --add-data dataline/samples:dataline/samples --add-data templates:templates --add-data assets:assets \ + --add-data alembic:alembic --add-data alembic.ini:. --add-data samples:samples --add-data templates:templates --add-data assets:assets \ --collect-data llama_index --distpath ../macos_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y ``` @@ -55,7 +55,7 @@ docker exec -it wine /bin/bash --> wine C:/Python311/python.exe -m pip install -r requirements.txt pyinstaller --windowed -i logo.ico --name DataLine --hidden-import=asyncpg.pgproto.pgproto --hidden-import=uuid --hidden-import=ipaddress --hidden-import=aiosqlite \ - --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "dataline/samples;dataline/samples" --add-data "templates;templates" --add-data "assets;assets" \ + --add-data "alembic;alembic" --add-data "alembic.ini;." --add-data "samples;samples" --add-data "templates;templates" --add-data "assets;assets" \ --collect-data llama_index --distpath ../win64_dist --hidden-import=tiktoken_ext.openai_public --hidden-import=tiktoken_ext --collect-data=jinja2 main.py -y ``` diff --git a/text2sql-backend/dataline/config.py b/text2sql-backend/dataline/config.py index 6f4bdb3d..36300f7d 100644 --- a/text2sql-backend/dataline/config.py +++ b/text2sql-backend/dataline/config.py @@ -1,10 +1,8 @@ import sys - from pathlib import Path from pydantic_settings import BaseSettings - # https://pyinstaller.org/en/v6.6.0/runtime-information.html IS_BUNDLED = bool(getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS")) @@ -13,15 +11,15 @@ class Config(BaseSettings): # SQLite database will be mounted in the configuration directory # This is where all DataLine data is stored # Current dir / db.sqlite3 - sqlite_path: str = str(Path(__file__).parent / "db.sqlite3") + sqlite_path: str = str(Path(__file__).parent.parent / "db.sqlite3") sqlite_echo: bool = False # This is where all uploaded files are stored (ex. uploaded sqlite DBs) - data_directory: str = str(Path(__file__).parent / "data") + data_directory: str = str(Path(__file__).parent.parent / "data") - sample_dvdrental_path: str = str(Path(__file__).parent / "samples" / "dvd_rental.sqlite3") - sample_netflix_path: str = str(Path(__file__).parent / "samples" / "netflix.sqlite3") - sample_titanic_path: str = str(Path(__file__).parent / "samples" / "titanic.sqlite3") + sample_dvdrental_path: str = str(Path(__file__).parent.parent / "samples" / "dvd_rental.sqlite3") + sample_netflix_path: str = str(Path(__file__).parent.parent / "samples" / "netflix.sqlite3") + sample_titanic_path: str = str(Path(__file__).parent.parent / "samples" / "titanic.sqlite3") default_model: str = "gpt-4" templates_path: Path = Path(__file__).parent.parent / "templates" diff --git a/text2sql-backend/main.py b/text2sql-backend/main.py index 22774a5e..42d32eb9 100644 --- a/text2sql-backend/main.py +++ b/text2sql-backend/main.py @@ -1,5 +1,6 @@ import json import logging +import socket import sys import webbrowser from contextlib import asynccontextmanager @@ -7,23 +8,17 @@ from typing import Annotated, AsyncGenerator from uuid import UUID -import socket -import uvicorn -from fastapi import Body, Depends, FastAPI, HTTPException, Request, Response -from fastapi.staticfiles import StaticFiles -from fastapi.templating import Jinja2Templates -from pydantic import BaseModel -from pydantic.json import pydantic_encoder -from pygments import lexers -from pygments_pprint_sql import SqlFilter - import db +import uvicorn from alembic import command from alembic.config import Config from app import App from dataline.config import IS_BUNDLED, config from dataline.repositories.base import AsyncSession, NotFoundError, get_session from dataline.services.settings import SettingsService +from fastapi import Body, Depends, FastAPI, HTTPException, Request, Response +from fastapi.staticfiles import StaticFiles +from fastapi.templating import Jinja2Templates from models import ( Conversation, ConversationWithMessagesWithResults, @@ -34,6 +29,10 @@ UnsavedResult, UpdateConversationRequest, ) +from pydantic import BaseModel +from pydantic.json import pydantic_encoder +from pygments import lexers +from pygments_pprint_sql import SqlFilter from services import QueryService, results_from_query_response from sql_wrapper import request_execute, request_limit diff --git a/text2sql-backend/dataline/samples/dvd_rental.sqlite3 b/text2sql-backend/samples/dvd_rental.sqlite3 similarity index 100% rename from text2sql-backend/dataline/samples/dvd_rental.sqlite3 rename to text2sql-backend/samples/dvd_rental.sqlite3 diff --git a/text2sql-backend/dataline/samples/netflix.sqlite3 b/text2sql-backend/samples/netflix.sqlite3 similarity index 100% rename from text2sql-backend/dataline/samples/netflix.sqlite3 rename to text2sql-backend/samples/netflix.sqlite3 diff --git a/text2sql-backend/dataline/samples/titanic.sqlite3 b/text2sql-backend/samples/titanic.sqlite3 similarity index 100% rename from text2sql-backend/dataline/samples/titanic.sqlite3 rename to text2sql-backend/samples/titanic.sqlite3