licensing / gradio_bot3.py
ShrimpLeopold's picture
Upload folder using huggingface_hub
51d56de verified
Raw
History Blame Contribute Delete
4.75 kB
import os
import gradio as gr
import aiohttp
import asyncio
# Configuration for the licensing service
LICENSING_SERVICE_BASE = os.getenv(
"LICENSING_SERVICE_BASE",
"https://gbdlicensing01containerapp.delightfulocean-00db0bf9.westeurope.azurecontainerapps.io/"
)
async def call_licensing_api(
endpoint: str,
index_name: str,
api_key: str,
input_text: str = None,
question: str = None,
) -> dict:
if endpoint not in ("create_index", "answer_question"):
raise ValueError("endpoint must be 'create_index' or 'answer_question'")
if endpoint == "create_index" and input_text is None:
raise ValueError("Missing input_text for create_index")
if endpoint == "answer_question" and question is None:
raise ValueError("Missing question for answer_question")
headers = {"X-API-Key": api_key, "Content-Type": "application/json"}
payload = {"index_name": index_name}
if endpoint == "create_index":
payload["input_text"] = input_text
else:
payload["question"] = question
timeout = aiohttp.ClientTimeout(total=60)
async with aiohttp.ClientSession(timeout=timeout) as session:
url = f"{LICENSING_SERVICE_BASE}/{endpoint}"
async with session.post(url, json=payload, headers=headers) as resp:
resp.raise_for_status()
return await resp.json()
async def get_answer(api_key: str, final_selection: str, question: str):
"""Fetches answer and summary for the question based on the final topic selection."""
index_map = {
'Licensing Foundamentals': 'licensing-fundamentals'
# add more mappings here
}
index_name = index_map.get(final_selection)
response = await call_licensing_api(
endpoint="answer_question",
index_name=index_name,
api_key=api_key,
question=question
)
return response.get('summary', ''), response.get('answer', '')
async def main():
# Read host & port from env (Docker-friendly)
host = os.getenv("HOST", "0.0.0.0")
port = int(os.getenv("PORT", 7860))
with gr.Blocks() as demo:
api_key_input = gr.Textbox(
label='Licensing Service API Key',
placeholder='Paste your API key here',
type='password'
)
primary_topic = gr.Radio(
choices=['License Program', 'Products', 'Customer info'],
label='What would you like to learn about?'
)
product_container = gr.Column(visible=False)
with product_container:
product_type = gr.Radio(
choices=['Software', 'Online services'],
label='Which products?'
)
service_container = gr.Column(visible=False)
with service_container:
service_type = gr.Radio(
choices=['Licensing Foundamentals'],
label='Select an online service'
)
qa_container = gr.Column(visible=False)
with qa_container:
question = gr.Textbox(
lines=3,
placeholder='Type your question here...',
label='Your Question'
)
summary = gr.Textbox(
lines=2,
interactive=False,
label='Summary'
)
answer = gr.Textbox(
lines=5,
interactive=False,
label='Answer'
)
submit = gr.Button('Submit')
submit.click(
fn=get_answer,
inputs=[api_key_input, service_type, question],
outputs=[summary, answer]
)
# Reveal/hide logic
primary_topic.change(
fn=lambda sel: gr.update(visible=(sel=='Products')),
inputs=primary_topic,
outputs=product_container
)
primary_topic.change(
fn=lambda sel: gr.update(visible=False),
inputs=primary_topic,
outputs=[service_container, qa_container]
)
product_type.change(
fn=lambda sel: gr.update(visible=(sel=='Online services')),
inputs=product_type,
outputs=service_container
)
product_type.change(
fn=lambda sel: gr.update(visible=False),
inputs=product_type,
outputs=qa_container
)
service_type.change(
fn=lambda sel: gr.update(visible=(sel=='Licensing Foundamentals')),
inputs=service_type,
outputs=qa_container
)
demo.launch(
server_name=host,
server_port=port,
share=True
)
if __name__ == '__main__':
asyncio.run(main())