aeonshift commited on
Commit
cad7d6a
·
verified ·
1 Parent(s): 6926355

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -12
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
- logger.debug(f"Sending message via SSE: {session_message}")
136
- message_data = session_message.message.model_dump_json(by_alias=True, exclude_none=True)
137
- message = json.loads(message_data)
 
 
 
 
 
138
  # Extract session_id from the endpoint event
139
- if not session_id and message.get("event") == "endpoint":
140
- endpoint_url = message.get("data", "")
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
- await sse_stream_writer.send(
149
- {
150
- "event": "message",
151
- "data": message_data
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: