pyxllib 0.3.119__tar.gz → 0.3.121__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. {pyxllib-0.3.119/pyxllib.egg-info → pyxllib-0.3.121}/PKG-INFO +1 -1
  2. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/sqlite.py +1 -1
  3. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/kq5034lib.py +0 -3
  4. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/utools.py +105 -105
  5. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/xlsxlib.py +2 -2
  6. {pyxllib-0.3.119 → pyxllib-0.3.121/pyxllib.egg-info}/PKG-INFO +1 -1
  7. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib.egg-info/SOURCES.txt +5 -0
  8. pyxllib-0.3.121/pyxlpr/openai2/__init__.py +3 -0
  9. pyxllib-0.3.121/pyxlpr/openai2/_core/chat.py +277 -0
  10. pyxllib-0.3.121/pyxlpr/openai2/_core/chat_in_cmd.py +67 -0
  11. pyxllib-0.3.121/pyxlpr/openai2/_core/group_chat.py +120 -0
  12. pyxllib-0.3.121/pyxlpr/openai2/openai2.py +3 -0
  13. {pyxllib-0.3.119 → pyxllib-0.3.121}/setup.py +1 -1
  14. {pyxllib-0.3.119 → pyxllib-0.3.121}/LICENSE +0 -0
  15. {pyxllib-0.3.119 → pyxllib-0.3.121}/MANIFEST.in +0 -0
  16. {pyxllib-0.3.119 → pyxllib-0.3.121}/README.md +0 -0
  17. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/__init__.py +0 -0
  18. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/__init__.py +0 -0
  19. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/disjoint.py +0 -0
  20. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/geo.py +0 -0
  21. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/intervals.py +0 -0
  22. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/matcher.py +0 -0
  23. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/newbie.py +0 -0
  24. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/pupil.py +0 -0
  25. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/shapelylib.py +0 -0
  26. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/specialist.py +0 -0
  27. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/stat.py +0 -0
  28. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/treelib.py +0 -0
  29. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/algo/unitlib.py +0 -0
  30. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/__init__.py +0 -0
  31. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/expert.py +0 -0
  32. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/imfile.py +0 -0
  33. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/imhash.py +0 -0
  34. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/pupil.py +0 -0
  35. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/rgbfmt.py +0 -0
  36. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/trackbartools.py +0 -0
  37. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/xlcvlib.py +0 -0
  38. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/cv/xlpillib.py +0 -0
  39. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/__init__.py +0 -0
  40. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/echarts.py +0 -0
  41. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/jsonlib.py +0 -0
  42. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/oss.py +0 -0
  43. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/pglib.py +0 -0
  44. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/data/sqllib.py +0 -0
  45. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/JLineViewer.py +0 -0
  46. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/__init__.py +0 -0
  47. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/autogui/__init__.py +0 -0
  48. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/autogui/autogui.py +0 -0
  49. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/autogui/virtualkey.py +0 -0
  50. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/demolib.py +0 -0
  51. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/drissionlib.py +0 -0
  52. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/old.py +0 -0
  53. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/qt.py +0 -0
  54. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/robustprocfile.py +0 -0
  55. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/seleniumlib.py +0 -0
  56. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/tk.py +0 -0
  57. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/unixlib.py +0 -0
  58. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/webhook.py +0 -0
  59. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/win32lib.py +0 -0
  60. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/ext/yuquelib.py +0 -0
  61. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/__init__.py +0 -0
  62. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/docxlib.py +0 -0
  63. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/gitlib.py +0 -0
  64. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/libreoffice.py +0 -0
  65. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/movielib.py +0 -0
  66. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/newbie.py +0 -0
  67. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/onenotelib.py +0 -0
  68. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/packlib/__init__.py +0 -0
  69. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/packlib/zipfile.py +0 -0
  70. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/pdflib.py +0 -0
  71. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/pupil.py +0 -0
  72. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/specialist/__init__.py +0 -0
  73. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/specialist/dirlib.py +0 -0
  74. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/specialist/download.py +0 -0
  75. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/file/specialist/filelib.py +0 -0
  76. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/__init__.py +0 -0
  77. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/cachetools.py +0 -0
  78. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/deprecatedlib.py +0 -0
  79. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/ipyexec.py +0 -0
  80. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/multiprocs.py +0 -0
  81. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/newbie.py +0 -0
  82. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/pupil.py +0 -0
  83. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/scheduler.py +0 -0
  84. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/sitepackages.py +0 -0
  85. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/__init__.py +0 -0
  86. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/bc.py +0 -0
  87. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/browser.py +0 -0
  88. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/common.py +0 -0
  89. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/datetime.py +0 -0
  90. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/tictoc.py +0 -0
  91. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/specialist/xllog.py +0 -0
  92. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/prog/xlosenv.py +0 -0
  93. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/stdlib/__init__.py +0 -0
  94. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  95. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  96. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  97. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/__init__.py +0 -0
  98. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/ahocorasick.py +0 -0
  99. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/charclasslib.py +0 -0
  100. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/jiebalib.py +0 -0
  101. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/jinjalib.py +0 -0
  102. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/jscode.py +0 -0
  103. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/latex/__init__.py +0 -0
  104. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/levenshtein.py +0 -0
  105. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/nestenv.py +0 -0
  106. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/newbie.py +0 -0
  107. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/pupil/__init__.py +0 -0
  108. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/pupil/common.py +0 -0
  109. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/pupil/xlalign.py +0 -0
  110. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/pycode.py +0 -0
  111. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/specialist/__init__.py +0 -0
  112. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/specialist/common.py +0 -0
  113. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/specialist/ptag.py +0 -0
  114. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/spellchecker.py +0 -0
  115. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/vbacode.py +0 -0
  116. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/text/xmllib.py +0 -0
  117. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/xl.py +0 -0
  118. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib/xlcv.py +0 -0
  119. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib.egg-info/dependency_links.txt +0 -0
  120. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib.egg-info/requires.txt +12 -12
  121. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxllib.egg-info/top_level.txt +0 -0
  122. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/__init__.py +0 -0
  123. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/__init__.py +0 -0
  124. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/clientlib.py +0 -0
  125. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/specialist.py +0 -0
  126. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/torch_app.py +0 -0
  127. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/xlpaddle.py +0 -0
  128. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ai/xltorch.py +0 -0
  129. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/__init__.py +0 -0
  130. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/coco.py +0 -0
  131. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/datacls.py +0 -0
  132. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/datasets.py +0 -0
  133. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/gptlib.py +0 -0
  134. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/icdar/__init__.py +0 -0
  135. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/icdar/deteval.py +0 -0
  136. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/icdar/icdar2013.py +0 -0
  137. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/icdar/iou.py +0 -0
  138. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  139. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/imtextline.py +0 -0
  140. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/labelme.py +0 -0
  141. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/removeline.py +0 -0
  142. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/specialist.py +0 -0
  143. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/data/tiktokenlib.py +0 -0
  144. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/eval/__init__.py +0 -0
  145. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/paddleocr.py +0 -0
  146. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/__init__.py +0 -0
  147. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  148. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/__init__.py +0 -0
  149. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  150. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  151. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  152. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  153. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  154. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  155. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  156. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  157. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  158. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  159. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  160. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  161. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  162. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  163. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  164. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  165. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  166. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  167. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  168. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  169. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  170. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  171. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  172. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/__init__.py +0 -0
  173. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  174. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  175. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  176. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  177. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  178. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  179. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  180. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  181. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  182. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  183. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  184. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  185. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  186. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  187. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  188. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  189. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  190. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  191. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  192. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  193. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  194. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  195. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  196. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  197. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  198. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  199. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  200. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  201. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  202. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  203. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  204. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  205. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  206. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  207. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  208. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  209. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  210. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  211. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  212. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  213. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  214. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  215. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  216. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  217. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  218. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  219. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  220. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  221. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  222. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  223. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  224. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  225. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  226. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  227. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  228. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  229. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  230. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  231. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  232. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  233. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  234. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  235. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  236. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  237. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  238. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  239. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  240. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  241. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  242. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  243. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  244. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  245. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  246. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  247. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  248. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  249. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  250. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  251. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  252. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  253. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  254. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  255. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  256. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  257. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  258. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  259. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  260. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  261. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  262. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  263. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  264. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  265. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/__init__.py +0 -0
  266. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/eval.py +0 -0
  267. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/export_center.py +0 -0
  268. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/export_model.py +0 -0
  269. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  270. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  271. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  272. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  273. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  274. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  275. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  276. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  277. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  278. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  279. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  280. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  281. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/program.py +0 -0
  282. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  283. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/train.py +0 -0
  284. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  285. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  286. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/__init__.py +0 -0
  287. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  288. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  289. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  290. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  291. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  292. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  293. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  294. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  295. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  296. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  297. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  298. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  299. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  300. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  301. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  302. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  303. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  304. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  305. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  306. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  307. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  308. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  309. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  310. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  311. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  312. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  313. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  314. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  315. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  316. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  317. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  318. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  319. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  320. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  321. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  322. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  323. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  324. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  325. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  326. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  327. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  328. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  329. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  330. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/iou.py +0 -0
  331. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/logging.py +0 -0
  332. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/network.py +0 -0
  333. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  334. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/profiler.py +0 -0
  335. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/save_load.py +0 -0
  336. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/stats.py +0 -0
  337. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppocr/utils/utility.py +0 -0
  338. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/__init__.py +0 -0
  339. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/predict_system.py +0 -0
  340. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/__init__.py +0 -0
  341. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  342. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/matcher.py +0 -0
  343. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  344. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  345. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  346. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  347. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  348. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  349. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  350. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  351. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/ppstructure/utility.py +0 -0
  352. {pyxllib-0.3.119 → pyxllib-0.3.121}/pyxlpr/xlai.py +0 -0
  353. {pyxllib-0.3.119 → pyxllib-0.3.121}/requirements.txt +0 -0
  354. {pyxllib-0.3.119 → pyxllib-0.3.121}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.119
3
+ Version: 0.3.121
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -150,7 +150,6 @@ class SqlBuilder:
150
150
  sql.append(f"WHERE {' AND '.join(self._where)}")
151
151
  return '\n'.join(sql)
152
152
 
153
-
154
153
  def __3_build_中级命令(self):
155
154
  pass
156
155
 
@@ -171,6 +170,7 @@ class SqlBuilder:
171
170
  sql._where = self._where.copy()
172
171
  return sql.build_select()
173
172
 
173
+
174
174
  class SqlBase:
175
175
  """ Sql语法通用的功能 """
176
176
 
@@ -937,9 +937,6 @@ class 网课考勤:
937
937
  else:
938
938
  time.sleep(1)
939
939
 
940
- def 批量退款(self):
941
- self.driver.get('https://pay.weixin.qq.com/index.php/xphp/cbatchrefund/batch_refund#/pages/index/index')
942
-
943
940
 
944
941
  class 网课考勤2(网课考勤):
945
942
  def login_xe(self):
@@ -113,6 +113,9 @@ class UtoolsBase:
113
113
 
114
114
  self.outfmt = self.cmds['outfmt'] if 'outfmt' in self.cmds else outfmt
115
115
 
116
+
117
+ class UtoolsName(UtoolsBase):
118
+
116
119
  def check_cmds(self):
117
120
  """ 显示所有参数值 """
118
121
  df = pd.DataFrame.from_records([(k, v) for k, v in self.cmds.items()],
@@ -134,110 +137,6 @@ class UtoolsBase:
134
137
  f2.write_text(self.cmds['ClipText'] + '\n')
135
138
  bcompare(f1, f2, wait=False)
136
139
 
137
-
138
- class UtoolsFile(UtoolsBase):
139
- """ 文件相关操作工具 """
140
-
141
- def __init__(self, cmds, *, outfmt='text'):
142
- super().__init__(cmds, outfmt=outfmt)
143
-
144
- # 如果是window等模式,补充 MatchedFiles
145
- if 'MatchedFiles' in self.cmds:
146
- self.paths = [pathlib.Path(f['path']) for f in self.cmds['MatchedFiles']]
147
- else:
148
- self.paths = [pathlib.Path(os.path.abspath(f)).resolve() for f in os.listdir('../robot')]
149
-
150
- @classmethod
151
- def is_image(cls, f):
152
- return bool(re.match('jpe?g|png|gif|bmp', f.suffix.lower()[1:]))
153
-
154
- def codefile(self):
155
- """ 多用途文件处理器
156
-
157
- 核心理念是不设定具体功能,而是让用户在 subinput 自己写需要执行的py代码功能
158
- 而在subinput,可以用一些特殊的标识符来传参
159
-
160
- 以file为例,有4类参数:
161
- file,处理当前目录 文件
162
- rfile,递归处理所有目录下 文件
163
- files,当前目录 所有文件
164
- rfiles,递归获取所有目录下 所有文件
165
-
166
- 类型上,file可以改为
167
- dir,只分析目录
168
- path,所有文件和目录
169
-
170
- 扩展了一些特殊的类型:
171
- imfile,图片文件
172
- """
173
- from functools import reduce
174
- try:
175
- from xlproject.xyz.kzconfig import KzDataSync
176
- from pyxlpr.data.labelme import reduce_labelme_jsonfile
177
- except ModuleNotFoundError:
178
- pass
179
-
180
- tt = TicToc()
181
-
182
- # 1 获得所有标识符
183
- # 每个单词前后都有空格,方便定界
184
- keywords = filter(lambda x: re.match(r'[a-zA-Z_]+$', x),
185
- set(re.findall(r'\.?[a-zA-Z_]+\(?', self.cmds['subinput'])))
186
- keywords = ' ' + ' '.join(keywords) + ' '
187
- # print('keywords:', keywords)
188
-
189
- # 2 生成一些备用的智能参数
190
- # 一级目录下选中的文件
191
- paths = self.paths
192
- # 用正则判断一些智能参数是否要计算,注意不能只判断files,如果出现file,也是要引用files的
193
- files = [XlPath(p) for p in paths if p.is_file()] if re.search(r'files? ', keywords) else []
194
- imfiles = [f for f in files if self.is_image(f)] if re.search(r' imfiles? ', keywords) else []
195
- # 出现r系列的递归操作,都是要计算出dirs的
196
- dirs = [XlPath(p) for p in paths if p.is_dir()] if re.search(r' (dirs?|r[a-zA-Z_]+) ', keywords) else []
197
-
198
- # 递归所有的文件
199
- rpaths = reduce(lambda x, y: x + y.select('**/*').subpaths(), [paths] + dirs) \
200
- if re.search(r' (r[a-zA-Z_]+) ', keywords) else []
201
- rfiles = [XlPath(p) for p in rpaths if p.is_file()] if re.search(r' (r(im)?files?) ', keywords) else []
202
- rimfiles = [f for f in rfiles if self.is_image(f)] if re.search(r' rimfiles? ', keywords) else []
203
- rdirs = [XlPath(p) for p in rpaths if p.is_dir()] if re.search(r' (rdirs?) ', keywords) else []
204
-
205
- # 3 判断是否要智能开循环处理
206
- m = re.search(r' (r?(path|(im)?file|dir)) ', keywords)
207
- if m:
208
- name = m.group(1)
209
- objs = eval(name + 's')
210
- print('len(' + name + 's)=', len(objs))
211
- for x in objs:
212
- locals()[name] = x
213
- eval(self.cmds['subinput'])
214
- else: # 没有的话就直接处理所有文件
215
- eval(self.cmds['subinput'])
216
-
217
- # 4 运行结束标志
218
- print(f'finished in {format_timespan(tt.tocvalue())}.')
219
-
220
- def open_jsonl(self):
221
- """ 打开jsonl文件 """
222
- from pyxllib.ext.JLineViewer import start_jlineviewer
223
- start_jlineviewer(self.paths[0].as_posix())
224
-
225
- def open_jsonl_with_excel(self):
226
- """ 用excel打开jsonl文件 """
227
- from pyxllib.algo.stat import write_dataframes_to_excel
228
-
229
- file = self.paths[0].as_posix()
230
- data = XlPath(file).read_jsonl()
231
-
232
- file = XlPath.create_tempfile_path('.xlsx')
233
- df = pd.DataFrame.from_dict(data)
234
- write_dataframes_to_excel(file, {'Sheet1': df})
235
-
236
- os.startfile(file)
237
-
238
-
239
- class UtoolsText(UtoolsBase):
240
-
241
140
  @clipboard_decorator(copy=False, typing=True)
242
141
  def common_dir(self):
243
142
  # 目录路径生成工具
@@ -315,7 +214,7 @@ class UtoolsText(UtoolsBase):
315
214
  fire.Fire(func, self.cmds['subinput'], 'create_text_image')
316
215
 
317
216
 
318
- class UtoolsRegex(UtoolsBase):
217
+ class UtoolsText(UtoolsBase):
319
218
  def __init__(self, cmds, *, outfmt='text'):
320
219
  super().__init__(cmds, outfmt=outfmt)
321
220
 
@@ -346,6 +245,107 @@ class UtoolsRegex(UtoolsBase):
346
245
  bcompare(text1, text2)
347
246
 
348
247
 
248
+ class UtoolsFile(UtoolsBase):
249
+ """ 文件相关操作工具 """
250
+
251
+ def __init__(self, cmds, *, outfmt='text'):
252
+ super().__init__(cmds, outfmt=outfmt)
253
+
254
+ # 如果是window等模式,补充 MatchedFiles
255
+ if 'MatchedFiles' in self.cmds:
256
+ self.paths = [pathlib.Path(f['path']) for f in self.cmds['MatchedFiles']]
257
+ else:
258
+ self.paths = [pathlib.Path(os.path.abspath(f)).resolve() for f in os.listdir('../robot')]
259
+
260
+ @classmethod
261
+ def is_image(cls, f):
262
+ return bool(re.match('jpe?g|png|gif|bmp', f.suffix.lower()[1:]))
263
+
264
+ def codefile(self):
265
+ """ 多用途文件处理器
266
+
267
+ 核心理念是不设定具体功能,而是让用户在 subinput 自己写需要执行的py代码功能
268
+ 而在subinput,可以用一些特殊的标识符来传参
269
+
270
+ 以file为例,有4类参数:
271
+ file,处理当前目录 文件
272
+ rfile,递归处理所有目录下 文件
273
+ files,当前目录 所有文件
274
+ rfiles,递归获取所有目录下 所有文件
275
+
276
+ 类型上,file可以改为
277
+ dir,只分析目录
278
+ path,所有文件和目录
279
+
280
+ 扩展了一些特殊的类型:
281
+ imfile,图片文件
282
+ """
283
+ from functools import reduce
284
+ try:
285
+ from xlproject.xyz.kzconfig import KzDataSync
286
+ from pyxlpr.data.labelme import reduce_labelme_jsonfile
287
+ except ModuleNotFoundError:
288
+ pass
289
+
290
+ tt = TicToc()
291
+
292
+ # 1 获得所有标识符
293
+ # 每个单词前后都有空格,方便定界
294
+ keywords = filter(lambda x: re.match(r'[a-zA-Z_]+$', x),
295
+ set(re.findall(r'\.?[a-zA-Z_]+\(?', self.cmds['subinput'])))
296
+ keywords = ' ' + ' '.join(keywords) + ' '
297
+ # print('keywords:', keywords)
298
+
299
+ # 2 生成一些备用的智能参数
300
+ # 一级目录下选中的文件
301
+ paths = self.paths
302
+ # 用正则判断一些智能参数是否要计算,注意不能只判断files,如果出现file,也是要引用files的
303
+ files = [XlPath(p) for p in paths if p.is_file()] if re.search(r'files? ', keywords) else []
304
+ imfiles = [f for f in files if self.is_image(f)] if re.search(r' imfiles? ', keywords) else []
305
+ # 出现r系列的递归操作,都是要计算出dirs的
306
+ dirs = [XlPath(p) for p in paths if p.is_dir()] if re.search(r' (dirs?|r[a-zA-Z_]+) ', keywords) else []
307
+
308
+ # 递归所有的文件
309
+ rpaths = reduce(lambda x, y: x + y.select('**/*').subpaths(), [paths] + dirs) \
310
+ if re.search(r' (r[a-zA-Z_]+) ', keywords) else []
311
+ rfiles = [XlPath(p) for p in rpaths if p.is_file()] if re.search(r' (r(im)?files?) ', keywords) else []
312
+ rimfiles = [f for f in rfiles if self.is_image(f)] if re.search(r' rimfiles? ', keywords) else []
313
+ rdirs = [XlPath(p) for p in rpaths if p.is_dir()] if re.search(r' (rdirs?) ', keywords) else []
314
+
315
+ # 3 判断是否要智能开循环处理
316
+ m = re.search(r' (r?(path|(im)?file|dir)) ', keywords)
317
+ if m:
318
+ name = m.group(1)
319
+ objs = eval(name + 's')
320
+ print('len(' + name + 's)=', len(objs))
321
+ for x in objs:
322
+ locals()[name] = x
323
+ eval(self.cmds['subinput'])
324
+ else: # 没有的话就直接处理所有文件
325
+ eval(self.cmds['subinput'])
326
+
327
+ # 4 运行结束标志
328
+ print(f'finished in {format_timespan(tt.tocvalue())}.')
329
+
330
+ def open_jsonl(self):
331
+ """ 打开jsonl文件 """
332
+ from pyxllib.ext.JLineViewer import start_jlineviewer
333
+ start_jlineviewer(self.paths[0].as_posix())
334
+
335
+ def open_jsonl_with_excel(self):
336
+ """ 用excel打开jsonl文件 """
337
+ from pyxllib.algo.stat import write_dataframes_to_excel
338
+
339
+ file = self.paths[0].as_posix()
340
+ data = XlPath(file).read_jsonl()
341
+
342
+ file = XlPath.create_tempfile_path('.xlsx')
343
+ df = pd.DataFrame.from_dict(data)
344
+ write_dataframes_to_excel(file, {'Sheet1': df})
345
+
346
+ os.startfile(file)
347
+
348
+
349
349
  if __name__ == '__main__':
350
350
  with TicToc('utools'):
351
351
  pass
@@ -3063,8 +3063,8 @@ def extract_workbook_summary3b(file_path,
3063
3063
  reduce_summary(res)
3064
3064
 
3065
3065
  time_dict = {'load_time': human_readable_number(load_time),
3066
- 'summary2_time': human_readable_number(summary2_time),
3067
- 'summary3_time': human_readable_number(summary3_time)}
3066
+ 'summary2_time': human_readable_number(summary2_time),
3067
+ 'summary3_time': human_readable_number(summary3_time)}
3068
3068
 
3069
3069
  if return_mode == 1:
3070
3070
  return res, time_dict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.119
3
+ Version: 0.3.121
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -139,6 +139,11 @@ pyxlpr/data/icdar/icdar2013.py
139
139
  pyxlpr/data/icdar/iou.py
140
140
  pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py
141
141
  pyxlpr/eval/__init__.py
142
+ pyxlpr/openai2/__init__.py
143
+ pyxlpr/openai2/openai2.py
144
+ pyxlpr/openai2/_core/chat.py
145
+ pyxlpr/openai2/_core/chat_in_cmd.py
146
+ pyxlpr/openai2/_core/group_chat.py
142
147
  pyxlpr/ppocr/__init__.py
143
148
  pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py
144
149
  pyxlpr/ppocr/data/__init__.py
@@ -0,0 +1,3 @@
1
+ from ._core.chat import Chat, AKPool, system_msg, user_msg, assistant_msg
2
+ from ._core.group_chat import GroupChat
3
+ from ._core.chat_in_cmd import chat_in_cmd, ParseCmd
@@ -0,0 +1,277 @@
1
+ from json import dumps as jsonDumps
2
+ from json import loads as jsonLoads
3
+ from pathlib import Path
4
+ from typing import List, Literal
5
+ from openai import OpenAI, AsyncOpenAI
6
+
7
+
8
+ class AKPool:
9
+ """ 轮询获取api_key """
10
+
11
+ def __init__(self, apikeys: list):
12
+ self._pool = self._POOL(apikeys)
13
+
14
+ def fetch_key(self):
15
+ return next(self._pool)
16
+
17
+ @classmethod
18
+ def _POOL(cls, apikeys: list):
19
+ while True:
20
+ for x in apikeys:
21
+ yield x
22
+
23
+
24
+ class MsgBase:
25
+ role_name: str
26
+ text: str
27
+
28
+ def __init__(self, text: str):
29
+ self.text = text
30
+
31
+ def __str__(self):
32
+ return self.text
33
+
34
+ def __iter__(self):
35
+ yield "role", self.role_name
36
+ yield "content", self.text
37
+
38
+
39
+ system_msg = type("system_msg", (MsgBase,), {"role_name": "system"})
40
+ user_msg = type("user_msg", (MsgBase,), {"role_name": "user"})
41
+ assistant_msg = type("assistant_msg", (MsgBase,), {"role_name": "assistant"})
42
+
43
+
44
+ class Temque:
45
+ """ 一个先进先出, 可设置最大容量, 可固定元素的队列 """
46
+
47
+ def __init__(self, maxlen: int = None):
48
+ self.core: List[dict] = []
49
+ self.maxlen = maxlen or float("inf")
50
+
51
+ def _trim(self):
52
+ core = self.core
53
+ if len(core) > self.maxlen:
54
+ dc = len(core) - self.maxlen
55
+ indexes = []
56
+ for i, x in enumerate(core):
57
+ if not x["pin"]:
58
+ indexes.append(i)
59
+ if len(indexes) == dc:
60
+ break
61
+ for i in indexes[::-1]:
62
+ core.pop(i)
63
+
64
+ def add_many(self, *objs):
65
+ for x in objs:
66
+ self.core.append({"obj": x, "pin": False})
67
+ self._trim()
68
+
69
+ def __iter__(self):
70
+ for x in self.core:
71
+ yield x["obj"]
72
+
73
+ def pin(self, *indexes):
74
+ for i in indexes:
75
+ self.core[i]["pin"] = True
76
+
77
+ def unpin(self, *indexes):
78
+ for i in indexes:
79
+ self.core[i]["pin"] = False
80
+
81
+ def copy(self):
82
+ que = self.__class__(maxlen=self.maxlen)
83
+ que.core = self.core.copy()
84
+ return que
85
+
86
+ def deepcopy(self):
87
+ ... # 创建这个方法是为了以代码提示的方式提醒用户: copy 方法是浅拷贝
88
+
89
+ def __add__(self, obj: 'list|Temque'):
90
+ que = self.copy()
91
+ if isinstance(obj, self.__class__):
92
+ que.core += obj.core
93
+ que._trim()
94
+ else:
95
+ que.add_many(*obj)
96
+ return que
97
+
98
+
99
+ class Chat:
100
+ """
101
+ [文档](https://lcctoor.github.io/arts/arts/openai2)
102
+
103
+ 获取api_key:
104
+ * [获取链接1](https://platform.openai.com/account/api-keys)
105
+ * [获取链接2](https://www.baidu.com/s?wd=%E8%8E%B7%E5%8F%96%20openai%20api_key)
106
+ """
107
+
108
+ recently_request_data: dict # 最近一次请求所用的参数
109
+
110
+ def __init__(self,
111
+ # kwargs
112
+ api_key: str|AKPool,
113
+ base_url: str = None, # base_url 参数用于修改基础URL
114
+ timeout=None,
115
+ max_retries=None,
116
+ http_client=None,
117
+ # request_kwargs
118
+ model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview", "gpt-4", "gpt-4-0314", "gpt-4-0613",
119
+ "gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-0613", "gpt-3.5-turbo"] = "gpt-3.5-turbo",
120
+ # Chat
121
+ msg_max_count: int=None,
122
+ # kwargs
123
+ **kwargs,
124
+ ):
125
+ api_base = kwargs.pop('api_base', None)
126
+ base_url = base_url or api_base
127
+ MsgMaxCount = kwargs.pop('MsgMaxCount', None)
128
+ msg_max_count = msg_max_count or MsgMaxCount
129
+
130
+ if base_url: kwargs["base_url"] = base_url
131
+ if timeout: kwargs["timeout"] = timeout
132
+ if max_retries: kwargs["max_retries"] = max_retries
133
+ if http_client: kwargs["http_client"] = http_client
134
+
135
+ self.reset_api_key(api_key)
136
+ self._kwargs = kwargs
137
+ self._request_kwargs = {'model':model}
138
+ self._messages = Temque(maxlen=msg_max_count)
139
+
140
+ def reset_api_key(self, api_key: str|AKPool):
141
+ if isinstance(api_key, AKPool):
142
+ self._akpool = api_key
143
+ else:
144
+ self._akpool = AKPool([api_key])
145
+
146
+ def request(self, text: str=None, **kwargs):
147
+ messages = [{"role": "user", "content": text}]
148
+ messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
149
+ assert messages
150
+ self.recently_request_data = {
151
+ 'api_key': (api_key := self._akpool.fetch_key()),
152
+ }
153
+ completion = OpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
154
+ **self._request_kwargs, # 全局参数
155
+ **kwargs, # 单次请求的参数覆盖全局参数
156
+ "messages": list(self._messages + messages),
157
+ "stream": False,
158
+ })
159
+ answer: str = completion.choices[0].message.content
160
+ self._messages.add_many(*messages, {"role": "assistant", "content": answer})
161
+ return answer
162
+
163
+ def stream_request(self, text: str=None, **kwargs):
164
+ messages = [{"role": "user", "content": text}]
165
+ messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
166
+ assert messages
167
+ self.recently_request_data = {
168
+ 'api_key': (api_key := self._akpool.fetch_key()),
169
+ }
170
+ completion = OpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
171
+ **self._request_kwargs, # 全局参数
172
+ **kwargs, # 单次请求的参数覆盖全局参数
173
+ "messages": list(self._messages + messages),
174
+ "stream": True,
175
+ })
176
+ answer: str = ""
177
+ for chunk in completion:
178
+ if chunk.choices and (content := chunk.choices[0].delta.content):
179
+ answer += content
180
+ yield content
181
+ self._messages.add_many(*messages, {"role": "assistant", "content": answer})
182
+
183
+ async def async_request(self, text: str=None, **kwargs):
184
+ messages = [{"role": "user", "content": text}]
185
+ messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
186
+ assert messages
187
+ self.recently_request_data = {
188
+ 'api_key': (api_key := self._akpool.fetch_key()),
189
+ }
190
+ completion = await AsyncOpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
191
+ **self._request_kwargs, # 全局参数
192
+ **kwargs, # 单次请求的参数覆盖全局参数
193
+ "messages": list(self._messages + messages),
194
+ "stream": False,
195
+ })
196
+ answer: str = completion.choices[0].message.content
197
+ self._messages.add_many(*messages, {"role": "assistant", "content": answer})
198
+ return answer
199
+
200
+ async def async_stream_request(self, text: str=None, **kwargs):
201
+ messages = [{"role": "user", "content": text}]
202
+ messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
203
+ assert messages
204
+ self.recently_request_data = {
205
+ 'api_key': (api_key := self._akpool.fetch_key()),
206
+ }
207
+ completion = await AsyncOpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
208
+ **self._request_kwargs, # 全局参数
209
+ **kwargs, # 单次请求的参数覆盖全局参数
210
+ "messages": list(self._messages + messages),
211
+ "stream": True,
212
+ })
213
+ answer: str = ""
214
+ async for chunk in completion:
215
+ if chunk.choices and (content := chunk.choices[0].delta.content):
216
+ answer += content
217
+ yield content
218
+ self._messages.add_many(*messages, {"role": "assistant", "content": answer})
219
+
220
+ def rollback(self, n=1):
221
+ '''
222
+ 回滚对话
223
+ '''
224
+ self._messages.core[-2 * n :] = []
225
+ for x in self._messages.core[-2:]:
226
+ x = x["obj"]
227
+ print(f"[{x['role']}]:{x['content']}")
228
+
229
+ def pin_messages(self, *indexes):
230
+ '''
231
+ 锁定历史消息
232
+ '''
233
+ self._messages.pin(*indexes)
234
+
235
+ def unpin_messages(self, *indexes):
236
+ '''
237
+ 解锁历史消息
238
+ '''
239
+ self._messages.unpin(*indexes)
240
+
241
+ def fetch_messages(self):
242
+ return list(self._messages)
243
+
244
+ def add_dialogs(self, *ms: dict|system_msg|user_msg|assistant_msg):
245
+ '''
246
+ 添加历史对话
247
+ '''
248
+ messages = [dict(x) for x in ms]
249
+ self._messages.add_many(*messages)
250
+
251
+ def __getattr__(self, name):
252
+ match name: # 兼容旧代码
253
+ case 'asy_request':
254
+ return self.async_request
255
+ case 'forge':
256
+ return self.add_dialogs
257
+ case 'pin':
258
+ return self.pin_messages
259
+ case 'unpin':
260
+ return self.unpin_messages
261
+ case 'dump':
262
+ return self._dump
263
+ case 'load':
264
+ return self._load
265
+ raise AttributeError(name)
266
+
267
+ def _dump(self, fpath: str):
268
+ """ 存档 """
269
+ jt = jsonDumps(self.fetch_messages(), ensure_ascii=False)
270
+ Path(fpath).write_text(jt, encoding="utf8")
271
+ return True
272
+
273
+ def _load(self, fpath: str):
274
+ """ 载入存档 """
275
+ jt = Path(fpath).read_text(encoding="utf8")
276
+ self._messages.add_many(*jsonLoads(jt))
277
+ return True
@@ -0,0 +1,67 @@
1
+ import sys
2
+ from .chat import Chat, AKPool
3
+ from arts.cooltypes import moduledb
4
+
5
+
6
+ mdb = moduledb.DB('https://pypi.org/project/openai2', depth=3)['chat_in_cmd']
7
+ apikeys: moduledb.File = mdb['apikeys']['data_1']
8
+ apikeys.setdefault('list', [])
9
+ record: moduledb.File = mdb['records']['chat_1']
10
+ record.setdefault('messages', [])
11
+
12
+
13
+ def chat_in_cmd(apikeys:list, newchat=False, model='gpt-4-1106-preview', msg_max_count=30):
14
+ print(f"\n\033[0m你已进入命令行聊天模式, 当前使用'{model}'模型, 请确保你的apikey支持该模型.", end='')
15
+ gpt = Chat(api_key=AKPool(apikeys), model=model, msg_max_count=msg_max_count)
16
+ if not newchat:
17
+ gpt.add_dialogs(*record['messages'])
18
+ while True:
19
+ user = input('\n\n\033[32;1m:')
20
+ print('\033[0m')
21
+ for x in gpt.stream_request(user):
22
+ print(x, end='', flush=True)
23
+ record['messages'] = gpt.fetch_messages()
24
+
25
+
26
+ 命令提示 = '''指令集:
27
+ openai2 add_apikey <apikey> | 添加1个apikey | 如需添加多个, 可执行多次
28
+ openai2 read_apikey | 查看所有apikey |
29
+ openai2 clear_apikey | 清除所有apikey |
30
+ openai2 chat | 继续上次的对话 |
31
+ openai2 newchat | 清空对话记录, 然后开始新对话 |
32
+ '''
33
+
34
+
35
+ def ParseCmd():
36
+ kws = sys.argv[1:]
37
+ if kws:
38
+ kw = kws[0].lower()
39
+
40
+ # 添加apikey
41
+ if kw == 'add_apikey' and len(kws) > 1:
42
+ apikeys['list'].append( kws[1] )
43
+ apikeys.save()
44
+ print('添加 apikey 成功.')
45
+
46
+ # 继续上次的对话
47
+ elif kw == 'chat':
48
+ chat_in_cmd(apikeys['list'], newchat=False)
49
+
50
+ # 清空对话记录, 然后开始新对话
51
+ elif kw == 'newchat':
52
+ chat_in_cmd(apikeys['list'], newchat=True)
53
+
54
+ # 查看所有apikey
55
+ elif kw == 'read_apikey':
56
+ for x in apikeys['list']:
57
+ print(x)
58
+
59
+ # 清除所有apikey
60
+ elif kw == 'clear_apikey':
61
+ apikeys['list'] = []
62
+ print('已清除所有 apikey .')
63
+
64
+ else:
65
+ print(命令提示)
66
+ else:
67
+ print(命令提示)