Skip to content

Commit 132a7dd

Browse files
Kinda working
1 parent 2e8fad2 commit 132a7dd

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

routers/messages.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
1-
import os
21
import logging
3-
from dotenv import load_dotenv
42
from fastapi.templating import Jinja2Templates
5-
from fastapi import APIRouter, Form, HTTPException, Depends
3+
from fastapi import APIRouter, Form, Depends, Request
64
from fastapi.responses import StreamingResponse
75
from openai import AsyncOpenAI
86
from openai.resources.beta.threads.runs.runs import AsyncAssistantStreamManager
9-
import json
107

118
logger: logging.Logger = logging.getLogger("uvicorn.error")
129
logger.setLevel(logging.DEBUG)
1310

1411
# Initialize the router
1512
router: APIRouter = APIRouter(
16-
prefix="/assistants/{assistant_id}/messages",
13+
prefix="/assistants/{assistant_id}/messages/{thread_id}",
1714
tags=["assistants_messages"]
1815
)
1916

@@ -23,40 +20,48 @@
2320
# Send a new message to a thread
2421
@router.post("/send")
2522
async def post_message(
23+
request: Request,
24+
assistant_id: str,
25+
thread_id: str,
2626
userInput: str = Form(...),
27-
thread_id: str = Form(),
2827
client: AsyncOpenAI = Depends(lambda: AsyncOpenAI())
2928
) -> dict:
3029
# Create a new message in the thread
3130
await client.beta.threads.messages.create(
3231
thread_id=thread_id,
3332
role="user",
3433
content=userInput
34+
3535
)
3636

37-
return templates.TemplateResponse("components/chat-turn.html")
37+
return templates.TemplateResponse(
38+
"components/chat-turn.html",
39+
{
40+
"request": request,
41+
"user_input": userInput,
42+
"assistant_id": assistant_id,
43+
"thread_id": thread_id
44+
}
45+
)
3846

3947
@router.get("/receive")
4048
async def stream_response(
41-
thread_id: str | None = None,
49+
assistant_id: str,
50+
thread_id: str,
4251
client: AsyncOpenAI = Depends(lambda: AsyncOpenAI())
43-
) -> StreamingResponse:
44-
if not thread_id:
45-
raise HTTPException(status_code=400, message="thread_id is required")
46-
52+
) -> StreamingResponse:
4753
# Create a generator to stream the response from the assistant
48-
load_dotenv()
4954
async def event_generator():
5055
stream: AsyncAssistantStreamManager = client.beta.threads.runs.stream(
51-
assistant_id=os.getenv("ASSISTANT_ID"),
56+
assistant_id=assistant_id,
5257
thread_id=thread_id
5358
)
5459
async with stream as stream_manager:
5560
async for text in stream_manager.text_deltas:
56-
yield f"data: {text}"
61+
yield f"data: {text}\n\n"
5762

5863
# Send a done event when the stream is complete
59-
yield f"event: EndMessage"
64+
yield f"event: EndMessage\n\n"
6065

6166
return StreamingResponse(
6267
event_generator(),

templates/components/chat-turn.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<div class="userMessage">{{ userInput }}</div>
1+
<div class="userMessage">{{ user_input }}</div>
22
<div
33
class="assistantMessage"
44
hx-ext="sse"
5-
sse-connect="/assistants/{{ assistant_id }}/messages/receive"
5+
sse-connect="/assistants/{{ assistant_id }}/messages/{{ thread_id }}/receive"
66
sse-swap="message"
77
hx-swap="beforeend"
88
sse-close="EndMessage"

templates/components/chat.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
{% endfor %}
2020
</div>
2121
<form id="chatForm" class="inputForm clearfix">
22-
<input type="hidden" value="{{ thread_id }}">
2322
<input
2423
type="text"
2524
class="input"
@@ -30,7 +29,7 @@
3029
<button
3130
type="submit"
3231
class="button"
33-
hx-post="/assistants/{assistant_id}/messages/send"
32+
hx-post="/assistants/{{ assistant_id }}/messages/{{ thread_id }}/send"
3433
hx-target="#messages"
3534
hx-swap="beforeEnd"
3635
{% if inputDisabled %}disabled{% endif %}

0 commit comments

Comments
 (0)