7
7
from fastapi .templating import Jinja2Templates
8
8
from openai import AsyncOpenAI
9
9
from openai .types .beta import Assistant
10
+ from urllib .parse import quote
10
11
11
12
from utils .create_assistant import create_or_update_assistant , ToolTypes
12
13
from utils .create_assistant import update_env_file
@@ -49,16 +50,18 @@ async def set_openai_api_key(api_key: str = Form(...)) -> RedirectResponse:
49
50
async def read_setup (
50
51
request : Request ,
51
52
client : AsyncOpenAI = Depends (lambda : AsyncOpenAI ()),
52
- message : Optional [str ] = ""
53
+ status : Optional [str ] = None ,
54
+ message_text : Optional [str ] = None
53
55
) -> Response :
54
56
# Check if assistant ID is missing
55
57
current_tools = []
58
+ setup_message = "" # Message specific to setup state (e.g., API key missing)
56
59
load_dotenv (override = True )
57
60
openai_api_key = os .getenv ("OPENAI_API_KEY" )
58
61
assistant_id = os .getenv ("ASSISTANT_ID" )
59
62
60
63
if not openai_api_key :
61
- message = "OpenAI API key is missing."
64
+ setup_message = "OpenAI API key is missing."
62
65
else :
63
66
if assistant_id :
64
67
try :
@@ -68,13 +71,15 @@ async def read_setup(
68
71
logger .error (f"Failed to retrieve assistant { assistant_id } : { e } " )
69
72
# If we can't retrieve the assistant, proceed as if it doesn't exist
70
73
assistant_id = None
71
- message = "Error retrieving existing assistant. Please create a new one."
74
+ setup_message = "Error retrieving existing assistant. Please create a new one."
72
75
73
76
return templates .TemplateResponse (
74
77
"setup.html" ,
75
78
{
76
79
"request" : request ,
77
- "message" : message ,
80
+ "setup_message" : setup_message ,
81
+ "status" : status , # Pass status from query params
82
+ "status_message" : message_text , # Pass message from query params
78
83
"assistant_id" : assistant_id ,
79
84
"current_tools" : current_tools
80
85
}
@@ -91,6 +96,7 @@ async def create_update_assistant(
91
96
Returns the assistant ID and status of the operation.
92
97
"""
93
98
current_assistant_id = os .getenv ("ASSISTANT_ID" )
99
+ action = "updated" if current_assistant_id else "created"
94
100
new_assistant_id = await create_or_update_assistant (
95
101
client = client ,
96
102
assistant_id = current_assistant_id ,
@@ -99,6 +105,13 @@ async def create_update_assistant(
99
105
)
100
106
101
107
if not new_assistant_id :
102
- raise HTTPException (status_code = 400 , detail = "Failed to create or update assistant" )
103
-
104
- return RedirectResponse (url = "/" , status_code = 303 )
108
+ status = "error"
109
+ message_text = f"Failed to { action } assistant."
110
+ else :
111
+ status = "success"
112
+ message_text = f"Assistant { action } successfully."
113
+
114
+ # URL encode the message text
115
+ encoded_message = quote (message_text )
116
+ redirect_url = f"/setup/?status={ status } &message_text={ encoded_message } "
117
+ return RedirectResponse (url = redirect_url , status_code = 303 )
0 commit comments