diff --git a/.gitignore b/.gitignore index 39bf792..95afdc5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ prod-example/stacks/ wandb/ data/ContractOpportunitiesFull.csv awards_by_contractor_type.numbers -text-to-sql-rag/log_app_wandb.py \ No newline at end of file +text-to-sql-rag/log_app_wandb.py +app/eval_tutorial.py \ No newline at end of file diff --git a/app/__pycache__/deploy_datasette.cpython-311.pyc b/app/__pycache__/deploy_datasette.cpython-311.pyc new file mode 100644 index 0000000..37f5df4 Binary files /dev/null and b/app/__pycache__/deploy_datasette.cpython-311.pyc differ diff --git a/app/__pycache__/eval_tutorial.cpython-311.pyc b/app/__pycache__/eval_tutorial.cpython-311.pyc new file mode 100644 index 0000000..6a64522 Binary files /dev/null and b/app/__pycache__/eval_tutorial.cpython-311.pyc differ diff --git a/app/deploy_datasette.py b/app/deploy_datasette.py new file mode 100644 index 0000000..2ab2458 --- /dev/null +++ b/app/deploy_datasette.py @@ -0,0 +1,70 @@ +import asyncio +import pathlib +import shutil +import subprocess +from datetime import datetime +from urllib.request import urlretrieve + +from modal import Image, Period, Stub, Volume, asgi_app + +stub = Stub("gov-contracts") +datasette_image = ( + Image.debian_slim() + .pip_install("datasette~=0.63.2", "sqlite-utils") + .apt_install("unzip") +) + +# ## Persistent dataset storage +volume = Volume.from_name( + "gov-contracts-2", create_if_missing=True +) + +VOLUME_DIR = "/cache-vol" +REPORTS_DIR = pathlib.Path(VOLUME_DIR, "gov-contracts") +DB_PATH = pathlib.Path(VOLUME_DIR, "gov-contracts.db") + +def chunks(it, size): + import itertools + + return iter(lambda: tuple(itertools.islice(it, size)), ()) + +@stub.function( + image=datasette_image, + volumes={VOLUME_DIR: volume}, + timeout=900, +) +def prep_db(): + import sqlite_utils + + DB_PATH.parent.mkdir(parents=True, exist_ok=True) + db = sqlite_utils.Database(DB_PATH) + + db.close() + + print("Syncing DB with volume.") + volume.commit() + +# ## Web endpoint +@stub.function( + image=datasette_image, + volumes={VOLUME_DIR: volume}, + allow_concurrent_inputs=16, +) +@asgi_app() +def app(): + from datasette.app import Datasette + + print(DB_PATH) + ds = Datasette(files=[DB_PATH], settings={"sql_time_limit_ms": 10000}) + asyncio.run(ds.invoke_startup()) + return ds.app() + +# ## Publishing to the web +@stub.local_entrypoint() +def run(): + print("Prepping SQLite DB...") + prep_db.remote() + + +#### References +##### 1. https://github.com/modal-labs/modal-examples/blob/main/10_integrations/covid_datasette.py \ No newline at end of file diff --git a/tests/__pycache__/test_app.cpython-311-pytest-7.4.4.pyc b/tests/__pycache__/test_app.cpython-311-pytest-7.4.4.pyc index f964d41..69f50e6 100644 Binary files a/tests/__pycache__/test_app.cpython-311-pytest-7.4.4.pyc and b/tests/__pycache__/test_app.cpython-311-pytest-7.4.4.pyc differ