CPAChatUI / app.py
LogicDataSolutions's picture
Update app.py
b70f749 verified
Raw
History Blame
3.34 kB
import gradio as gr
import requests
import os
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from ping import add_ping_route
# Configuration
LANGFLOW_API_URL = os.environ.get("LANGFLOW_API_URL", "")
LANGFLOW_API_KEY = os.environ.get("LANGFLOW_API_KEY", "")
HF_API_KEY = os.environ.get("HF_API_KEY", "")
if not LANGFLOW_API_URL:
print("FATAL: LANGFLOW_API_URL secret not found or is empty.")
else:
print("SUCCESS: LANGFLOW_API_URL loaded securely.")
if not LANGFLOW_API_KEY:
print("FATAL: LANGFLOW_API_KEY secret not found or is empty.")
else:
print("SUCCESS: LANGFLOW_API_KEY loaded securely.")
if not HF_API_KEY:
print("FATAL: HF_API_KEY secret not found or is empty.")
else:
print("SUCCESS: HF_API_KEY loaded securely.")
# Function that calls the LangFlow chat
def call_langflow(message, history):
"""
Call Langflow API and return the response
"""
headers = {
"Content-Type": "application/json",
}
# Add API keys
if HF_API_KEY:
headers["Authorization"] = f"Bearer {HF_API_KEY}"
if LANGFLOW_API_KEY:
headers["x-api-key"] = f"{LANGFLOW_API_KEY}"
# Adjust this payload based on your Langflow API structure
payload = {
"input_value": message,
"output_type": "chat",
"input_type": "chat",
"tweaks": {}
}
try:
response = requests.post(
LANGFLOW_API_URL,
json=payload,
headers=headers,
timeout=30
)
response.raise_for_status()
# Parse response - adjust based on your API response structure
data = response.json()
# Common Langflow response structures:
# Option 1: data["outputs"][0]["outputs"][0]["results"]["message"]["text"]
# Option 2: data["result"]["message"]
# Adjust the following line based on your actual response:
bot_message = data["outputs"][0]["outputs"][0]["results"]["message"]["text"]
return bot_message
except requests.exceptions.RequestException as e:
return f"Error connecting to Langflow: {str(e)}"
except (KeyError, IndexError) as e:
return f"Error parsing response: {str(e)}\nResponse: {data}"
#Create FastAPI App for health check.
fastapi_app = FastAPI(title="Chatbot with Ping API")
# Optional CORS setup
fastapi_app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Add /ping route from ping.py
add_ping_route(fastapi_app, call_langflow)
# Create Gradio Chat Interface with custom CSS
with gr.Blocks(
css="""
footer {display: none !important;}
.footer {display: none !important;}
#footer {display: none !important;}
.svelte-1p1dq6v {display: none !important;}
"""
) as demo:
gr.ChatInterface(
fn=call_langflow,
title="CPA Chatbot POC",
description="You can use this chatbot to answer questions related to Crown Pointe Academy policies.",
examples=["Summarize the school's uniform policy", "Can a student wear earrings?"],
retry_btn=None,
undo_btn=None,
)
# Mount Gradio app to FastAPI at root path
app = gr.mount_gradio_app(fastapi_app, demo, path="/")