b.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from fastapi import FastAPI
  2. from sse_starlette.sse import EventSourceResponse
  3. app = FastAPI()
  4. import asyncio
  5. async def fake_llm():
  6. yield {
  7. "type": "progress",
  8. "msg": "开始思考"
  9. }
  10. await asyncio.sleep(1)
  11. for ch in "你好AI":
  12. yield {
  13. "type": "token",
  14. "content": ch
  15. }
  16. await asyncio.sleep(0.2)
  17. yield {
  18. "type": "done"
  19. }
  20. import json
  21. @app.get("/stream")
  22. async def stream():
  23. async def event_generator():
  24. async for event in fake_llm():
  25. yield {
  26. "data": json.dumps(
  27. event,
  28. ensure_ascii=False
  29. )
  30. }
  31. return EventSourceResponse(
  32. event_generator()
  33. )
  34. if __name__ == '__main__':
  35. import uvicorn
  36. uvicorn.run(app, host="0.0.0.0", port=8006)
  37. #
  38. # # async def fake_graph():
  39. # #
  40. # # yield {
  41. # # "event":"on_chain_start",
  42. # # "node":"retrieve"
  43. # # }
  44. # #
  45. # # yield {
  46. # # "event":"on_chat_model_stream",
  47. # # "content":"Spring"
  48. # # }
  49. # #
  50. # # yield {
  51. # # "event":"on_chat_model_stream",
  52. # # "content":" IOC"
  53. # # }
  54. # #
  55. # # yield {
  56. # # "event":"on_chain_end",
  57. # # "answer_mode":"rag",
  58. # # "confidence":0.92
  59. # # }
  60. # #
  61. # # async def event_generator():
  62. # #
  63. # # async for event in fake_graph():
  64. # #
  65. # # if event["event"] == "on_chain_start":
  66. # #
  67. # # yield {
  68. # # "data": json.dumps({
  69. # # "type":"progress",
  70. # # "stage":"检索知识库"
  71. # # })
  72. # # }
  73. # #
  74. # # elif event["event"] == "on_chat_model_stream":
  75. # #
  76. # # yield {
  77. # # "data": json.dumps({
  78. # # "type":"token",
  79. # # "content":event["content"]
  80. # # })
  81. # # }
  82. # #
  83. # # elif event["event"] == "on_chain_end":
  84. # #
  85. # # yield {
  86. # # "data": json.dumps({
  87. # # "type":"meta",
  88. # # "answer_mode":event["answer_mode"],
  89. # # "confidence":event["confidence"]
  90. # # })
  91. # # }
  92. # #
  93. # # yield {
  94. # # "data": json.dumps({
  95. # # "type":"done"
  96. # # })
  97. # # }