base.py 838 B

1234567891011121314151617181920212223
  1. import json
  2. from collections.abc import Generator
  3. from pydantic import BaseModel
  4. class BaseBackwardsInvocation:
  5. @classmethod
  6. def convert_to_event_stream(cls, response: Generator[BaseModel | dict | str, None, None] | BaseModel | dict):
  7. if isinstance(response, Generator):
  8. for chunk in response:
  9. if isinstance(chunk, BaseModel):
  10. yield chunk.model_dump_json().encode() + b'\n\n'
  11. if isinstance(chunk, str):
  12. yield f"event: {chunk}\n\n".encode()
  13. else:
  14. yield json.dumps(chunk).encode() + b'\n\n'
  15. else:
  16. if isinstance(response, BaseModel):
  17. yield response.model_dump_json().encode() + b'\n\n'
  18. else:
  19. yield json.dumps(response).encode() + b'\n\n'