dockercompose management
This commit is contained in:
parent
fdbc314ef4
commit
cde7259ed7
|
|
@ -28,13 +28,13 @@ python wcag_validator_RESTserver.py
|
||||||
## For UI use:
|
## For UI use:
|
||||||
python wcag_validator_ui.py
|
python wcag_validator_ui.py
|
||||||
|
|
||||||
## Docker
|
## Docker (file docker placed at path /LLM_accessibility_validator)
|
||||||
### Rest server
|
### Rest server
|
||||||
docker build -t wcag_resr_server .
|
docker build -t wcag_resr_server .
|
||||||
docker run --env-file .env -p 8000:8000 --name wcag_rest_server -d wcag_rest_server
|
docker run --env-file .env -p 8000:8000 --name wcag_rest_server -d wcag_rest_server
|
||||||
### UI
|
### UI
|
||||||
docker build -t wcag_ui .
|
docker build -t wcag_ui .
|
||||||
docker run --env-file UI/.env -p 8001:8001 --name wcag_ui -d wcag_ui
|
docker run --env-file UI/.env -p 7860:7860 --name wcag_ui -d wcag_ui
|
||||||
|
|
||||||
|
|
||||||
## The scripts folder contains some elaboration scripts. They require a dedicated requirements file
|
## The scripts folder contains some elaboration scripts. They require a dedicated requirements file
|
||||||
Binary file not shown.
|
|
@ -31,7 +31,6 @@ import sqlite3
|
||||||
WCAG_VALIDATOR_RESTSERVER_HEADERS = [("Content-Type", "application/json")]
|
WCAG_VALIDATOR_RESTSERVER_HEADERS = [("Content-Type", "application/json")]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def load_images_from_json(json_input):
|
def load_images_from_json(json_input):
|
||||||
"""Extract URLs and alt text from JSON and create HTML gallery"""
|
"""Extract URLs and alt text from JSON and create HTML gallery"""
|
||||||
try:
|
try:
|
||||||
|
|
@ -225,7 +224,6 @@ def load_llm_assessment_from_json(json_input):
|
||||||
|
|
||||||
data_frame.append(
|
data_frame.append(
|
||||||
{
|
{
|
||||||
|
|
||||||
"Original Alt Text": alt_text_original,
|
"Original Alt Text": alt_text_original,
|
||||||
"LLM Assessment": original_alt_text_assessment,
|
"LLM Assessment": original_alt_text_assessment,
|
||||||
"Proposed Alt Text": new_alt_text,
|
"Proposed Alt Text": new_alt_text,
|
||||||
|
|
@ -245,13 +243,13 @@ def make_alttext_llm_assessment_api_call(
|
||||||
url,
|
url,
|
||||||
selected_images_json=[],
|
selected_images_json=[],
|
||||||
db_path=None,
|
db_path=None,
|
||||||
wcga_rest_server_url="http://localhost:8000",
|
wcag_rest_server_url="http://localhost:8000",
|
||||||
user_state={},
|
user_state={},
|
||||||
number_of_images=30,
|
number_of_images=30,
|
||||||
):
|
):
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"Making API call for llm assessment for {url} to {wcga_rest_server_url}/wcag_alttext_validation"
|
f"Making API call for llm assessment for {url} to {wcag_rest_server_url}/wcag_alttext_validation"
|
||||||
)
|
)
|
||||||
selected_images = json.loads(selected_images_json) if selected_images_json else []
|
selected_images = json.loads(selected_images_json) if selected_images_json else []
|
||||||
# print("selected_images:", selected_images)
|
# print("selected_images:", selected_images)
|
||||||
|
|
@ -299,13 +297,13 @@ def make_alttext_llm_assessment_api_call(
|
||||||
"save_elaboration": "True",
|
"save_elaboration": "True",
|
||||||
"specific_images_urls": selected_urls,
|
"specific_images_urls": selected_urls,
|
||||||
},
|
},
|
||||||
url=wcga_rest_server_url + "/wcag_alttext_validation",
|
url=wcag_rest_server_url + "/wcag_alttext_validation",
|
||||||
headers=WCAG_VALIDATOR_RESTSERVER_HEADERS,
|
headers=WCAG_VALIDATOR_RESTSERVER_HEADERS,
|
||||||
)
|
)
|
||||||
# return response
|
# return response
|
||||||
info_dataframe = load_llm_assessment_from_json(response)
|
info_dataframe = load_llm_assessment_from_json(response)
|
||||||
info_dataframe.insert(
|
info_dataframe.insert(
|
||||||
0, 'Image #', selected_image_id
|
0, "Image #", selected_image_id
|
||||||
) # add the UI ids from to api response
|
) # add the UI ids from to api response
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
@ -334,10 +332,10 @@ def make_alttext_llm_assessment_api_call(
|
||||||
def make_image_extraction_api_call(
|
def make_image_extraction_api_call(
|
||||||
url,
|
url,
|
||||||
number_of_images=30,
|
number_of_images=30,
|
||||||
wcga_rest_server_url="http://localhost:8000",
|
wcag_rest_server_url="http://localhost:8000",
|
||||||
):
|
):
|
||||||
print(
|
print(
|
||||||
f"Making API call for image_extraction for {url} to {wcga_rest_server_url}/extract_images"
|
f"Making API call for image_extraction for {url} to {wcag_rest_server_url}/extract_images"
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
|
@ -346,7 +344,7 @@ def make_image_extraction_api_call(
|
||||||
"page_url": url,
|
"page_url": url,
|
||||||
"number_of_images": number_of_images,
|
"number_of_images": number_of_images,
|
||||||
},
|
},
|
||||||
url=wcga_rest_server_url + "/extract_images",
|
url=wcag_rest_server_url + "/extract_images",
|
||||||
headers=WCAG_VALIDATOR_RESTSERVER_HEADERS,
|
headers=WCAG_VALIDATOR_RESTSERVER_HEADERS,
|
||||||
)
|
)
|
||||||
# return response
|
# return response
|
||||||
|
|
@ -369,18 +367,18 @@ with gr.Blocks(theme=gr.themes.Glass(), title="WCAG AI Validator") as demo:
|
||||||
_ = load_dotenv(env_path) # read .env file
|
_ = load_dotenv(env_path) # read .env file
|
||||||
db_path = return_from_env_valid("DB_PATH", "persistence/wcag_validator_ui.db")
|
db_path = return_from_env_valid("DB_PATH", "persistence/wcag_validator_ui.db")
|
||||||
print("db_path:", db_path)
|
print("db_path:", db_path)
|
||||||
wcga_rest_server_url = return_from_env_valid(
|
wcag_rest_server_url = return_from_env_valid(
|
||||||
"WCGA_REST_SERVER_URL", "http://localhost:8000"
|
"WCAG_REST_SERVER_URL", "http://localhost:8000"
|
||||||
)
|
)
|
||||||
|
|
||||||
default_urls = [
|
default_urls = [
|
||||||
"https://amazon.com",
|
"https://amazon.com",
|
||||||
"https://ebay.com",
|
"https://ebay.com",
|
||||||
]
|
]
|
||||||
url_list_str=return_from_env_valid("URL_LIST",json.dumps(default_urls))
|
url_list_str = return_from_env_valid("URL_LIST", json.dumps(default_urls))
|
||||||
url_list = json.loads(url_list_str)
|
url_list = json.loads(url_list_str)
|
||||||
|
|
||||||
print("wcga_rest_server_url:", wcga_rest_server_url)
|
print("wcag_rest_server_url:", wcag_rest_server_url)
|
||||||
|
|
||||||
connection_db = db_persistence_startup(
|
connection_db = db_persistence_startup(
|
||||||
db_name_and_path=db_path, table="wcag_user_assessments"
|
db_name_and_path=db_path, table="wcag_user_assessments"
|
||||||
|
|
@ -434,8 +432,8 @@ with gr.Blocks(theme=gr.themes.Glass(), title="WCAG AI Validator") as demo:
|
||||||
|
|
||||||
with gr.Tab("Alt Text Assessment", visible=False) as alttext_assessment:
|
with gr.Tab("Alt Text Assessment", visible=False) as alttext_assessment:
|
||||||
|
|
||||||
db_path_state = gr.State(value=db_path) # Store path in State
|
db_path_state = gr.State(value=db_path) # Store path in State\
|
||||||
wcga_rest_server_url_state = gr.State(value=wcga_rest_server_url)
|
wcag_rest_server_url_state = gr.State(value=wcag_rest_server_url)
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
with gr.Column():
|
with gr.Column():
|
||||||
|
|
||||||
|
|
@ -498,7 +496,7 @@ with gr.Blocks(theme=gr.themes.Glass(), title="WCAG AI Validator") as demo:
|
||||||
],
|
],
|
||||||
).then(
|
).then(
|
||||||
make_image_extraction_api_call,
|
make_image_extraction_api_call,
|
||||||
inputs=[url_input, images_number, wcga_rest_server_url_state],
|
inputs=[url_input, images_number, wcag_rest_server_url_state],
|
||||||
outputs=[image_info_output, gallery_html],
|
outputs=[image_info_output, gallery_html],
|
||||||
).then(
|
).then(
|
||||||
fn=lambda: gr.Button(interactive=True),
|
fn=lambda: gr.Button(interactive=True),
|
||||||
|
|
@ -514,7 +512,7 @@ with gr.Blocks(theme=gr.themes.Glass(), title="WCAG AI Validator") as demo:
|
||||||
url_input,
|
url_input,
|
||||||
gallery_html,
|
gallery_html,
|
||||||
db_path_state,
|
db_path_state,
|
||||||
wcga_rest_server_url_state,
|
wcag_rest_server_url_state,
|
||||||
user_state,
|
user_state,
|
||||||
],
|
],
|
||||||
outputs=[alttext_info_output],
|
outputs=[alttext_info_output],
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Create (and eventually run) the two containers
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
### Rest server
|
||||||
|
- docker build -t wcag_resr_server .
|
||||||
|
- docker run --env-file .env -p 8000:8000 --name wcag_rest_server -d wcag_rest_server
|
||||||
|
### UI
|
||||||
|
- docker build -t wcag_ui .
|
||||||
|
- docker run --env-file UI/.env -p 7860:7860 --name wcag_ui -d wcag_ui
|
||||||
|
|
||||||
|
|
||||||
|
# For network management and env management
|
||||||
|
## method 1: Run the docker-compose (skip the runs above)
|
||||||
|
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
## method 2: or creating a Docker network
|
||||||
|
|
||||||
|
### Create a custom network
|
||||||
|
docker network create wcag-network
|
||||||
|
|
||||||
|
### Run the backend container
|
||||||
|
docker run -d \
|
||||||
|
--name wcag_rest_server \
|
||||||
|
--network wcag-network \
|
||||||
|
--env-file .env \
|
||||||
|
wcag_rest_server
|
||||||
|
|
||||||
|
# Run the UI container
|
||||||
|
docker run -d \
|
||||||
|
--name wcag_ui \
|
||||||
|
--network wcag-network \
|
||||||
|
-p 7860:7860 \
|
||||||
|
--env-file UI/.env \
|
||||||
|
wcag_ui
|
||||||
|
|
||||||
|
# Important Notes:
|
||||||
|
|
||||||
|
- Backend URL in UI: Make sure your UI is configured to connect to the backend using the container name (e.g., wcag_rest_server) not localhost when running in Docker
|
||||||
|
- Port exposure: Only the UI needs -p flag to expose ports to your host machine
|
||||||
|
|
@ -15,7 +15,7 @@ COPY /UI/wcag_validator_ui.py /UI/wcag_validator_ui.py
|
||||||
EXPOSE 7860
|
EXPOSE 7860
|
||||||
|
|
||||||
WORKDIR /UI
|
WORKDIR /UI
|
||||||
CMD ["python","wcag_validator_ui.py"]
|
CMD ["python", "-u", "wcag_validator_ui.py"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
image: wcag_rest_server
|
||||||
|
container_name: wcag_rest_server
|
||||||
|
ports:
|
||||||
|
- "8000:8000" # Adjust to your backend port
|
||||||
|
environment:
|
||||||
|
- MLLM_END_POINT_OPENAI=https://hiis-accessibility-fonderia.cognitiveservices.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2025-01-01-preview
|
||||||
|
- MLLM_API_KEY_OPENAI=4lwGUwrx7jsqdxESGBpN9wYYyLNsxzC2s8ZLQlZPCQUayDWuDo3NJQQJ99BKACfhMk5XJ3w3AAAAACOGs2uw
|
||||||
|
- MLLM_MODEL_ID_OPENAI=gpt-4o
|
||||||
|
- USE_OPENAI_MODEL=True
|
||||||
|
networks:
|
||||||
|
- wcag-network
|
||||||
|
|
||||||
|
ui:
|
||||||
|
image: wcag_ui
|
||||||
|
container_name: wcag_ui
|
||||||
|
ports:
|
||||||
|
- "7860:7860" # Adjust to your UI port
|
||||||
|
environment:
|
||||||
|
- WCAG_REST_SERVER_URL=http://backend:8000 # UI can reference backend by service name
|
||||||
|
- URL_LIST=["https://amazon.com","https://ebay.com","https://walmart.com","https://etsy.com","https://target.com","https://wayfair.com","https://bestbuy.com","https://macys.com","https://homedepot.com","https://costco.com","https://www.ansa.it","https://en.wikipedia.org/wiki/Main_Page","https://www.lanazione.it","https://www.ansa.it","https://www.bbc.com","https://www.cnn.com","https://www.nytimes.com","https://www.theguardian.com"]
|
||||||
|
- DB_PATH=persistence/wcag_validator_ui.db
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
networks:
|
||||||
|
- wcag-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
wcag-network:
|
||||||
|
driver: bridge
|
||||||
Loading…
Reference in New Issue