Deploy RFP Template Generator v16.1 metadata hotfix
Browse files- .gitignore +4 -1
- DEPLOYMENT_NOTES.md +12 -30
- README.md +7 -12
- app.py +0 -0
- requirements.txt +14 -5
.gitignore
CHANGED
|
@@ -1,3 +1,6 @@
|
|
| 1 |
__pycache__/
|
| 2 |
*.py[cod]
|
| 3 |
-
.
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
__pycache__/
|
| 2 |
*.py[cod]
|
| 3 |
+
*.db
|
| 4 |
+
*.db-wal
|
| 5 |
+
*.db-shm
|
| 6 |
+
.env
|
DEPLOYMENT_NOTES.md
CHANGED
|
@@ -1,34 +1,16 @@
|
|
| 1 |
-
#
|
| 2 |
|
| 3 |
-
|
| 4 |
|
| 5 |
-
|
| 6 |
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
-
|
| 12 |
-
- It installs only a compatible `huggingface_hub` helper into that interpreter.
|
| 13 |
-
- It does **not** create a local virtual environment and does **not** use PowerShell.
|
| 14 |
-
- `deploy_to_huggingface.py` validates the encrypted Space package, validates the Space-card YAML before modifying the repository, creates or updates a private Gradio Space, stores secrets, uploads the five approved files, and checks build status.
|
| 15 |
-
|
| 16 |
-
## Required secrets
|
| 17 |
-
|
| 18 |
-
- `APP_SOURCE_FERNET_KEY_V1` — refreshed with each application release
|
| 19 |
-
- `OPENAI_API_KEY`
|
| 20 |
-
- `TURSO_DATABASE_URL`
|
| 21 |
-
- `TURSO_AUTH_TOKEN`
|
| 22 |
-
- `RFP_DATA_FERNET_KEY_V1` — preserve across future updates
|
| 23 |
-
|
| 24 |
-
## Runtime variables
|
| 25 |
-
|
| 26 |
-
- `RFP_CAPTURE_ENABLED=1`
|
| 27 |
-
- `RFP_DB_REQUIRE_TURSO=1`
|
| 28 |
-
- `RFP_CAPTURE_DOCUMENTS=1`
|
| 29 |
-
- `RFP_CAPTURE_LLM_IO=1`
|
| 30 |
-
- `RFP_STORE_PLAINTEXT_PREVIEWS=0`
|
| 31 |
-
- `GRADIO_ANALYTICS_ENABLED=False`
|
| 32 |
-
- `GRADIO_SSR_MODE=False`
|
| 33 |
-
- `HF_HUB_DISABLE_TELEMETRY=1`
|
| 34 |
-
- `APP_DEPLOYMENT_MODE=hf-space-encrypted`
|
|
|
|
| 1 |
+
# Deployment notes
|
| 2 |
|
| 3 |
+
Deployment package: v16.1-space-metadata-hotfix (2026-08-19)
|
| 4 |
|
| 5 |
+
Protected runtime: v16-prerequisite-auto-analysis-runtime-verification (2026-08-19)
|
| 6 |
|
| 7 |
+
- Single launch owner: root encrypted `app.py`.
|
| 8 |
+
- Protected source exports `build_demo()` and does not define or call `main()`.
|
| 9 |
+
- Generate RFP Template automatically refreshes missing or stale demographic/operational-fit analysis.
|
| 10 |
+
- Runtime logs print `v16-prerequisite-auto-analysis-runtime-verification` loader, source, and ready markers.
|
| 11 |
+
- Plotly mapping uses `Scattermap` / MapLibre rather than deprecated `Scattermapbox`.
|
| 12 |
+
- Turso documents, queries, model exchanges, analysis state, and generated templates remain encrypted.
|
| 13 |
|
| 14 |
+
- Hugging Face `short_description` is 52 characters, below the 60-character limit.
|
| 15 |
+
- The deployer validates this metadata length before saving secrets or uploading files.
|
| 16 |
+
- Windows Anaconda paths use literal backslashes; no control characters remain in the batch launcher.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README.md
CHANGED
|
@@ -3,14 +3,15 @@ title: RFP Template Generator
|
|
| 3 |
colorFrom: blue
|
| 4 |
colorTo: green
|
| 5 |
sdk: gradio
|
| 6 |
-
sdk_version: 6.
|
| 7 |
-
python_version: "3.
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
fullWidth: true
|
| 11 |
header: mini
|
| 12 |
disable_embedding: true
|
| 13 |
-
|
|
|
|
| 14 |
tags:
|
| 15 |
- consulting
|
| 16 |
- site-selection
|
|
@@ -20,20 +21,14 @@ tags:
|
|
| 20 |
|
| 21 |
# Dearmon Analytics RFP Template Generator
|
| 22 |
|
| 23 |
-
|
| 24 |
|
| 25 |
-
|
| 26 |
|
| 27 |
-
|
| 28 |
|
| 29 |
- `APP_SOURCE_FERNET_KEY_V1`
|
| 30 |
- `OPENAI_API_KEY`
|
| 31 |
- `TURSO_DATABASE_URL`
|
| 32 |
- `TURSO_AUTH_TOKEN`
|
| 33 |
- `RFP_DATA_FERNET_KEY_V1`
|
| 34 |
-
|
| 35 |
-
## Persistence
|
| 36 |
-
|
| 37 |
-
Uploaded documents, extracted text, site-search queries, parsed filters, OpenAI request/response payloads, analysis state, generated RFP frameworks, and generated Word templates are encrypted before they are written to Turso. Plaintext query previews are disabled in the deployed configuration.
|
| 38 |
-
|
| 39 |
-
The repository contains only the authenticated encrypted loader and deployment metadata. The plaintext application source and both Fernet keys are not stored in the Space repository.
|
|
|
|
| 3 |
colorFrom: blue
|
| 4 |
colorTo: green
|
| 5 |
sdk: gradio
|
| 6 |
+
sdk_version: 6.24.0
|
| 7 |
+
python_version: "3.12"
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
fullWidth: true
|
| 11 |
header: mini
|
| 12 |
disable_embedding: true
|
| 13 |
+
startup_duration_timeout: 1h
|
| 14 |
+
short_description: Site selection, operational fit, and RFP generation.
|
| 15 |
tags:
|
| 16 |
- consulting
|
| 17 |
- site-selection
|
|
|
|
| 21 |
|
| 22 |
# Dearmon Analytics RFP Template Generator
|
| 23 |
|
| 24 |
+
Encrypted private Gradio application. Runtime release `v16-prerequisite-auto-analysis-runtime-verification (2026-08-19)`; deployment metadata hotfix `v16.1-space-metadata-hotfix`.
|
| 25 |
|
| 26 |
+
Version 16 automatically runs demographic and operational-fit analysis when the user generates a template and the prerequisite state is missing or stale. The protected source never launches itself; the root encrypted loader owns the only server launch. Plotly maps use the MapLibre `Scattermap` API.
|
| 27 |
|
| 28 |
+
Required Space secrets:
|
| 29 |
|
| 30 |
- `APP_SOURCE_FERNET_KEY_V1`
|
| 31 |
- `OPENAI_API_KEY`
|
| 32 |
- `TURSO_DATABASE_URL`
|
| 33 |
- `TURSO_AUTH_TOKEN`
|
| 34 |
- `RFP_DATA_FERNET_KEY_V1`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.py
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
requirements.txt
CHANGED
|
@@ -1,10 +1,19 @@
|
|
| 1 |
-
gradio==6.
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
PyMuPDF==1.26.7
|
| 4 |
python-docx==1.2.0
|
| 5 |
-
requests==2.
|
| 6 |
plotly==6.5.2
|
| 7 |
shapely==2.1.2
|
| 8 |
pyproj==3.7.2
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio==6.24.0
|
| 2 |
+
gradio-client==2.6.0
|
| 3 |
+
huggingface-hub==1.27.0
|
| 4 |
+
fastapi==0.141.1
|
| 5 |
+
starlette==1.6.0
|
| 6 |
+
jinja2==3.1.6
|
| 7 |
+
uvicorn==0.41.0
|
| 8 |
+
numpy==2.5.2
|
| 9 |
+
pandas==3.0.5
|
| 10 |
PyMuPDF==1.26.7
|
| 11 |
python-docx==1.2.0
|
| 12 |
+
requests==2.34.2
|
| 13 |
plotly==6.5.2
|
| 14 |
shapely==2.1.2
|
| 15 |
pyproj==3.7.2
|
| 16 |
+
pillow==12.1.1
|
| 17 |
+
cryptography==46.0.7
|
| 18 |
+
libsql==0.1.11
|
| 19 |
+
openai==2.54.0
|