Commit
·
43ffce1
0
Parent(s):
orphan: clean tree ready for push to hugspace
Browse files- Dockerfile +55 -0
- README.md +21 -0
- _env_config/local_dev/utl_dkr_preRun.sh +36 -0
- fastapi/ABOUTME.md +6 -0
- fastapi/entry_fastapi.py +159 -0
- gradio/ABOUTME.md +6 -0
- requirements.txt +111 -0
- streamlit/ABOUTME.md +6 -0
- streamlit/entry_streamlit.py +23 -0
Dockerfile
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#--- PREREQS:
|
| 2 |
+
# - to prep wkg dir: ./_env_config/local_dev/utl_prep_localUnitTest.sh
|
| 3 |
+
# - to backup wkg dir: ./_env_config/local_dev/utl_prep_localUnitTest.sh --backup
|
| 4 |
+
|
| 5 |
+
# - to build dkr image: make sure you stop and remove the container if you are replacing/upgrading;
|
| 6 |
+
# or change the version tag# from 0.0.1
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
#--- DOCKER:
|
| 10 |
+
# docker build -t img_fastapi_templ:0.0.1 .
|
| 11 |
+
# docker create -it -p 7860:7860 --name ctr_fastapi_templ img_fastapi_templ:0.0.1
|
| 12 |
+
# docker start -it ctr_fastapi_templ
|
| 13 |
+
# docker run -it -p 7860:7860 --name ctr_fastapi_templ img_fastapi_templ:0.0.1
|
| 14 |
+
|
| 15 |
+
# docker push kidcoconut73/<img:tag>
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
#--- use a base image of python
|
| 19 |
+
FROM python:3.8-slim-buster
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# Set up a new user named "user" with user ID 1000
|
| 24 |
+
USER root
|
| 25 |
+
RUN useradd -m -u 1000 user
|
| 26 |
+
|
| 27 |
+
USER user
|
| 28 |
+
ENV HOME=/home/user \
|
| 29 |
+
PATH=/home/user/.local/bin:$PATH
|
| 30 |
+
|
| 31 |
+
#--- set docker image working directory to /app
|
| 32 |
+
RUN mkdir $HOME/app $HOME/app/scripts
|
| 33 |
+
WORKDIR $HOME/app
|
| 34 |
+
|
| 35 |
+
#--- install all lib dependencies into the image
|
| 36 |
+
COPY --chown=user ./requirements.txt ./requirements.txt
|
| 37 |
+
RUN pip install --no-cache-dir -r ./requirements.txt
|
| 38 |
+
|
| 39 |
+
#--- copy files from the local pwd to the docker image /app folder
|
| 40 |
+
#--- .dockerignore: ensure no local data folders or files (images) are copied into the docker image/container
|
| 41 |
+
COPY --chown=user ./_env_config/local_dev/utl_dkr_preRun.sh ./scripts/docker/
|
| 42 |
+
COPY --chown=user ./fastapi ./fastapi
|
| 43 |
+
COPY --chown=user ./streamlit ./streamlit
|
| 44 |
+
|
| 45 |
+
#--- for huggingface; assume 1:1 mapping between internal and external ports; and only one port can truly be exposed
|
| 46 |
+
#--- for fastapi; external 7860; internal 7860
|
| 47 |
+
#--- for streamlit; external xxxxx; internal 39131
|
| 48 |
+
EXPOSE 7860
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
#--- establish environment prereqs
|
| 52 |
+
ENTRYPOINT [ "./scripts/docker/utl_dkr_preRun.sh" ]
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
#--- WORKAROUND: you may have to stop the docker container through docker desktop, or cmd line eg docker kill <ctr_name>
|
README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: spcdkr fastapi templ
|
| 3 |
+
emoji: 📉
|
| 4 |
+
colorFrom: purple
|
| 5 |
+
colorTo: pink
|
| 6 |
+
sdk: docker
|
| 7 |
+
app_port: 7860
|
| 8 |
+
pinned: false
|
| 9 |
+
license: mit
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
This app is publically available and run at https://kidcoconut-dkr-fastapi-templ.hf.space/
|
| 13 |
+
example endpoint:  https://kidcoconut-dkr-fastapi-templ.hf.space/sanity
|
| 14 |
+
example endpoint:  https://kidcoconut-dkr-fastapi-templ.hf.space/syscheck/sanity
|
| 15 |
+
|
| 16 |
+
streamlit endpoint:  cannot be mounted to fastapi
|
| 17 |
+
fastapi endpoint:   https://kidcoconut-dkr-fastapi-templ.hf.space/api
|
| 18 |
+
gradio:       https://kidcoconut-dkr-fastapi-templ.hf.space/gradio
|
| 19 |
+
docs:        https://kidcoconut-dkr-fastapi-templ.hf.space/docs
|
| 20 |
+
|
| 21 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
_env_config/local_dev/utl_dkr_preRun.sh
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
#--- Note: this file is designed to run locally as well as within docker to prep the environment
|
| 4 |
+
#--- Entry: this script is assumed to run from the /app root folder
|
| 5 |
+
#--- Usage: ./_env_config/local_dev/utl_dkr_preRun.sh
|
| 6 |
+
|
| 7 |
+
#--- for volume initialization; ensure folders are in place; assume: we are in the /app folder
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
<<blockComment
|
| 11 |
+
-
|
| 12 |
+
blockComment
|
| 13 |
+
echo -e "INFO(utl_dkr_preRun):\t Initializing ..."
|
| 14 |
+
|
| 15 |
+
strpth_pwd=$(pwd)
|
| 16 |
+
strpth_scriptLoc=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
| 17 |
+
strpth_scrHome="${strpth_scriptLoc}/../"
|
| 18 |
+
strpth_appHome="${strpth_scrHome}../"
|
| 19 |
+
strpth_scrModels="${strpth_scrHome}models/"
|
| 20 |
+
|
| 21 |
+
#echo "strpth_appHome = ${strpth_appHome}"
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
#--- for fastapi; external 7860; internal 7860
|
| 25 |
+
echo "INFO: starting fastapi ..."
|
| 26 |
+
uvicorn --app-dir=./fastapi entry_fastapi:app --reload --workers 1 --host 0.0.0.0 --port 7860 & #--- specify a non-root app dir
|
| 27 |
+
|
| 28 |
+
#--- for streamlit; external 49131; internal 39131
|
| 29 |
+
#--- note: streamlit cannot be mounted into fastapi; you need nginx to run in parallel
|
| 30 |
+
echo "INFO: starting streamlit ..."
|
| 31 |
+
streamlit run ./streamlit/entry_streamlit.py --server.port=39131 --server.maxUploadSize=2000 #--- & run in the background
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
<<blockErrorLog
|
| 36 |
+
blockErrorLog
|
fastapi/ABOUTME.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ABOUTME: fastapi
|
| 2 |
+
## Purpose: this environment is used to API endpoints
|
| 3 |
+
## Prereq:
|
| 4 |
+
## -
|
| 5 |
+
|
| 6 |
+
|
fastapi/entry_fastapi.py
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'''
|
| 2 |
+
purpose: fastAPI routing
|
| 3 |
+
|
| 4 |
+
refs:
|
| 5 |
+
fast api behind proxy/root_path: https://fastapi.tiangolo.com/advanced/behind-a-proxy/
|
| 6 |
+
'''
|
| 7 |
+
|
| 8 |
+
from fastapi import FastAPI
|
| 9 |
+
from fastapi.responses import HTMLResponse, RedirectResponse
|
| 10 |
+
from fastapi import APIRouter, Request, Response
|
| 11 |
+
from fastapi.templating import Jinja2Templates
|
| 12 |
+
import uvicorn
|
| 13 |
+
import gradio as gr
|
| 14 |
+
|
| 15 |
+
#--- import custom libraries
|
| 16 |
+
#import lib.utils as libUtils
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
#--- imported route handlers
|
| 20 |
+
#from routes.api.rte_api import rteApi
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
#--- fastAPI self doc descriptors
|
| 24 |
+
description = """
|
| 25 |
+
Prototype: FastApi in Docker on Huggingface
|
| 26 |
+
|
| 27 |
+
<insert purpose>
|
| 28 |
+
|
| 29 |
+
## key business benefit #1
|
| 30 |
+
## key business benefit #2
|
| 31 |
+
## key business benefit #3
|
| 32 |
+
|
| 33 |
+
You will be able to:
|
| 34 |
+
* key feature #1
|
| 35 |
+
* key feature #2
|
| 36 |
+
* key feature #3
|
| 37 |
+
"""
|
| 38 |
+
|
| 39 |
+
#--- main fast api app
|
| 40 |
+
app = FastAPI(
|
| 41 |
+
title="Prototype: Fastapi in docker",
|
| 42 |
+
description=description,
|
| 43 |
+
version="0.0.1",
|
| 44 |
+
terms_of_service="http://example.com/terms/",
|
| 45 |
+
contact={
|
| 46 |
+
"name": "Iain McKone",
|
| 47 |
+
"email": "iain.mckone@gmail.com",
|
| 48 |
+
},
|
| 49 |
+
license_info={
|
| 50 |
+
"name": "MIT",
|
| 51 |
+
"url": "http://opensource.org/licenses/MIT",
|
| 52 |
+
},
|
| 53 |
+
openapi_url="/api/v1/openapi.json"
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
+
io = gr.Interface(lambda x: "Hello, " + x + "!", "textbox", "textbox")
|
| 57 |
+
app = gr.mount_gradio_app(app, io, path="/gradio_svc")
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
#--- configure route handlers
|
| 61 |
+
#app.include_router(rteApi, prefix="/api")
|
| 62 |
+
#app.include_router(rteQa, prefix="/qa")
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
#m_kstrPath_templ = libUtils.pth_templ
|
| 66 |
+
#m_templRef = Jinja2Templates(directory=str(m_kstrPath_templ))
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
""" def get_jinja2Templ(request: Request, pdfResults, strParamTitle, lngNumRecords, blnIsTrain=False, blnIsSample=False):
|
| 70 |
+
lngNumRecords = min(lngNumRecords, libUtils.m_klngMaxRecords)
|
| 71 |
+
if (blnIsTrain): strParamTitle = strParamTitle + " - Training Data"
|
| 72 |
+
if (not blnIsTrain): strParamTitle = strParamTitle + " - Test Data"
|
| 73 |
+
if (blnIsSample): lngNumRecords = libUtils.m_klngSampleSize
|
| 74 |
+
strParamTitle = strParamTitle + " - max " + str(lngNumRecords) + " rows"
|
| 75 |
+
|
| 76 |
+
kstrTempl = 'templ_showDataframe.html'
|
| 77 |
+
jsonContext = {'request': request,
|
| 78 |
+
'paramTitle': strParamTitle,
|
| 79 |
+
'paramDataframe': pdfResults.sample(lngNumRecords).to_html(classes='table table-striped')
|
| 80 |
+
}
|
| 81 |
+
result = m_templRef.TemplateResponse(kstrTempl, jsonContext)
|
| 82 |
+
return result """
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
#--- get main ui/ux entry point
|
| 86 |
+
@app.get('/')
|
| 87 |
+
def index():
|
| 88 |
+
|
| 89 |
+
return {
|
| 90 |
+
"message": "Landing page: prototype for fastApi"
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
@app.get('/api')
|
| 94 |
+
def rte_api():
|
| 95 |
+
|
| 96 |
+
return {
|
| 97 |
+
"message": "Landing page: prototype for fastApi"
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
@app.get('/gradio')
|
| 101 |
+
def rte_gradio():
|
| 102 |
+
|
| 103 |
+
#return {
|
| 104 |
+
# "message": "Landing page: this is where gradio would start from if we could mount with fastapi"
|
| 105 |
+
#}
|
| 106 |
+
return RedirectResponse("/gradio_svc")
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
@app.get('/streamlit')
|
| 110 |
+
def rte_streamlit():
|
| 111 |
+
|
| 112 |
+
return {
|
| 113 |
+
"message": "Landing page: this is where streamlit would start from if we could mount with fastapi"
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
@app.get('/shiny')
|
| 117 |
+
def rte_shiny():
|
| 118 |
+
|
| 119 |
+
return {
|
| 120 |
+
"message": "Landing page: this is where shiny would start mounted with fastapi"
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
@app.get('/syscheck/{check_id}')
|
| 124 |
+
async def syscheck(check_id: str):
|
| 125 |
+
from os import system
|
| 126 |
+
#import commands
|
| 127 |
+
|
| 128 |
+
print("TRACE: fastapi.syscheck ... {check_id} ", check_id)
|
| 129 |
+
|
| 130 |
+
if (check_id=='apt_list'):
|
| 131 |
+
print("TRACE: fastapi.syscheck ... {apt_list} ")
|
| 132 |
+
m_sysMsg = system("apt list --installed")
|
| 133 |
+
return {"message: syscheck apt list complete " + str(m_sysMsg)}
|
| 134 |
+
|
| 135 |
+
elif (check_id=='sanity'):
|
| 136 |
+
print("TRACE: fastapi.syscheck ... {}".format(check_id))
|
| 137 |
+
return {"message: syscheck sanity ... ok "}
|
| 138 |
+
|
| 139 |
+
elif (check_id=='pip_list'):
|
| 140 |
+
print("TRACE: fastapi.syscheck ... {pip_list} ")
|
| 141 |
+
m_sysMsg = system("pip list")
|
| 142 |
+
return {"message: syscheck pip list complete " + str(m_sysMsg)}
|
| 143 |
+
|
| 144 |
+
else:
|
| 145 |
+
return {"message": "fastApi: syscheck {check_id} " + check_id}
|
| 146 |
+
|
| 147 |
+
|
| 148 |
+
@app.get('/sanity')
|
| 149 |
+
async def sanity():
|
| 150 |
+
print("TRACE: fastapi.sanity ... {}")
|
| 151 |
+
return {"message: syscheck sanity ... ok "}
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
if __name__ == '__main__':
|
| 155 |
+
#uvicorn.run("main:app", host="0.0.0.0", port=49132, reload=True)
|
| 156 |
+
#uvicorn --app-dir=./fastapi entry_fastapi:app --reload --workers 1 --host 0.0.0.0 --port 7860 & #--- specify a non-root app dir
|
| 157 |
+
uvicorn.run("fastapi.entry_fastapi:app", reload=True, workers=1, host="0.0.0.0", port=49132)
|
| 158 |
+
#CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--reload"]
|
| 159 |
+
|
gradio/ABOUTME.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ABOUTME: gradio
|
| 2 |
+
## Purpose: this environment is used to host a gradio UI
|
| 3 |
+
## Prereq:
|
| 4 |
+
## -
|
| 5 |
+
|
| 6 |
+
|
requirements.txt
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
fastapi==0.111.0
|
| 3 |
+
gradio==4.37.2
|
| 4 |
+
shiny==0.10.2
|
| 5 |
+
streamlit==1.36.0
|
| 6 |
+
uvicorn==0.30.1
|
| 7 |
+
|
| 8 |
+
#--- 20240716: pip list on docker
|
| 9 |
+
#Package Version
|
| 10 |
+
#------------------------- -----------
|
| 11 |
+
#aiofiles 23.2.1
|
| 12 |
+
#altair 5.3.0
|
| 13 |
+
#annotated-types 0.7.0
|
| 14 |
+
#anyio 4.4.0
|
| 15 |
+
#appdirs 1.4.4
|
| 16 |
+
# asgiref 3.8.1
|
| 17 |
+
# attrs 23.2.0
|
| 18 |
+
# blinker 1.8.2
|
| 19 |
+
# cachetools 5.3.3
|
| 20 |
+
# certifi 2024.7.4
|
| 21 |
+
# charset-normalizer 3.3.2
|
| 22 |
+
# click 8.1.7
|
| 23 |
+
# contourpy 1.1.1
|
| 24 |
+
# cycler 0.12.1
|
| 25 |
+
# dnspython 2.6.1
|
| 26 |
+
# email_validator 2.2.0
|
| 27 |
+
# exceptiongroup 1.2.1
|
| 28 |
+
# fastapi 0.111.0
|
| 29 |
+
# fastapi-cli 0.0.4
|
| 30 |
+
# ffmpy 0.3.2
|
| 31 |
+
# filelock 3.15.4
|
| 32 |
+
# fonttools 4.53.1
|
| 33 |
+
# fsspec 2024.6.1
|
| 34 |
+
# gitdb 4.0.11
|
| 35 |
+
# GitPython 3.1.43
|
| 36 |
+
# gradio 4.37.2
|
| 37 |
+
# gradio_client 1.0.2
|
| 38 |
+
# h11 0.14.0
|
| 39 |
+
# htmltools 0.5.2
|
| 40 |
+
# httpcore 1.0.5
|
| 41 |
+
# httptools 0.6.1
|
| 42 |
+
# httpx 0.27.0
|
| 43 |
+
# huggingface-hub 0.23.4
|
| 44 |
+
# idna 3.7
|
| 45 |
+
# importlib_resources 6.4.0
|
| 46 |
+
# Jinja2 3.1.4
|
| 47 |
+
# jsonschema 4.23.0
|
| 48 |
+
# jsonschema-specifications 2023.12.1
|
| 49 |
+
# kiwisolver 1.4.5
|
| 50 |
+
# linkify-it-py 2.0.3
|
| 51 |
+
# markdown-it-py 3.0.0
|
| 52 |
+
# MarkupSafe 2.1.5
|
| 53 |
+
# matplotlib 3.7.5
|
| 54 |
+
# mdit-py-plugins 0.4.1
|
| 55 |
+
# mdurl 0.1.2
|
| 56 |
+
# numpy 1.24.4
|
| 57 |
+
# orjson 3.10.6
|
| 58 |
+
# packaging 24.1
|
| 59 |
+
# pandas 2.0.3
|
| 60 |
+
# pillow 10.4.0
|
| 61 |
+
# pip 23.0.1
|
| 62 |
+
# pkgutil_resolve_name 1.3.10
|
| 63 |
+
# prompt-toolkit 3.0.36
|
| 64 |
+
# protobuf 5.27.2
|
| 65 |
+
# pyarrow 16.1.0
|
| 66 |
+
# pydantic 2.8.2
|
| 67 |
+
# pydantic_core 2.20.1
|
| 68 |
+
# pydeck 0.9.1
|
| 69 |
+
# pydub 0.25.1
|
| 70 |
+
# Pygments 2.18.0
|
| 71 |
+
# pyparsing 3.1.2
|
| 72 |
+
# python-dateutil 2.9.0.post0
|
| 73 |
+
# python-dotenv 1.0.1
|
| 74 |
+
# python-multipart 0.0.9
|
| 75 |
+
# pytz 2024.1
|
| 76 |
+
# PyYAML 6.0.1
|
| 77 |
+
# questionary 2.0.1
|
| 78 |
+
# referencing 0.35.1
|
| 79 |
+
# requests 2.32.3
|
| 80 |
+
# rich 13.7.1
|
| 81 |
+
# rpds-py 0.19.0
|
| 82 |
+
# ruff 0.5.1
|
| 83 |
+
# semantic-version 2.10.0
|
| 84 |
+
# setuptools 57.5.0
|
| 85 |
+
# shellingham 1.5.4
|
| 86 |
+
# shiny 0.10.2
|
| 87 |
+
# six 1.16.0
|
| 88 |
+
# smmap 5.0.1
|
| 89 |
+
# sniffio 1.3.1
|
| 90 |
+
# starlette 0.37.2
|
| 91 |
+
# streamlit 1.36.0
|
| 92 |
+
# tenacity 8.5.0
|
| 93 |
+
# toml 0.10.2
|
| 94 |
+
# tomlkit 0.12.0
|
| 95 |
+
# toolz 0.12.1
|
| 96 |
+
# tornado 6.4.1
|
| 97 |
+
# tqdm 4.66.4
|
| 98 |
+
# typer 0.12.3
|
| 99 |
+
# typing_extensions 4.12.2
|
| 100 |
+
# tzdata 2024.1
|
| 101 |
+
# uc-micro-py 1.0.3
|
| 102 |
+
# ujson 5.10.0
|
| 103 |
+
# urllib3 2.2.2
|
| 104 |
+
# uvicorn 0.30.1
|
| 105 |
+
# uvloop 0.19.0
|
| 106 |
+
# watchdog 4.0.1
|
| 107 |
+
# watchfiles 0.22.0
|
| 108 |
+
# wcwidth 0.2.13
|
| 109 |
+
# websockets 11.0.3
|
| 110 |
+
# wheel 0.40.0
|
| 111 |
+
# zipp 3.19.2
|
streamlit/ABOUTME.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ABOUTME: streamlit
|
| 2 |
+
## Purpose: this environment is used to host a streamlit UI
|
| 3 |
+
## Prereq:
|
| 4 |
+
## -
|
| 5 |
+
|
| 6 |
+
|
streamlit/entry_streamlit.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'''
|
| 2 |
+
toExecute: (from root app folder) ... streamlit run entry_streamlit.py
|
| 3 |
+
'''
|
| 4 |
+
import streamlit as st
|
| 5 |
+
#import uix.lit_sidebar as litSideBar
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
#--- streamlit: specify title and logo
|
| 9 |
+
st.set_page_config(
|
| 10 |
+
page_title='Protoype - Fastapi with Streamlit Landing Page',
|
| 11 |
+
#page_icon='https://cdn.freebiesupply.com/logos/thumbs/1x/nvidia-logo.png',
|
| 12 |
+
layout="wide")
|
| 13 |
+
st.header('\
|
| 14 |
+
Protoyping Fastapi and Streamlit \
|
| 15 |
+
on Docker \
|
| 16 |
+
within Huggingface space \
|
| 17 |
+
')
|
| 18 |
+
#st.markdown("##### Iain McKone (Deployment Lead) [LinkedIn](%s)" % "https://linkedin.com/in/iainmckone")
|
| 19 |
+
st.markdown('---')
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
#--- streamlit: add a sidebar
|
| 23 |
+
#litSideBar.init()
|