testopenassistants.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. # # import os
  2. # # import re
  3. # # from subprocess import check_output
  4. # # def update_requirements():
  5. # # """更新requirements.txt文件,确保所有包都是最新版本"""
  6. # # with open('requirements.txt', 'r') as file:
  7. # # packages = file.readlines()
  8. # # # 获取最新版本的包
  9. # # latest_packages = check_output(
  10. # # ['pip', 'install', '--upgrade', '--quiet', '--no-deps', '-I'] +
  11. # # [package.strip() for package in packages if package.strip()],
  12. # # text=True
  13. # # ).splitlines()
  14. # # # 解析最新版本信息
  15. # # latest_packages_dict = dict(re.findall(
  16. # # r'^(\S*)\s+\((\S*)\)\s+-.*$',
  17. # # line,
  18. # # re.MULTILINE
  19. # # ) for line in latest_packages if line.startswith(('Installing', 'Upgrading')))
  20. # # # 更新requirements.txt文件
  21. # # with open('requirements.txt', 'w') as file:
  22. # # for package in packages:
  23. # # match = re.match(r'^(\S*)\s+.*$', package.strip())
  24. # # if match and match.group(1) in latest_packages_dict:
  25. # # file.write(f'{match.group(1)}=={latest_packages_dict[match.group(1)]}\n')
  26. # # else:
  27. # # file.write(package.strip() + os.linesep)
  28. # # if __name__ == '__main__':
  29. # # update_requirements()
  30. # import api_key, os, openai
  31. # openai.api_key = api_key.openai_key
  32. # # openai.api_key = "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"
  33. # # openai.api_key = "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"
  34. # # #你申请的openai的api key
  35. # a = os.environ["OPENAI_API_KEY"] = api_key.openai_key
  36. # list_new_pdf = []
  37. # list = openai.files.list(
  38. # purpose="assistants",
  39. # extra_query={"order":"asc"}
  40. # )
  41. # bytes = 0
  42. # for item in list.data:
  43. # list_new_pdf.append(item)
  44. # bytes = bytes + item.bytes
  45. # total1 = bytes/1024/1024/1024
  46. # print("assistants:")
  47. # print(len(list.data))
  48. # print(str(total1) + "G")
  49. # print('')
  50. # list = openai.files.list(
  51. # purpose="assistants",
  52. # extra_query={"order":"asc","after":(list.data)[-1].id}
  53. # )
  54. # bytes = 0
  55. # for item in list.data:
  56. # list_new_pdf.append(item)
  57. # bytes = bytes + item.bytes
  58. # total2 = bytes/1024/1024/1024
  59. # print("assistants:")
  60. # print(len(list.data))
  61. # print(str(total2) + "G")
  62. # print('')
  63. # list = openai.files.list(
  64. # purpose="assistants",
  65. # extra_query={"order":"asc","after":(list.data)[-1].id}
  66. # )
  67. # bytes = 0
  68. # for item in list.data:
  69. # list_new_pdf.append(item)
  70. # bytes = bytes + item.bytes
  71. # total3 = bytes/1024/1024/1024
  72. # print("assistants:")
  73. # print(len(list.data))
  74. # print(str(total3) + "G")
  75. # print('')
  76. # list = openai.files.list(
  77. # purpose="assistants",
  78. # extra_query={"order":"asc","after":(list.data)[-1].id}
  79. # )
  80. # bytes = 0
  81. # for item in list.data:
  82. # list_new_pdf.append(item)
  83. # bytes = bytes + item.bytes
  84. # total4 = bytes/1024/1024/1024
  85. # print("assistants:")
  86. # print(len(list.data))
  87. # print(str(total4) + "G")
  88. # print('')
  89. # list = openai.files.list(
  90. # purpose="assistants",
  91. # extra_query={"order":"asc","after":(list.data)[-1].id}
  92. # )
  93. # bytes = 0
  94. # for item in list.data:
  95. # list_new_pdf.append(item)
  96. # bytes = bytes + item.bytes
  97. # total5 = bytes/1024/1024/1024
  98. # print("assistants:")
  99. # print(len(list.data))
  100. # print(str(total5) + "G")
  101. # print('')
  102. # # print(str(bytes/1024/1024/1024) + "G")
  103. # print(len(list_new_pdf))
  104. # print(total1 + total2 + total3 + total4 + total5)
  105. # # for item in list_new_pdf:
  106. # # print(item)
  107. # list_new_pdf_new = []
  108. # bytes = 0
  109. # for item in list_new_pdf:
  110. # if ".ppt" in item.filename or ".pptx" in item.filename:
  111. # bytes = bytes + item.bytes
  112. # list_new_pdf_new.append(item)
  113. # print(str(bytes/1024/1024/1024) + "G")
  114. # print(len(list_new_pdf_new))
  115. # # print(list_new_pdf_new[3])
  116. # pdf = []
  117. # for item in list_new_pdf_new:
  118. # if item.bytes >= 52428800:
  119. # pdf.append(item)
  120. # bytes = 0
  121. # for item in pdf:
  122. # print(item)
  123. # bytes = bytes + item.bytes
  124. # print(str(bytes/1024/1024/1024) + "G")
  125. # print(len(pdf))
  126. # for item in pdf:
  127. # # if item.id in list_new_pdf:
  128. # openai.files.delete(item.id)
  129. # list_new_pdf_new = []
  130. # bytes = 0
  131. # for item in list_new_pdf:
  132. # if ".doc" in item.filename or ".docx" in item.filename:
  133. # bytes = bytes + item.bytes
  134. # list_new_pdf_new.append(item)
  135. # print(str(bytes/1024/1024/1024) + "G")
  136. # print(len(list_new_pdf_new))
  137. # list_new_pdf_new = []
  138. # bytes = 0
  139. # for item in list_new_pdf:
  140. # if ".xls" in item.filename or ".xlsx" in item.filename:
  141. # bytes = bytes + item.bytes
  142. # list_new_pdf_new.append(item)
  143. # print(str(bytes/1024/1024/1024) + "G")
  144. # print(len(list_new_pdf_new))
  145. # list_new_pdf = []
  146. # bytes = 0
  147. # for item in list.data:
  148. # if ".xlsx" in item.filename:
  149. # bytes = bytes + item.bytes
  150. # list_new_pdf.append(item)
  151. # print(str(bytes/1024/1024/1024) + "G")
  152. # print(len(list_new_pdf))
  153. # list = []
  154. # bytes = 0
  155. # for i in range(16):
  156. # bytes = bytes + list_new[i].bytes
  157. # print(list_new[i])
  158. # print('')
  159. # list.append(list_new[i])
  160. # print(list)
  161. # for item in list_new_pdf:
  162. # if item.id == "file-1Mbqss6qX6GPnTKM6izCx1":
  163. # print(item)
  164. # deleteList = ["file-9uYPz7MWTpjgsUhond2pdFVc","file-U7oU81MT34NTeHaZu6dv2yhq","file-nUyGEdScnyLCuRZ3a2vLCY6B","file-Uy8H9ePoGspsXyTwWUwwhAlK"]
  165. # for item in list_new_pdf:
  166. # # if item.id in list_new_pdf:
  167. # openai.files.delete(item.id)
  168. # list = openai.files.list(
  169. # purpose="assistants_output",
  170. # extra_query={"order":"desc"}
  171. # )
  172. # # print(list)
  173. # bytes = 0
  174. # for item in list.data:
  175. # if item.bytes != None:
  176. # bytes = bytes + item.bytes
  177. # print("assistants_output:")
  178. # print(len(list.data))
  179. # print(str(bytes/1024/1024/1024) + "G")
  180. # print('')
  181. # list = openai.files.list(
  182. # purpose="batch",
  183. # extra_query={"order":"desc"}
  184. # )
  185. # bytes = 0
  186. # for item in list.data:
  187. # bytes = bytes + item.bytes
  188. # print("batch:")
  189. # print(len(list.data))
  190. # print(str(bytes/1024/1024/1024) + "G")
  191. # print('')
  192. # list = openai.files.list(
  193. # purpose="batch_output",
  194. # extra_query={"order":"desc"}
  195. # )
  196. # print("batch_output:")
  197. # print(len(list.data))
  198. # print('')
  199. # list = openai.files.list(
  200. # purpose="fine-tune",
  201. # extra_query={"order":"desc"}
  202. # )
  203. # bytes = 0
  204. # for item in list.data:
  205. # bytes = bytes + item.bytes
  206. # print("fine-tune:")
  207. # print(len(list.data))
  208. # print(str(bytes/1024/1024/1024) + "G")
  209. # print('')
  210. # list = openai.files.list(
  211. # purpose="fine-tune-results",
  212. # extra_query={"order":"desc"}
  213. # )
  214. # print("fine-tune-results:")
  215. # print(len(list.data))
  216. # print('')
  217. # list = openai.files.list(
  218. # purpose="vision",
  219. # extra_query={"order":"desc"}
  220. # )
  221. # bytes = 0
  222. # for item in list.data:
  223. # bytes = bytes + item.bytes
  224. # print("vision:")
  225. # print(len(list.data))
  226. # print(str(bytes/1024/1024/1024) + "G")
  227. import logging
  228. import os
  229. from pathlib import Path
  230. import time
  231. import openai
  232. from openai import AssistantEventHandler
  233. from openai.types.beta import AssistantStreamEvent
  234. from openai.types.beta.assistant_stream_event import ThreadMessageInProgress
  235. from openai.types.beta.threads.message import Message
  236. from openai.types.beta.threads.runs import ToolCall, ToolCallDelta
  237. base_url = "https://assistantapi.cocorobo.cn/api/v1"
  238. api_key = "cocorobo-xjw-admin"
  239. client = openai.OpenAI(base_url=base_url, api_key=api_key)
  240. class EventHandler(openai.AssistantEventHandler):
  241. def __init__(self) -> None:
  242. super().__init__()
  243. def on_tool_call_created(self, tool_call: ToolCall) -> None:
  244. logging.info("=====> tool call created: %s\n", tool_call)
  245. def on_tool_call_delta(self, delta: ToolCallDelta, snapshot: ToolCall) -> None:
  246. logging.info("=====> tool call delta")
  247. logging.info("delta : %s", delta)
  248. logging.info("snapshot: %s\n", snapshot)
  249. def on_tool_call_done(self, tool_call: ToolCall) -> None:
  250. logging.info("=====> tool call done: %s\n", tool_call)
  251. self.tool_call = tool_call
  252. def on_message_created(self, message: Message) -> None:
  253. logging.info("=====> message created: %s\n", message)
  254. def on_message_delta(self, delta, snapshot: Message) -> None:
  255. logging.info("=====> message delta")
  256. logging.info("=====> delta : %s", delta)
  257. logging.info("=====> snapshot: %s\n", snapshot)
  258. def on_message_done(self, message: Message) -> None:
  259. logging.info("=====> message done: %s\n", message)
  260. def on_text_created(self, text) -> None:
  261. logging.info("=====> text create: %s\n", text)
  262. def on_text_delta(self, delta, snapshot) -> None:
  263. logging.info("=====> text delta")
  264. logging.info("delta : %s", delta)
  265. logging.info("snapshot: %s\n", snapshot)
  266. def on_text_done(self, text) -> None:
  267. logging.info("text done: %s\n", text)
  268. def on_event(self, event: AssistantStreamEvent) -> None:
  269. if isinstance(event, ThreadMessageInProgress):
  270. logging.info("event: %s\n", event)
  271. if __name__ == "__main__":
  272. file_path = os.path.join(os.path.dirname(__file__) + "/test.txt")
  273. print(file_path)
  274. file = client.files.create(file=Path(file_path), purpose="assistants")
  275. print(file)
  276. assistant = client.beta.assistants.create(
  277. name="Assistant Demo",
  278. instructions="会议分析师",
  279. model="gpt-4o-2024-11-20",
  280. tools=[
  281. {"type": "file_search"},
  282. ],
  283. tool_resources={"file_search": {"vector_stores": [{"file_ids": [file.id]}]}},
  284. )
  285. # assistant = client.beta.assistants.retrieve(assistant_id="67614b38d5f1a0df9dddfba9")
  286. print("=====> : %s\n", assistant)
  287. thread = client.beta.threads.create()
  288. print("=====> : %s\n", thread)
  289. message = client.beta.threads.messages.create(
  290. thread_id=thread.id,
  291. role="user",
  292. content="人工智能核心内容",
  293. # attachments=[
  294. # {"file_id": "67614b375e4b953d7f07c27a", "tools": [{"type": "file_search"}]}
  295. # ]
  296. )
  297. print("=====> : %s\n", message)
  298. event_handler = EventHandler()
  299. with client.beta.threads.runs.stream(
  300. thread_id=thread.id,
  301. assistant_id=assistant.id,
  302. event_handler=event_handler,
  303. extra_body={"stream_options": {"include_usage": True}},
  304. ) as stream:
  305. stream.until_done()
  306. print("aaaaaa")
  307. # run = client.beta.threads.runs.create(
  308. # thread_id=thread.id,
  309. # assistant_id=assistant.id,
  310. # )
  311. # print("=====> : %s\n", run)
  312. # print("checking assistant status. \n")
  313. # while True:
  314. # run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
  315. # run_steps = client.beta.threads.runs.steps.list(run_id=run.id, thread_id=thread.id).data
  316. # for run_step in run_steps:
  317. # print("=====> : %s\n", run_step)
  318. # if run.status == "completed":
  319. # messages = client.beta.threads.messages.list(thread_id=thread.id)
  320. # print("=====> messages:")
  321. # for message in messages:
  322. # assert message.content[0].type == "text"
  323. # print("%s", {"role": message.role, "message": message.content[0].text.value})
  324. # # delete asst
  325. # client.beta.assistants.delete(assistant.id)
  326. # break
  327. # elif run.status == "failed":
  328. # print("run failed %s\n", run.last_error)
  329. # break
  330. # else:
  331. # print("in progress...\n")
  332. # time.sleep(5)