Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -126,31 +126,35 @@ async def handle_sse(request: Request):
|
|
126 |
nonlocal session_id
|
127 |
logger.debug("Starting SSE writer")
|
128 |
async with sse_stream_writer, write_stream_reader:
|
|
|
129 |
endpoint_data = "/airtable/mcp?session_id={session_id}"
|
130 |
await sse_stream_writer.send(
|
131 |
{"event": "endpoint", "data": endpoint_data}
|
132 |
)
|
133 |
logger.debug(f"Sent endpoint event: {endpoint_data}")
|
134 |
async for session_message in write_stream_reader:
|
135 |
-
|
136 |
-
|
137 |
-
|
|
|
|
|
|
|
|
|
|
|
138 |
# Extract session_id from the endpoint event
|
139 |
-
if not session_id and
|
140 |
-
endpoint_url =
|
141 |
if "session_id=" in endpoint_url:
|
142 |
session_id = endpoint_url.split("session_id=")[1]
|
143 |
-
# Update write_streams with the real session_id
|
144 |
placeholder_id = f"placeholder_{id(write_stream)}"
|
145 |
if placeholder_id in write_streams:
|
146 |
write_streams[session_id] = write_streams.pop(placeholder_id)
|
147 |
logger.debug(f"Updated placeholder {placeholder_id} to session_id {session_id}")
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
)
|
154 |
|
155 |
sse_stream_writer, sse_stream_reader = anyio.create_memory_object_stream(0)
|
156 |
try:
|
|
|
126 |
nonlocal session_id
|
127 |
logger.debug("Starting SSE writer")
|
128 |
async with sse_stream_writer, write_stream_reader:
|
129 |
+
# Send the initial endpoint event manually to capture the session_id
|
130 |
endpoint_data = "/airtable/mcp?session_id={session_id}"
|
131 |
await sse_stream_writer.send(
|
132 |
{"event": "endpoint", "data": endpoint_data}
|
133 |
)
|
134 |
logger.debug(f"Sent endpoint event: {endpoint_data}")
|
135 |
async for session_message in write_stream_reader:
|
136 |
+
# Since session_message might be a dict or a SessionMessage, handle both cases
|
137 |
+
if isinstance(session_message, dict):
|
138 |
+
event_data = session_message
|
139 |
+
logger.debug(f"Received SSE event (dict): {event_data}")
|
140 |
+
else:
|
141 |
+
message_data = session_message.message.model_dump_json(by_alias=True, exclude_none=True)
|
142 |
+
event_data = json.loads(message_data)
|
143 |
+
logger.debug(f"Received SSE event (SessionMessage): {event_data}")
|
144 |
# Extract session_id from the endpoint event
|
145 |
+
if not session_id and event_data.get("event") == "endpoint":
|
146 |
+
endpoint_url = event_data.get("data", "")
|
147 |
if "session_id=" in endpoint_url:
|
148 |
session_id = endpoint_url.split("session_id=")[1]
|
|
|
149 |
placeholder_id = f"placeholder_{id(write_stream)}"
|
150 |
if placeholder_id in write_streams:
|
151 |
write_streams[session_id] = write_streams.pop(placeholder_id)
|
152 |
logger.debug(f"Updated placeholder {placeholder_id} to session_id {session_id}")
|
153 |
+
# Send the event as a raw SSE event
|
154 |
+
await sse_stream_writer.send({
|
155 |
+
"event": event_data.get("event", "message"),
|
156 |
+
"data": event_data.get("data", json.dumps(event_data))
|
157 |
+
})
|
|
|
158 |
|
159 |
sse_stream_writer, sse_stream_reader = anyio.create_memory_object_stream(0)
|
160 |
try:
|