pyxllib 0.3.121__tar.gz → 0.3.122__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.
- {pyxllib-0.3.121/pyxllib.egg-info → pyxllib-0.3.122}/PKG-INFO +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/specialist/download.py +8 -1
- {pyxllib-0.3.121 → pyxllib-0.3.122/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/openai2/_core/chat.py +192 -14
- {pyxllib-0.3.121 → pyxllib-0.3.122}/setup.py +1 -1
- {pyxllib-0.3.121 → pyxllib-0.3.122}/LICENSE +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/MANIFEST.in +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/README.md +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/scheduler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib.egg-info/requires.txt +12 -12
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/requirements.txt +0 -0
- {pyxllib-0.3.121 → pyxllib-0.3.122}/setup.cfg +0 -0
@@ -17,13 +17,20 @@ from pyxllib.file.specialist import File, Dir
|
|
17
17
|
|
18
18
|
|
19
19
|
def download_file(url, fn=None, *, encoding=None, if_exists=None, ext=None, temp=False):
|
20
|
-
""" 类似writefile,只是源数据是从url里下载
|
20
|
+
r""" 类似writefile,只是源数据是从url里下载
|
21
21
|
|
22
22
|
:param url: 数据下载链接
|
23
23
|
:param fn: 保存位置,会从url智能提取文件名
|
24
24
|
:param if_exists: 详见 File.write 参数解释
|
25
25
|
:para temp: 将文件写到临时文件夹
|
26
26
|
:return:
|
27
|
+
|
28
|
+
>> download_file(image_url) # 保存在当前工作目录下
|
29
|
+
D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg
|
30
|
+
>> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png") # 指定路径
|
31
|
+
D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png
|
32
|
+
>> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024") # 暂不支持目录
|
33
|
+
ValueError: 不能用目录初始化一个File对象 D:\home\chenkunze\slns\xlproject\xlsln\ckz2023
|
27
34
|
"""
|
28
35
|
if not fn: fn = url.split('/')[-1]
|
29
36
|
root = Dir.TEMP if temp else None
|
@@ -1,9 +1,14 @@
|
|
1
|
+
import os
|
1
2
|
from json import dumps as jsonDumps
|
2
3
|
from json import loads as jsonLoads
|
3
4
|
from pathlib import Path
|
4
5
|
from typing import List, Literal
|
6
|
+
import base64
|
7
|
+
|
5
8
|
from openai import OpenAI, AsyncOpenAI
|
6
9
|
|
10
|
+
from pyxllib.file.specialist import download_file
|
11
|
+
|
7
12
|
|
8
13
|
class AKPool:
|
9
14
|
""" 轮询获取api_key """
|
@@ -106,24 +111,35 @@ class Chat:
|
|
106
111
|
"""
|
107
112
|
|
108
113
|
recently_request_data: dict # 最近一次请求所用的参数
|
114
|
+
default_api_key = None
|
115
|
+
default_base_url = "https://console.chatdata.online/v1"
|
109
116
|
|
110
117
|
def __init__(self,
|
111
118
|
# kwargs
|
112
|
-
api_key: str|AKPool,
|
119
|
+
api_key: str | AKPool = None,
|
113
120
|
base_url: str = None, # base_url 参数用于修改基础URL
|
114
121
|
timeout=None,
|
115
122
|
max_retries=None,
|
116
123
|
http_client=None,
|
117
124
|
# request_kwargs
|
118
|
-
model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview",
|
119
|
-
|
125
|
+
model: Literal["gpt-4-1106-preview", "gpt-4-vision-preview",
|
126
|
+
"gpt-4", "gpt-4-0314", "gpt-4-0613",
|
127
|
+
"gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-0613", "gpt-3.5-turbo",
|
128
|
+
"gpt-4o", "gpt-4-turbo"] = "gpt-3.5-turbo",
|
120
129
|
# Chat
|
121
|
-
msg_max_count: int=None,
|
130
|
+
msg_max_count: int = None,
|
122
131
|
# kwargs
|
123
132
|
**kwargs,
|
124
133
|
):
|
134
|
+
"""
|
135
|
+
|
136
|
+
:param kwargs: 主要是供OpenAI初始化时使用的参数
|
137
|
+
|
138
|
+
"""
|
139
|
+
api_key = api_key or self.default_api_key or os.environ.get("OPENAI_API_KEY")
|
140
|
+
|
125
141
|
api_base = kwargs.pop('api_base', None)
|
126
|
-
base_url = base_url or api_base
|
142
|
+
base_url = base_url or api_base or self.default_base_url or os.environ.get("OPENAI_BASE_URL")
|
127
143
|
MsgMaxCount = kwargs.pop('MsgMaxCount', None)
|
128
144
|
msg_max_count = msg_max_count or MsgMaxCount
|
129
145
|
|
@@ -134,16 +150,22 @@ class Chat:
|
|
134
150
|
|
135
151
|
self.reset_api_key(api_key)
|
136
152
|
self._kwargs = kwargs
|
137
|
-
self._request_kwargs = {'model':model}
|
153
|
+
self._request_kwargs = {'model': model}
|
138
154
|
self._messages = Temque(maxlen=msg_max_count)
|
139
155
|
|
140
|
-
def
|
156
|
+
def __1_原作者提供功能(self):
|
157
|
+
pass
|
158
|
+
|
159
|
+
def reset_api_key(self, api_key: str | AKPool):
|
141
160
|
if isinstance(api_key, AKPool):
|
142
161
|
self._akpool = api_key
|
143
162
|
else:
|
144
163
|
self._akpool = AKPool([api_key])
|
145
164
|
|
146
|
-
def request(self, text: str=None, **kwargs):
|
165
|
+
def request(self, text: str = None, **kwargs):
|
166
|
+
"""
|
167
|
+
:param kwargs: 支持本次请求的参数覆盖全局 self._request_kwargs 的参数
|
168
|
+
"""
|
147
169
|
messages = [{"role": "user", "content": text}]
|
148
170
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
149
171
|
assert messages
|
@@ -160,7 +182,7 @@ class Chat:
|
|
160
182
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
161
183
|
return answer
|
162
184
|
|
163
|
-
def stream_request(self, text: str=None, **kwargs):
|
185
|
+
def stream_request(self, text: str = None, **kwargs):
|
164
186
|
messages = [{"role": "user", "content": text}]
|
165
187
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
166
188
|
assert messages
|
@@ -180,7 +202,7 @@ class Chat:
|
|
180
202
|
yield content
|
181
203
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
182
204
|
|
183
|
-
async def async_request(self, text: str=None, **kwargs):
|
205
|
+
async def async_request(self, text: str = None, **kwargs):
|
184
206
|
messages = [{"role": "user", "content": text}]
|
185
207
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
186
208
|
assert messages
|
@@ -197,7 +219,7 @@ class Chat:
|
|
197
219
|
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
198
220
|
return answer
|
199
221
|
|
200
|
-
async def async_stream_request(self, text: str=None, **kwargs):
|
222
|
+
async def async_stream_request(self, text: str = None, **kwargs):
|
201
223
|
messages = [{"role": "user", "content": text}]
|
202
224
|
messages += (kwargs.pop('messages', None) or []) # 兼容官方包[openai]用户, 使其代码可以无缝切换到[openai2]
|
203
225
|
assert messages
|
@@ -221,7 +243,7 @@ class Chat:
|
|
221
243
|
'''
|
222
244
|
回滚对话
|
223
245
|
'''
|
224
|
-
self._messages.core[-2 * n
|
246
|
+
self._messages.core[-2 * n:] = []
|
225
247
|
for x in self._messages.core[-2:]:
|
226
248
|
x = x["obj"]
|
227
249
|
print(f"[{x['role']}]:{x['content']}")
|
@@ -241,7 +263,7 @@ class Chat:
|
|
241
263
|
def fetch_messages(self):
|
242
264
|
return list(self._messages)
|
243
265
|
|
244
|
-
def add_dialogs(self, *ms: dict|system_msg|user_msg|assistant_msg):
|
266
|
+
def add_dialogs(self, *ms: dict | system_msg | user_msg | assistant_msg):
|
245
267
|
'''
|
246
268
|
添加历史对话
|
247
269
|
'''
|
@@ -274,4 +296,160 @@ class Chat:
|
|
274
296
|
""" 载入存档 """
|
275
297
|
jt = Path(fpath).read_text(encoding="utf8")
|
276
298
|
self._messages.add_many(*jsonLoads(jt))
|
277
|
-
return True
|
299
|
+
return True
|
300
|
+
|
301
|
+
def __2_扩展功能(self):
|
302
|
+
pass
|
303
|
+
|
304
|
+
def add_message(self, message):
|
305
|
+
""" 添加单条历史消息记录 """
|
306
|
+
self._messages.add_many(message)
|
307
|
+
|
308
|
+
def add_messages(self, messages: list[dict]):
|
309
|
+
""" 添加多条历史消息记录 """
|
310
|
+
self._messages.add_many(*messages)
|
311
|
+
|
312
|
+
def parse_cont_to_conts(self, in_cont) -> list[dict]:
|
313
|
+
""" 自定义的一套内容设置格式,用来简化openai源生的配置逻辑
|
314
|
+
|
315
|
+
:return: 注意虽然看似输入是一个cont,实际可能解析出多个conts,所以返回的是list类型
|
316
|
+
"""
|
317
|
+
|
318
|
+
def encode_image(image_path):
|
319
|
+
""" 读取本地图片文件 """
|
320
|
+
with open(image_path, "rb") as image_file:
|
321
|
+
return base64.b64encode(image_file.read()).decode('utf-8')
|
322
|
+
|
323
|
+
def parse_image_file(image_file):
|
324
|
+
suffix = Path(image_file).suffix[1:].lower()
|
325
|
+
if suffix == 'jpg':
|
326
|
+
suffix = 'jpeg'
|
327
|
+
base64_image = encode_image(image_file)
|
328
|
+
image_url = {'url': f"data:image/{suffix};base64,{base64_image}"}
|
329
|
+
return image_url
|
330
|
+
|
331
|
+
if isinstance(in_cont, str):
|
332
|
+
return [{"type": "text", "text": in_cont}]
|
333
|
+
|
334
|
+
if isinstance(in_cont, dict):
|
335
|
+
if 'image_url' in in_cont and isinstance(in_cont['image_url'], str):
|
336
|
+
url = in_cont['image_url']
|
337
|
+
return [{"type": "image_url", "image_url": {'url': url}}]
|
338
|
+
if 'image_file' in in_cont:
|
339
|
+
image_url = parse_image_file(in_cont['image_file'])
|
340
|
+
in_cont.pop('image_file')
|
341
|
+
if in_cont:
|
342
|
+
image_url.update(in_cont)
|
343
|
+
return [{"type": "image_url", "image_url": image_url}]
|
344
|
+
|
345
|
+
if 'image_urls' in in_cont:
|
346
|
+
return [{"type": "image_url", "image_url": {'url': x}} for x in in_cont['image_urls']]
|
347
|
+
if 'image_files' in in_cont:
|
348
|
+
return [{"type": "image_url", "image_url": parse_image_file(x)} for x in in_cont['image_files']]
|
349
|
+
|
350
|
+
return [in_cont]
|
351
|
+
else:
|
352
|
+
raise ValueError
|
353
|
+
|
354
|
+
def parse_conts_to_message(self, conts, role='user'):
|
355
|
+
""" 可以用一种简化的格式,来配置用户要提问的信息内容
|
356
|
+
|
357
|
+
:param conts:
|
358
|
+
str, 单条文本提问
|
359
|
+
list,
|
360
|
+
类似这样的数据,可以完全兼容openai的格式
|
361
|
+
[
|
362
|
+
{"type": "text", "text": "What’s in this image?"},
|
363
|
+
{
|
364
|
+
"type": "image_url",
|
365
|
+
"image_url": {
|
366
|
+
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
|
367
|
+
},
|
368
|
+
},
|
369
|
+
]
|
370
|
+
也可以简化:用我这里自定义的简化格式
|
371
|
+
'text' 文本格式直接输入
|
372
|
+
{'image_url': 'https://...'}
|
373
|
+
{'image_file': 'path/to/file'}
|
374
|
+
"""
|
375
|
+
message = {"role": role}
|
376
|
+
|
377
|
+
if isinstance(conts, str):
|
378
|
+
message["content"] = conts
|
379
|
+
else:
|
380
|
+
conts = conts if isinstance(conts, (list, tuple)) else [conts]
|
381
|
+
message["content"] = []
|
382
|
+
for x in conts:
|
383
|
+
message["content"] += self.parse_cont_to_conts(x)
|
384
|
+
|
385
|
+
return message
|
386
|
+
|
387
|
+
def add_message_from_conts(self, conts, role='user'):
|
388
|
+
""" 添加content版本的message """
|
389
|
+
message = self.parse_conts_to_message(conts, role=role)
|
390
|
+
self._messages.add_many(message)
|
391
|
+
|
392
|
+
def query(self, conts=None, response_json=None, **kwargs):
|
393
|
+
""" 提交一个请求,并获得回复结果
|
394
|
+
|
395
|
+
:param conts:
|
396
|
+
None, content可以不输入,这种一般是外部已经提前配置好各种add_message,这里只要直接请求即可
|
397
|
+
str, 常规的文本提问使用
|
398
|
+
list, 一般是搭配图片的提问使用
|
399
|
+
:param response_json: 是否返回json格式
|
400
|
+
注意就算这个参数为True,提示里也要显示说明需要json格式。官方示例是在初始的role=system中配置
|
401
|
+
"""
|
402
|
+
# 1 total_messages
|
403
|
+
if conts:
|
404
|
+
messages = [self.parse_conts_to_message(conts)]
|
405
|
+
messages += (kwargs.pop('messages', None) or [])
|
406
|
+
else:
|
407
|
+
messages = []
|
408
|
+
total_messages = list(self._messages + messages)
|
409
|
+
assert total_messages
|
410
|
+
|
411
|
+
if response_json:
|
412
|
+
kwargs['response_format'] = {"type": "json_object"}
|
413
|
+
|
414
|
+
# 2 请求结果
|
415
|
+
self.recently_request_data = {
|
416
|
+
'api_key': (api_key := self._akpool.fetch_key()),
|
417
|
+
}
|
418
|
+
completion = OpenAI(api_key=api_key, **self._kwargs).chat.completions.create(**{
|
419
|
+
**self._request_kwargs, # 全局参数
|
420
|
+
**kwargs, # 单次请求的参数覆盖全局参数
|
421
|
+
"messages": total_messages,
|
422
|
+
"stream": False,
|
423
|
+
})
|
424
|
+
answer: str = completion.choices[0].message.content
|
425
|
+
self._messages.add_many(*messages, {"role": "assistant", "content": answer})
|
426
|
+
return answer
|
427
|
+
|
428
|
+
def query_image(self, prompt,
|
429
|
+
size='1024x1024', model='dall-e-3', quality='standard', n=1,
|
430
|
+
save_file=None,
|
431
|
+
**kwargs):
|
432
|
+
""" 生成图片,注意,此功能不支持引用旧历史记录,而是一个独立的记录来请求model获得一张图
|
433
|
+
|
434
|
+
:param save_file: 指定保存到本地某个位置
|
435
|
+
"""
|
436
|
+
self.recently_request_data = {
|
437
|
+
'api_key': (api_key := self._akpool.fetch_key()),
|
438
|
+
}
|
439
|
+
client = OpenAI(api_key=api_key, **self._kwargs)
|
440
|
+
response = client.images.generate(
|
441
|
+
model=model,
|
442
|
+
prompt=prompt,
|
443
|
+
size=size,
|
444
|
+
quality=quality,
|
445
|
+
n=n,
|
446
|
+
**kwargs
|
447
|
+
)
|
448
|
+
image_url = response.data[0].url
|
449
|
+
self.add_message_from_conts(prompt, 'user')
|
450
|
+
self.add_message_from_conts([{'image_url': image_url}], 'assistant')
|
451
|
+
|
452
|
+
if save_file:
|
453
|
+
download_file(image_url, save_file)
|
454
|
+
|
455
|
+
return image_url
|
@@ -45,7 +45,7 @@ _dir = Path(__file__).parent
|
|
45
45
|
|
46
46
|
setup(
|
47
47
|
name='pyxllib', # pip 安装时用的名字
|
48
|
-
version='0.3.
|
48
|
+
version='0.3.122', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
49
49
|
author='code4101',
|
50
50
|
author_email='877362867@qq.com',
|
51
51
|
url='https://github.com/XLPRUtils/pyxllib',
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|