Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

session.py 3.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import json
  2. from .base import Base
  3. class Session(Base):
  4. def __init__(self, rag, res_dict):
  5. self.id = None
  6. self.name = "New session"
  7. self.messages = [{"role": "assistant", "content": "Hi! I am your assistant,can I help you?"}]
  8. self.chat_id = None
  9. super().__init__(rag, res_dict)
  10. def ask(self, question: str, stream: bool = False):
  11. for message in self.messages:
  12. if "reference" in message:
  13. message.pop("reference")
  14. res = self.post(f"/chats/{self.chat_id}/completions",
  15. {"question": question, "stream": True,"session_id":self.id}, stream=stream)
  16. for line in res.iter_lines():
  17. line = line.decode("utf-8")
  18. if line.startswith("{"):
  19. json_data = json.loads(line)
  20. raise Exception(json_data["message"])
  21. if line.startswith("data:"):
  22. json_data = json.loads(line[5:])
  23. if json_data["data"] != True:
  24. answer = json_data["data"]["answer"]
  25. reference = json_data["data"]["reference"]
  26. temp_dict = {
  27. "content": answer,
  28. "role": "assistant"
  29. }
  30. if "chunks" in reference:
  31. chunks = reference["chunks"]
  32. chunk_list = []
  33. for chunk in chunks:
  34. new_chunk = {
  35. "id": chunk["chunk_id"],
  36. "content": chunk["content_with_weight"],
  37. "document_id": chunk["doc_id"],
  38. "document_name": chunk["docnm_kwd"],
  39. "dataset_id": chunk["kb_id"],
  40. "image_id": chunk["img_id"],
  41. "similarity": chunk["similarity"],
  42. "vector_similarity": chunk["vector_similarity"],
  43. "term_similarity": chunk["term_similarity"],
  44. "positions": chunk["positions"],
  45. }
  46. chunk_list.append(new_chunk)
  47. temp_dict["reference"] = chunk_list
  48. message = Message(self.rag, temp_dict)
  49. yield message
  50. def update(self,update_message):
  51. res = self.put(f"/chats/{self.chat_id}/sessions/{self.id}",
  52. update_message)
  53. res = res.json()
  54. if res.get("code") != 0:
  55. raise Exception(res.get("message"))
  56. class Message(Base):
  57. def __init__(self, rag, res_dict):
  58. self.content = "Hi! I am your assistant,can I help you?"
  59. self.reference = None
  60. self.role = "assistant"
  61. self.prompt = None
  62. self.id = None
  63. super().__init__(rag, res_dict)
  64. class Chunk(Base):
  65. def __init__(self, rag, res_dict):
  66. self.id = None
  67. self.content = None
  68. self.document_id = ""
  69. self.document_name = ""
  70. self.dataset_id = ""
  71. self.image_id = ""
  72. self.similarity = None
  73. self.vector_similarity = None
  74. self.term_similarity = None
  75. self.positions = None
  76. super().__init__(rag, res_dict)