diff --git a/deliverables/model-curve-selector.png b/deliverables/model-curve-selector.png new file mode 100644 index 0000000..88dfdfa Binary files /dev/null and b/deliverables/model-curve-selector.png differ diff --git a/experiments/livekit-v1-mini/.gitignore b/experiments/livekit-v1-mini/.gitignore new file mode 100644 index 0000000..5a27dc3 --- /dev/null +++ b/experiments/livekit-v1-mini/.gitignore @@ -0,0 +1,3 @@ +.venv/ +__pycache__/ +cache/ diff --git a/experiments/livekit-v1-mini/.python-version b/experiments/livekit-v1-mini/.python-version new file mode 100644 index 0000000..2c07333 --- /dev/null +++ b/experiments/livekit-v1-mini/.python-version @@ -0,0 +1 @@ +3.11 diff --git a/experiments/livekit-v1-mini/README.md b/experiments/livekit-v1-mini/README.md new file mode 100644 index 0000000..b5cd9bf --- /dev/null +++ b/experiments/livekit-v1-mini/README.md @@ -0,0 +1,42 @@ +# LiveKit Turn Detector v1-mini 韩泰评估 + +执行机器:本机 Apple M4 Mac mini,CPU,16 GB。Python 3.11.15;独立 uv 环境。官方 PyPI `livekit-local-inference==0.2.7`(内嵌模型)与 `livekit-agents==1.8.8`,完整依赖见 uv.lock。 + +## 复现 + +从项目根目录执行: + +```bash +cd experiments/livekit-v1-mini +uv sync --locked +uv run --locked python run_experiment.py smoke +uv run --locked python run_experiment.py all +``` + +`smoke` 使用种子 42 生成固定输入,重复推理必须一致,输出 `WITNESS`;`all` 生成 44 点 predictions.csv、summary.json 和六通录音的 score-timeline.json。`evaluate` 只跑标注点。所有输出位于 results,不修改人工标注。 + +## 输入与评分 + +- 只用用户左声道 channel 0;先裁取判断时间之前的 int16 音频,除以 32768,再用 scipy resample_poly 重采样到 16 kHz,取最近 19200 样本(1.2 秒),乘以 32767 转为 int16。短窗口由原生模型左补零,不使用未来音频或人工转写。 +- 使用 Agents `_LocalTransport._predict` 入口,严格锁定 SDK 版本;原生异常或框架默认回退分数会导致实验失败,不计成真实预测。 +- 每 200 ms 及每个原标注精确时刻计算原始分数;不加 VAD 停止门槛、静音等待、超时放行、会话结束信号或前一预测状态。 +- 默认阈值为锁定 SDK 的中文阈值 0.355,同时报告 0.5,未在本批数据上搜索最优阈值。 +- 每个判断点重复推理并验证分数一致;将该点之后的音频改为零,验证输入不变。该方法的前缀重采样与官方 benchmark 的 librosa 或在线重采样存在实现差异,因此不称为完整官方在线策略复现。 +- 单个评估请求依次执行。脚本请求 EOT_PARALLELISM=1;当前原生库实际报告 parallelism=2,记录于结果,不声称原生单线程。OMP/MKL/OPENBLAS 请求线程数均为 1。 + +## 环境与模型校验 + +macOS arm64 CPython 3.11 官方 wheel SHA256:`fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622`。 +原生二进制 SHA256:`7afa5899367957328c9916153b5d672392e191c0bfadf1f49325af2e4f3055b4`。模型嵌于二进制,未暴露独立权重文件,不虚构独立权重哈希。结果还记录 Python、依赖、脚本、标注及各录音哈希。环境规范见 env-spec.json。 + +## 限制与许可 + +这 44 个手选判断点仅作探索性对比,不是独立大样本泛化评估。点级误接话率不等于整段对话的抢话率,用户声道也可能存在机器人回声。模型分数和 SDK 完整终点策略须分开讨论。 + +当前 wheel 附带的 MODEL_LICENSE.md 要求模型配合 LiveKit Agents 使用,并限制用其输出改进其他模型;本实验通过 Agents 官方本地传输入口执行。网页仅查看分数;不将其用作其他模型的训练标签。不要将该模型描述为 Apache-2.0 权重。 + +官方参考: +- https://docs.livekit.io/agents/logic/turns/turn-detector/ +- https://github.com/livekit/eot-bench/blob/main/eot_harness/livekit_turn_detector_mini_adapter.py + +结果解读见 results/summary.json 和 results/评估说明.md。 diff --git a/experiments/livekit-v1-mini/env-spec.json b/experiments/livekit-v1-mini/env-spec.json new file mode 100644 index 0000000..2f44ecc --- /dev/null +++ b/experiments/livekit-v1-mini/env-spec.json @@ -0,0 +1,34 @@ +{ + "base": "macOS arm64 CPU + Python 3.11", + "system_pkgs": [], + "pip_phases": [ + [ + "livekit-local-inference==0.2.7", + "numpy==2.2.6", + "soundfile==0.13.1", + "scipy==1.15.3", + "livekit-agents==1.8.8" + ] + ], + "env": { + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1", + "EOT_PARALLELISM": "1" + }, + "resource": { + "machine": "local Mac mini M4", + "gpu": false, + "model_workers": 1 + }, + "weight_dirs": { + "eot": { + "source": "official PyPI livekit-local-inference wheel", + "gated": false + } + }, + "smoke": { + "cmd": "uv run --locked python run_experiment.py smoke", + "expect": "WITNESS" + } +} diff --git a/experiments/livekit-v1-mini/pyproject.toml b/experiments/livekit-v1-mini/pyproject.toml new file mode 100644 index 0000000..5cc16ce --- /dev/null +++ b/experiments/livekit-v1-mini/pyproject.toml @@ -0,0 +1,5 @@ +[project] +name = "livekit-v1-mini-evaluation" +version = "0.1.0" +requires-python = ">=3.11,<3.12" +dependencies = ["livekit-local-inference==0.2.7", "livekit-agents==1.8.8", "numpy==2.2.6", "soundfile==0.13.1", "scipy==1.15.3"] diff --git a/experiments/livekit-v1-mini/results/predictions.csv b/experiments/livekit-v1-mini/results/predictions.csv new file mode 100644 index 0000000..36186ea --- /dev/null +++ b/experiments/livekit-v1-mini/results/predictions.csv @@ -0,0 +1,45 @@ +call_id,decision_ms,can_reply_now,probability,prediction,threshold,input_samples,available_end_ms,preparation_ms,inference_ms +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,21780,1,0.4333016276359558,1,0.355,19200,21780.0,2.7287499979138374,5.575624294579029 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,29860,1,0.6237799525260925,1,0.355,19200,29860.0,3.7509994581341743,6.744083017110825 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,48125,0,0.45254063606262207,1,0.355,19200,48125.0,5.758457817137241,7.209542207419872 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,64000,1,0.2848171889781952,0,0.355,19200,64000.0,7.960332557559013,6.5420838072896 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,76672,0,0.45449426770210266,1,0.355,19200,76672.0,9.708958677947521,7.211333140730858 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,88482,1,0.45394039154052734,1,0.355,19200,88482.0,11.292457580566406,5.600791424512863 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,22007,1,0.5854928493499756,1,0.355,19200,22007.0,2.911125309765339,8.196083828806877 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,31842,1,0.5878404378890991,1,0.355,19200,31842.0,4.0603335946798325,5.483958870172501 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,48536,0,0.2537097632884979,0,0.355,19200,48536.0,5.920499563217163,5.44358417391777 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,52348,1,0.557003378868103,1,0.355,19200,52348.0,6.229749880731106,7.242332212626934 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,65298,0,0.6249343752861023,1,0.355,19200,65298.0,7.885375060141087,6.663625128567219 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,67943,0,0.6181272268295288,1,0.355,19200,67943.0,8.195959031581879,7.16041773557663 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,70430,0,0.2462766468524933,0,0.355,19200,70430.0,8.394083939492702,6.635541096329689 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,82941,1,0.5786489844322205,1,0.355,19200,82941.0,10.166166350245476,6.077749654650688 +872a1e67-873a-4c49-a598-b38a670afcad,17153,1,0.5009272694587708,1,0.355,19200,17153.0,2.16870941221714,6.159832701086998 +872a1e67-873a-4c49-a598-b38a670afcad,24846,1,0.668940544128418,1,0.355,19200,24846.0,3.041500225663185,5.271041765809059 +872a1e67-873a-4c49-a598-b38a670afcad,33471,1,0.6602025628089905,1,0.355,19200,33471.0,4.0121255442500114,6.265167146921158 +872a1e67-873a-4c49-a598-b38a670afcad,44810,0,0.16742786765098572,0,0.355,19200,44810.0,5.381416529417038,7.350374944508076 +872a1e67-873a-4c49-a598-b38a670afcad,45581,0,0.3364622890949249,0,0.355,19200,45581.0,5.505583249032497,5.54287526756525 +872a1e67-873a-4c49-a598-b38a670afcad,47187,0,0.3902971148490906,1,0.355,19200,47187.0,5.704415962100029,6.308957934379578 +872a1e67-873a-4c49-a598-b38a670afcad,49500,1,0.6626229882240295,1,0.355,19200,49500.0,5.960375070571899,6.991500034928322 +872a1e67-873a-4c49-a598-b38a670afcad,52326,0,0.2527875006198883,0,0.355,19200,52326.0,6.491790525615215,5.456083454191685 +872a1e67-873a-4c49-a598-b38a670afcad,54318,1,0.14241522550582886,0,0.355,19200,54318.0,6.935875862836838,5.50837442278862 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,18027,1,0.6745697259902954,1,0.355,19200,18027.0,2.313540317118168,7.023083046078682 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,24768,1,0.6706604957580566,1,0.355,19200,24768.0,3.0613746494054794,5.433417856693268 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,41219,0,0.5743900537490845,1,0.355,19200,41219.0,5.006374791264534,6.470665335655212 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,51080,0,0.47520971298217773,1,0.355,19200,51080.0,6.177124567329884,7.069415412843227 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,68313,0,0.6697428226470947,1,0.355,19200,68313.0,8.281541988253593,7.906915619969368 +cb3238dc-3946-42a5-aad8-9b9a54226363,13540,1,0.5981559753417969,1,0.355,19200,13540.0,1.6896668821573257,5.790833383798599 +cb3238dc-3946-42a5-aad8-9b9a54226363,19620,1,0.651459813117981,1,0.355,19200,19620.0,2.6979586109519005,5.748957395553589 +cb3238dc-3946-42a5-aad8-9b9a54226363,27520,1,0.6795960068702698,1,0.355,19200,27520.0,3.496958874166012,5.925584584474564 +cb3238dc-3946-42a5-aad8-9b9a54226363,41207,0,0.6371078491210938,1,0.355,19200,41207.0,5.00095821917057,5.397791974246502 +cb3238dc-3946-42a5-aad8-9b9a54226363,49204,0,0.6755564212799072,1,0.355,19200,49204.0,6.174792535603046,5.501791834831238 +cb3238dc-3946-42a5-aad8-9b9a54226363,58424,0,0.6663632392883301,1,0.355,19200,58424.0,7.433624938130379,5.379541777074337 +cb3238dc-3946-42a5-aad8-9b9a54226363,60790,0,0.25056231021881104,0,0.355,19200,60790.0,7.39095825701952,6.392749957740307 +cb3238dc-3946-42a5-aad8-9b9a54226363,70745,0,0.5162182450294495,1,0.355,19200,70745.0,8.840749971568584,5.87591715157032 +cb3238dc-3946-42a5-aad8-9b9a54226363,73640,0,0.387985497713089,1,0.355,19200,73640.0,8.819833397865295,5.357082933187485 +e304f740-85d4-427e-9fd6-c5474e9cd737,11531,1,0.6718385219573975,1,0.355,19200,11531.0,1.627875491976738,5.708709359169006 +e304f740-85d4-427e-9fd6-c5474e9cd737,18842,1,0.5978389978408813,1,0.355,19200,18842.0,2.3520831018686295,6.592665798962116 +e304f740-85d4-427e-9fd6-c5474e9cd737,29619,1,0.6137039065361023,1,0.355,19200,29619.0,3.6592911928892136,6.604207679629326 +e304f740-85d4-427e-9fd6-c5474e9cd737,40701,0,0.6689900755882263,1,0.355,19200,40701.0,4.9554575234651566,5.339334718883038 +e304f740-85d4-427e-9fd6-c5474e9cd737,54600,1,0.6682158708572388,1,0.355,19200,54600.0,6.610791198909283,6.827791221439838 +e304f740-85d4-427e-9fd6-c5474e9cd737,62828,0,0.7292628288269043,1,0.355,19200,62828.0,7.489999756217003,5.283292382955551 +e304f740-85d4-427e-9fd6-c5474e9cd737,65819,0,0.6575707197189331,1,0.355,19200,65819.0,8.478624746203423,5.405125208199024 diff --git a/experiments/livekit-v1-mini/results/run.log b/experiments/livekit-v1-mini/results/run.log new file mode 100644 index 0000000..a3d5f94 --- /dev/null +++ b/experiments/livekit-v1-mini/results/run.log @@ -0,0 +1,8 @@ +WITNESS CPU seeded probability=0.580093086, repeat=0.580093086, parallelism=2 +2c83253a: 489 scores, 6 checkpoints; repeat/future-suffix checks passed +40ae686c: 441 scores, 8 checkpoints; repeat/future-suffix checks passed +872a1e67: 379 scores, 9 checkpoints; repeat/future-suffix checks passed +a266b9ef: 421 scores, 5 checkpoints; repeat/future-suffix checks passed +cb3238dc: 478 scores, 9 checkpoints; repeat/future-suffix checks passed +e304f740: 365 scores, 7 checkpoints; repeat/future-suffix checks passed +{"threshold": 0.355, "n": 44, "tn": 6, "fp": 16, "fn": 2, "tp": 20, "accuracy": 0.5909090909090909, "false_reply_rate": 0.7272727272727273, "false_hold_rate": 0.09090909090909091} diff --git a/experiments/livekit-v1-mini/results/score-timeline.json b/experiments/livekit-v1-mini/results/score-timeline.json new file mode 100644 index 0000000..5eb733c --- /dev/null +++ b/experiments/livekit-v1-mini/results/score-timeline.json @@ -0,0 +1 @@ +{"schema_version":1,"model":"livekit_mini","name":"LiveKit v1-mini","score":"P(turn ended)","sample_interval_ms":200,"method":"Agents 1.8.8 local transport, native v1-mini 0.2.7. User channel 0; received int16 prefix /32768 cropped BEFORE scipy resample_poly to 16kHz; last 19200 samples converted with *32767. Native left-padding below 1.2s. No ASR, VAD gate, silence timeout or fallback scores. EOT_PARALLELISM=1. Prefix resampling differs from official librosa and online streaming resampling; not a full service replay.","provenance":{"machine":"macOS-26.4.1-arm64-arm-64bit","hardware":"Apple M4 Mac mini CPU, 16 GB","python":"3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]","dependencies":{"livekit-local-inference":"0.2.7","livekit-agents":"1.8.8","numpy":"2.2.6","scipy":"1.15.3","soundfile":"0.13.1"},"native_binary_sha256":"7afa5899367957328c9916153b5d672392e191c0bfadf1f49325af2e4f3055b4","weight_identity":"Weights embedded in pinned official binary; separate hash not exposed","wheel_sha256":"fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622","native_parallelism":2,"script_sha256":"e05a0408fcce2a8194966bf594d7324e17cd8025d0b7eb06152e58eb9b46f892","annotation_sha256":"780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e"},"calls":[{"call_id":"2c83253a-7977-4e3c-a387-0aa1ea06fbe1","audio_path":"韩泰机器人抢话/音频/2c83253a-7977-4e3c-a387-0aa1ea06fbe1.mp3","audio_sha256":"2b8a67dc76b8975d287df42193647cf040229377537eadaaf3adc13358201fe1","duration_ms":96756.0,"points":[[200,0.2235982],[400,0.3619054],[600,0.3255378],[800,0.5002298],[1000,0.582611],[1200,0.4002864],[1400,0.4559877],[1600,0.4540886],[1800,0.3445117],[2000,0.4403265],[2200,0.3996285],[2400,0.6346405],[2600,0.4515673],[2800,0.4611017],[3000,0.3256819],[3200,0.5109909],[3400,0.2176133],[3600,0.6563258],[3800,0.4301728],[4000,0.3435238],[4200,0.3356324],[4400,0.4105795],[4600,0.4036811],[4800,0.5363079],[5000,0.5459422],[5200,0.3490976],[5400,0.2490531],[5600,0.4572442],[5800,0.2877073],[6000,0.5948809],[6200,0.5608411],[6400,0.5149533],[6600,0.4442696],[6800,0.2031296],[7000,0.3672007],[7200,0.2954805],[7400,0.4371322],[7600,0.3032975],[7800,0.4588709],[8000,0.5073988],[8200,0.5766839],[8400,0.5086188],[8600,0.4455936],[8800,0.2365779],[9000,0.4795009],[9200,0.3141556],[9400,0.4085123],[9600,0.576403],[9800,0.5371137],[10000,0.4382354],[10200,0.3157116],[10400,0.4369439],[10600,0.431067],[10800,0.5941313],[11000,0.3802963],[11200,0.3835695],[11400,0.6413913],[11600,0.5167849],[11800,0.5904599],[12000,0.6039565],[12200,0.6384582],[12400,0.5691289],[12600,0.5627446],[12800,0.5971325],[13000,0.6262063],[13200,0.644287],[13400,0.6139301],[13600,0.5757638],[13800,0.303287],[14000,0.5124707],[14200,0.4595549],[14400,0.4133767],[14600,0.1747525],[14800,0.2191782],[15000,0.1680073],[15200,0.2773064],[15400,0.1552895],[15600,0.3717227],[15800,0.4800493],[16000,0.6452112],[16200,0.6726964],[16400,0.5873436],[16600,0.3753871],[16800,0.1830871],[17000,0.2410607],[17200,0.2218775],[17400,0.3377064],[17600,0.2826706],[17800,0.2934706],[18000,0.3222656],[18200,0.4823293],[18400,0.3987726],[18600,0.6028099],[18800,0.6184326],[19000,0.3210416],[19200,0.2359766],[19400,0.2666216],[19600,0.4275537],[19800,0.457672],[20000,0.1429288],[20200,0.2335202],[20400,0.1772418],[20600,0.2503709],[20800,0.2737315],[21000,0.1885992],[21200,0.2859055],[21400,0.3243699],[21600,0.5645803],[21780,0.4333016],[21800,0.3445158],[22000,0.391331],[22200,0.4184488],[22400,0.5708308],[22600,0.5692478],[22800,0.5749583],[23000,0.6428646],[23200,0.3869931],[23400,0.4830225],[23600,0.5628171],[23800,0.4750149],[24000,0.6143681],[24200,0.3984658],[24400,0.3821817],[24600,0.4789842],[24800,0.4124558],[25000,0.4713869],[25200,0.4330148],[25400,0.2303576],[25600,0.5176147],[25800,0.4552414],[26000,0.2977988],[26200,0.2933397],[26400,0.445555],[26600,0.3838012],[26800,0.352349],[27000,0.3209819],[27200,0.218996],[27400,0.2177638],[27600,0.4482927],[27800,0.1454109],[28000,0.2233586],[28200,0.2102183],[28400,0.4675238],[28600,0.6152759],[28800,0.4360306],[29000,0.4298902],[29200,0.5460334],[29400,0.4275054],[29600,0.5109943],[29800,0.6160262],[29860,0.62378],[30000,0.6134195],[30200,0.6039374],[30400,0.3960275],[30600,0.5161846],[30800,0.593226],[31000,0.5199007],[31200,0.5896395],[31400,0.608929],[31600,0.5046592],[31800,0.4826631],[32000,0.4365251],[32200,0.5855871],[32400,0.4710512],[32600,0.3852984],[32800,0.5238116],[33000,0.5135575],[33200,0.5426098],[33400,0.5513224],[33600,0.5156599],[33800,0.5792177],[34000,0.4954221],[34200,0.5900164],[34400,0.6142476],[34600,0.6250421],[34800,0.4389662],[35000,0.6185206],[35200,0.6579106],[35400,0.399101],[35600,0.5233539],[35800,0.4474708],[36000,0.6313636],[36200,0.3228168],[36400,0.1822979],[36600,0.6050102],[36800,0.5904109],[37000,0.5115065],[37200,0.3284101],[37400,0.4715205],[37600,0.5062781],[37800,0.5900115],[38000,0.6471626],[38200,0.5703461],[38400,0.5064511],[38600,0.3467079],[38800,0.4574624],[39000,0.4893559],[39200,0.426216],[39400,0.611388],[39600,0.5746275],[39800,0.5563695],[40000,0.6434659],[40200,0.6879925],[40400,0.5535696],[40600,0.3885225],[40800,0.336311],[41000,0.2700289],[41200,0.2986663],[41400,0.2328457],[41600,0.2224569],[41800,0.254436],[42000,0.2139341],[42200,0.1451887],[42400,0.0895045],[42600,0.1356037],[42800,0.1373181],[43000,0.4226125],[43200,0.2444903],[43400,0.2311099],[43600,0.1601258],[43800,0.4052984],[44000,0.2656817],[44200,0.403255],[44400,0.4489134],[44600,0.4340261],[44800,0.1449706],[45000,0.4128588],[45200,0.2572621],[45400,0.4549723],[45600,0.2150561],[45800,0.3164006],[46000,0.3196566],[46200,0.3527798],[46400,0.2500967],[46600,0.231967],[46800,0.2205305],[47000,0.4454249],[47200,0.1826651],[47400,0.2308959],[47600,0.1747537],[47800,0.1999921],[48000,0.241616],[48125,0.4525406],[48200,0.3030299],[48400,0.3683345],[48600,0.3955402],[48800,0.2366853],[49000,0.3222278],[49200,0.528552],[49400,0.2216066],[49600,0.1344205],[49800,0.2236769],[50000,0.2032067],[50200,0.5108795],[50400,0.4504409],[50600,0.2736948],[50800,0.3982988],[51000,0.5606124],[51200,0.3688029],[51400,0.3478299],[51600,0.451197],[51800,0.1546566],[52000,0.2758624],[52200,0.4121409],[52400,0.3969518],[52600,0.576775],[52800,0.492899],[53000,0.5762445],[53200,0.3773366],[53400,0.1582914],[53600,0.3544954],[53800,0.3575255],[54000,0.4341168],[54200,0.3849373],[54400,0.3138655],[54600,0.5790293],[54800,0.2358804],[55000,0.3809496],[55200,0.2980804],[55400,0.2933981],[55600,0.5732367],[55800,0.4972345],[56000,0.1690392],[56200,0.438843],[56400,0.2889619],[56600,0.3739973],[56800,0.256694],[57000,0.1528612],[57200,0.1182809],[57400,0.1217729],[57600,0.2191802],[57800,0.3967536],[58000,0.4459619],[58200,0.2820946],[58400,0.1761064],[58600,0.4418179],[58800,0.5089585],[59000,0.5201547],[59200,0.4230507],[59400,0.1708921],[59600,0.0879285],[59800,0.121861],[60000,0.1688314],[60200,0.371834],[60400,0.5587339],[60600,0.302538],[60800,0.2233499],[61000,0.2135617],[61200,0.2991843],[61400,0.590482],[61600,0.3731226],[61800,0.4725356],[62000,0.1729712],[62200,0.1387751],[62400,0.1519402],[62600,0.2226593],[62800,0.2209399],[63000,0.1656245],[63200,0.1728966],[63400,0.135734],[63600,0.2127808],[63800,0.267183],[64000,0.2848172],[64200,0.3860657],[64400,0.4309156],[64600,0.4130205],[64800,0.2954818],[65000,0.2036988],[65200,0.3934025],[65400,0.3461569],[65600,0.5177691],[65800,0.4682705],[66000,0.5064861],[66200,0.2219233],[66400,0.1125751],[66600,0.2543376],[66800,0.5095677],[67000,0.4959586],[67200,0.3210238],[67400,0.3916033],[67600,0.5314732],[67800,0.3789499],[68000,0.5087413],[68200,0.58927],[68400,0.4227812],[68600,0.5821661],[68800,0.2567615],[69000,0.4663463],[69200,0.3764577],[69400,0.2527169],[69600,0.3783614],[69800,0.19104],[70000,0.1430268],[70200,0.2653824],[70400,0.5390744],[70600,0.3909464],[70800,0.2628496],[71000,0.5129507],[71200,0.5142157],[71400,0.3353091],[71600,0.4453583],[71800,0.4131025],[72000,0.2322831],[72200,0.449037],[72400,0.4084243],[72600,0.2685738],[72800,0.2253867],[73000,0.2517849],[73200,0.3123562],[73400,0.261803],[73600,0.1608008],[73800,0.3084531],[74000,0.4363375],[74200,0.364107],[74400,0.1686947],[74600,0.13954],[74800,0.3787209],[75000,0.2622815],[75200,0.2887333],[75400,0.1212411],[75600,0.1618139],[75800,0.2192656],[76000,0.4909573],[76200,0.4947129],[76400,0.4846281],[76600,0.4370399],[76672,0.4544943],[76800,0.2543714],[77000,0.3444829],[77200,0.408074],[77400,0.4393314],[77600,0.3202759],[77800,0.2821018],[78000,0.4003778],[78200,0.569673],[78400,0.385736],[78600,0.1519821],[78800,0.421683],[79000,0.2789516],[79200,0.4082199],[79400,0.2068606],[79600,0.3079058],[79800,0.3113195],[80000,0.3437096],[80200,0.3097387],[80400,0.581544],[80600,0.5974729],[80800,0.6374552],[81000,0.4037724],[81200,0.2682858],[81400,0.2616374],[81600,0.2459764],[81800,0.5833942],[82000,0.5205008],[82200,0.4502882],[82400,0.4804687],[82600,0.5224146],[82800,0.478483],[83000,0.5843161],[83200,0.5351563],[83400,0.4789709],[83600,0.567974],[83800,0.5729786],[84000,0.5723868],[84200,0.4208129],[84400,0.5008876],[84600,0.3753355],[84800,0.3501166],[85000,0.5289028],[85200,0.5954012],[85400,0.3008509],[85600,0.2226435],[85800,0.507522],[86000,0.2762386],[86200,0.5294611],[86400,0.664909],[86600,0.3903433],[86800,0.3913406],[87000,0.2105788],[87200,0.1842064],[87400,0.2072948],[87600,0.4572594],[87800,0.18892],[88000,0.1281293],[88200,0.2793451],[88400,0.2911893],[88482,0.4539404],[88600,0.430606],[88800,0.2594882],[89000,0.1796218],[89200,0.1908973],[89400,0.3663202],[89600,0.6428976],[89800,0.6594055],[90000,0.6429606],[90200,0.6442835],[90400,0.6809551],[90600,0.6631812],[90800,0.6780615],[91000,0.6782365],[91200,0.6717992],[91400,0.674022],[91600,0.6582888],[91800,0.6676849],[92000,0.6507297],[92200,0.6482072],[92400,0.6382884],[92600,0.6590919],[92800,0.5878029],[93000,0.5487268],[93200,0.3113133],[93400,0.4502105],[93600,0.2078055],[93800,0.1452801],[94000,0.4039021],[94200,0.582219],[94400,0.3932704],[94600,0.4586569],[94800,0.5991338],[95000,0.5423787],[95200,0.5768522],[95400,0.5823858],[95600,0.6354143],[95800,0.6260651],[96000,0.304718],[96200,0.3804068],[96400,0.5774141],[96600,0.4484975],[96756,0.323683]],"checkpoints":[[21780,0.4333016],[29860,0.62378],[48125,0.4525406],[64000,0.2848172],[76672,0.4544943],[88482,0.4539404]]},{"call_id":"40ae686c-8196-4d7b-b7ad-3e12a427ebb6","audio_path":"韩泰机器人抢话/音频/40ae686c-8196-4d7b-b7ad-3e12a427ebb6.mp3","audio_sha256":"130be37286d48f7badca711a068fab19a2686bd83248a71c73c11ce77650d39d","duration_ms":86596.0,"points":[[200,0.1532782],[400,0.3179291],[600,0.4465848],[800,0.5634505],[1000,0.5703483],[1200,0.5327045],[1400,0.5924169],[1600,0.6458573],[1800,0.6296821],[2000,0.6090922],[2200,0.6453725],[2400,0.5829358],[2600,0.5464016],[2800,0.5634532],[3000,0.6042142],[3200,0.6789411],[3400,0.6372628],[3600,0.6282603],[3800,0.6414834],[4000,0.5864884],[4200,0.6237783],[4400,0.6136209],[4600,0.6223886],[4800,0.5999773],[5000,0.2895659],[5200,0.4349612],[5400,0.515898],[5600,0.5974658],[5800,0.5704134],[6000,0.4637819],[6200,0.52365],[6400,0.4073128],[6600,0.1747244],[6800,0.2361262],[7000,0.560916],[7200,0.6391856],[7400,0.3192931],[7600,0.3085735],[7800,0.4742599],[8000,0.4020182],[8200,0.2001354],[8400,0.3718331],[8600,0.590109],[8800,0.6337203],[9000,0.2628083],[9200,0.2116125],[9400,0.2590547],[9600,0.3264418],[9800,0.4098561],[10000,0.5583233],[10200,0.5838182],[10400,0.5576962],[10600,0.6475043],[10800,0.618843],[11000,0.4469714],[11200,0.3803614],[11400,0.520282],[11600,0.1075549],[11800,0.1185562],[12000,0.2044885],[12200,0.4169738],[12400,0.457316],[12600,0.559419],[12800,0.5812895],[13000,0.6327373],[13200,0.6798401],[13400,0.6610196],[13600,0.6527508],[13800,0.6404151],[14000,0.6493969],[14200,0.6331727],[14400,0.6296284],[14600,0.4161944],[14800,0.2668592],[15000,0.5990413],[15200,0.5141121],[15400,0.4943649],[15600,0.6297061],[15800,0.565859],[16000,0.4860208],[16200,0.5390123],[16400,0.7143059],[16600,0.6191631],[16800,0.6443863],[17000,0.6437977],[17200,0.6339867],[17400,0.5338326],[17600,0.6117135],[17800,0.5501913],[18000,0.5451295],[18200,0.5791318],[18400,0.5735463],[18600,0.5448967],[18800,0.5709698],[19000,0.5414586],[19200,0.5918669],[19400,0.3606133],[19600,0.2682075],[19800,0.4050916],[20000,0.1160599],[20200,0.1926299],[20400,0.5119388],[20600,0.350712],[20800,0.5515084],[21000,0.6312734],[21200,0.6108782],[21400,0.5892711],[21600,0.645224],[21800,0.6319894],[22000,0.6004034],[22007,0.5854928],[22200,0.5884009],[22400,0.6132883],[22600,0.6043184],[22800,0.6411481],[23000,0.5929239],[23200,0.5978092],[23400,0.6115702],[23600,0.5672217],[23800,0.5114695],[24000,0.5455869],[24200,0.6000807],[24400,0.589987],[24600,0.3613652],[24800,0.542944],[25000,0.6143396],[25200,0.644556],[25400,0.4352933],[25600,0.3564619],[25800,0.541786],[26000,0.601517],[26200,0.2946869],[26400,0.1460487],[26600,0.1805107],[26800,0.209261],[27000,0.3678418],[27200,0.5620386],[27400,0.6459382],[27600,0.6278567],[27800,0.5619598],[28000,0.587145],[28200,0.6094461],[28400,0.6087113],[28600,0.620531],[28800,0.6517044],[29000,0.5903718],[29200,0.4776599],[29400,0.3556603],[29600,0.3058784],[29800,0.1554077],[30000,0.1117033],[30200,0.1109697],[30400,0.1457645],[30600,0.4239835],[30800,0.5684116],[31000,0.6659928],[31200,0.6702101],[31400,0.6446026],[31600,0.6141629],[31800,0.5979969],[31842,0.5878404],[32000,0.5986095],[32200,0.5873423],[32400,0.6165651],[32600,0.6527374],[32800,0.6246563],[33000,0.4520597],[33200,0.5373758],[33400,0.6037071],[33600,0.5494534],[33800,0.6293897],[34000,0.587313],[34200,0.5942582],[34400,0.6409576],[34600,0.6152076],[34800,0.6360927],[35000,0.3683924],[35200,0.3504778],[35400,0.5340922],[35600,0.5572408],[35800,0.6210907],[36000,0.4885373],[36200,0.2602228],[36400,0.300869],[36600,0.552653],[36800,0.4131933],[37000,0.3731395],[37200,0.5971507],[37400,0.3719957],[37600,0.5778269],[37800,0.5464526],[38000,0.6399793],[38200,0.605817],[38400,0.6287735],[38600,0.5085824],[38800,0.5559551],[39000,0.6236648],[39200,0.6125761],[39400,0.6580084],[39600,0.6126323],[39800,0.4724153],[40000,0.1209593],[40200,0.1271708],[40400,0.1692469],[40600,0.1926698],[40800,0.2663013],[41000,0.5519193],[41200,0.5930668],[41400,0.5044567],[41600,0.5006934],[41800,0.3812237],[42000,0.4262756],[42200,0.2596849],[42400,0.4877459],[42600,0.412351],[42800,0.2727578],[43000,0.210372],[43200,0.3331507],[43400,0.2850102],[43600,0.1687855],[43800,0.4937873],[44000,0.3093916],[44200,0.413473],[44400,0.3586656],[44600,0.1558915],[44800,0.1736034],[45000,0.2223447],[45200,0.5111597],[45400,0.3238085],[45600,0.4546675],[45800,0.381629],[46000,0.3176589],[46200,0.1512959],[46400,0.455409],[46600,0.1967076],[46800,0.3181915],[47000,0.2797246],[47200,0.4528731],[47400,0.4943474],[47600,0.3409052],[47800,0.2090799],[48000,0.0952552],[48200,0.1528015],[48400,0.1441636],[48536,0.2537098],[48600,0.3254278],[48800,0.4426687],[49000,0.3917138],[49200,0.3187536],[49400,0.588636],[49600,0.3382321],[49800,0.2782556],[50000,0.5032423],[50200,0.5421181],[50400,0.4184731],[50600,0.58398],[50800,0.4788427],[51000,0.4590865],[51200,0.5301738],[51400,0.4517905],[51600,0.5026805],[51800,0.6041993],[52000,0.6211821],[52200,0.497687],[52348,0.5570034],[52400,0.5636682],[52600,0.5554016],[52800,0.5417325],[53000,0.5732508],[53200,0.5656244],[53400,0.5886216],[53600,0.6344455],[53800,0.5617885],[54000,0.5184953],[54200,0.5631751],[54400,0.6464971],[54600,0.6061232],[54800,0.5909828],[55000,0.3835788],[55200,0.5316554],[55400,0.6258554],[55600,0.6463292],[55800,0.3147107],[56000,0.1478218],[56200,0.3349398],[56400,0.5454881],[56600,0.5390017],[56800,0.2047648],[57000,0.2247861],[57200,0.3554626],[57400,0.5701728],[57600,0.513842],[57800,0.6342445],[58000,0.5983226],[58200,0.576948],[58400,0.5677332],[58600,0.5890878],[58800,0.6154783],[59000,0.6199731],[59200,0.5940961],[59400,0.5932563],[59600,0.6389342],[59800,0.5365713],[60000,0.5680418],[60200,0.5634845],[60400,0.5874165],[60600,0.6304371],[60800,0.6656876],[61000,0.63323],[61200,0.6213371],[61400,0.6366245],[61600,0.61599],[61800,0.6238409],[62000,0.5936424],[62200,0.6376289],[62400,0.6352249],[62600,0.4762144],[62800,0.4824874],[63000,0.4084528],[63200,0.3499886],[63400,0.566853],[63600,0.2764325],[63800,0.3087626],[64000,0.2865527],[64200,0.1782587],[64400,0.2787032],[64600,0.6280798],[64800,0.5790861],[65000,0.5660979],[65200,0.5759284],[65298,0.6249344],[65400,0.6136602],[65600,0.4306102],[65800,0.2477763],[66000,0.2231413],[66200,0.4263395],[66400,0.5258676],[66600,0.4921483],[66800,0.0671989],[67000,0.0639641],[67200,0.1753496],[67400,0.0976687],[67600,0.1274788],[67800,0.5889516],[67943,0.6181272],[68000,0.6547396],[68200,0.6264715],[68400,0.3808775],[68600,0.3720767],[68800,0.3078462],[69000,0.3931834],[69200,0.3418298],[69400,0.2135309],[69600,0.2384426],[69800,0.3316955],[70000,0.066989],[70200,0.2562034],[70400,0.2944119],[70430,0.2462766],[70600,0.26277],[70800,0.4017749],[71000,0.1982271],[71200,0.0627534],[71400,0.0414861],[71600,0.1249961],[71800,0.2415443],[72000,0.5068272],[72200,0.6406306],[72400,0.5921208],[72600,0.6262941],[72800,0.5820429],[73000,0.3399085],[73200,0.197191],[73400,0.205567],[73600,0.3602185],[73800,0.3756591],[74000,0.6088115],[74200,0.6799147],[74400,0.685005],[74600,0.6754467],[74800,0.6117595],[75000,0.5628124],[75200,0.6019946],[75400,0.7442349],[75600,0.5819696],[75800,0.652477],[76000,0.5046756],[76200,0.4457792],[76400,0.550943],[76600,0.5386267],[76800,0.4562798],[77000,0.2892335],[77200,0.4608935],[77400,0.5611271],[77600,0.4775157],[77800,0.458948],[78000,0.6500728],[78200,0.5546244],[78400,0.4370371],[78600,0.58432],[78800,0.5851775],[79000,0.5479293],[79200,0.553504],[79400,0.4650359],[79600,0.5858174],[79800,0.5606705],[80000,0.5892057],[80200,0.5579654],[80400,0.5980105],[80600,0.4452292],[80800,0.4554782],[81000,0.2116186],[81200,0.1285018],[81400,0.0748087],[81600,0.2088911],[81800,0.2418512],[82000,0.5455844],[82200,0.5192834],[82400,0.5799924],[82600,0.5858123],[82800,0.6236949],[82941,0.578649],[83000,0.5313826],[83200,0.5902264],[83400,0.5824673],[83600,0.5051234],[83800,0.4748265],[84000,0.4577948],[84200,0.5077921],[84400,0.6443746],[84600,0.6538368],[84800,0.6474068],[85000,0.636492],[85200,0.4544982],[85400,0.2294668],[85600,0.5420387],[85800,0.4656912],[86000,0.487794],[86200,0.4649731],[86400,0.5659689],[86596,0.3617394]],"checkpoints":[[22007,0.5854928],[31842,0.5878404],[48536,0.2537098],[52348,0.5570034],[65298,0.6249344],[67943,0.6181272],[70430,0.2462766],[82941,0.578649]]},{"call_id":"872a1e67-873a-4c49-a598-b38a670afcad","audio_path":"韩泰机器人抢话/音频/872a1e67-873a-4c49-a598-b38a670afcad.mp3","audio_sha256":"54c5672ea491cc3daedd75e80f97e82cc061ccbf14e521bc22ca55f15fa062a5","duration_ms":73816.0,"points":[[200,0.2706342],[400,0.4295538],[600,0.6433141],[800,0.5694142],[1000,0.3563114],[1200,0.4620028],[1400,0.4837681],[1600,0.5984629],[1800,0.6251722],[2000,0.6317803],[2200,0.6257798],[2400,0.6906597],[2600,0.5667616],[2800,0.5430887],[3000,0.2654097],[3200,0.5335858],[3400,0.592387],[3600,0.4343049],[3800,0.4733178],[4000,0.5160722],[4200,0.3773084],[4400,0.3563285],[4600,0.6136789],[4800,0.5037335],[5000,0.5244976],[5200,0.5533001],[5400,0.4871745],[5600,0.54326],[5800,0.5280891],[6000,0.5798376],[6200,0.5527599],[6400,0.3194804],[6600,0.2267023],[6800,0.3106361],[7000,0.4131133],[7200,0.5378926],[7400,0.5964231],[7600,0.4351918],[7800,0.3992419],[8000,0.5407652],[8200,0.5518211],[8400,0.6379244],[8600,0.6484545],[8800,0.6515519],[9000,0.6473952],[9200,0.6170896],[9400,0.5229511],[9600,0.2477185],[9800,0.3222795],[10000,0.4731182],[10200,0.4922952],[10400,0.4972915],[10600,0.5672942],[10800,0.6580451],[11000,0.6580445],[11200,0.6657066],[11400,0.6549547],[11600,0.654645],[11800,0.6523133],[12000,0.5228312],[12200,0.3429596],[12400,0.186306],[12600,0.1473588],[12800,0.3820372],[13000,0.228908],[13200,0.2579405],[13400,0.1969315],[13600,0.3730395],[13800,0.612275],[14000,0.4904419],[14200,0.633813],[14400,0.5631973],[14600,0.3508081],[14800,0.2772397],[15000,0.1821209],[15200,0.1482629],[15400,0.2541616],[15600,0.1692099],[15800,0.5079143],[16000,0.6292298],[16200,0.5932027],[16400,0.433886],[16600,0.1936212],[16800,0.3356585],[17000,0.5403379],[17153,0.5009273],[17200,0.5465775],[17400,0.6464288],[17600,0.6849597],[17800,0.6799845],[18000,0.6744162],[18200,0.6437539],[18400,0.6641879],[18600,0.6384426],[18800,0.5903175],[19000,0.6377771],[19200,0.6739494],[19400,0.5695876],[19600,0.4705189],[19800,0.2126947],[20000,0.2596267],[20200,0.3786557],[20400,0.3935346],[20600,0.3069488],[20800,0.138991],[21000,0.1288229],[21200,0.2473013],[21400,0.2226969],[21600,0.4773824],[21800,0.6190343],[22000,0.6581263],[22200,0.1611482],[22400,0.3051309],[22600,0.2715595],[22800,0.4530666],[23000,0.2569997],[23200,0.2376445],[23400,0.2854147],[23600,0.150976],[23800,0.2640381],[24000,0.5758697],[24200,0.6547825],[24400,0.6409126],[24600,0.6766376],[24800,0.669356],[24846,0.6689405],[25000,0.6675907],[25200,0.6362358],[25400,0.6500669],[25600,0.6590579],[25800,0.6776172],[26000,0.6349342],[26200,0.6695768],[26400,0.6458882],[26600,0.5058158],[26800,0.3156812],[27000,0.5094684],[27200,0.3374329],[27400,0.4644533],[27600,0.5712914],[27800,0.597122],[28000,0.6299698],[28200,0.6156525],[28400,0.563345],[28600,0.4315664],[28800,0.621046],[29000,0.6396578],[29200,0.6313984],[29400,0.6519893],[29600,0.6483282],[29800,0.6625675],[30000,0.6625675],[30200,0.1844446],[30400,0.2316889],[30600,0.2467404],[30800,0.3131233],[31000,0.3898397],[31200,0.4718407],[31400,0.6329305],[31600,0.5338019],[31800,0.4110117],[32000,0.6308451],[32200,0.4439963],[32400,0.6305777],[32600,0.6614377],[32800,0.6318297],[33000,0.6448733],[33200,0.6217271],[33400,0.6704881],[33471,0.6602026],[33600,0.6698523],[33800,0.670469],[34000,0.6567499],[34200,0.6542881],[34400,0.6371567],[34600,0.6446514],[34800,0.6422312],[35000,0.5393678],[35200,0.6353617],[35400,0.6206747],[35600,0.6391557],[35800,0.617817],[36000,0.621377],[36200,0.6625675],[36400,0.6625675],[36600,0.5286978],[36800,0.5727066],[37000,0.3942325],[37200,0.6048407],[37400,0.5946423],[37600,0.6112012],[37800,0.5942406],[38000,0.6291984],[38200,0.6515497],[38400,0.6625675],[38600,0.6569851],[38800,0.4177735],[39000,0.5579581],[39200,0.6281437],[39400,0.612286],[39600,0.6529978],[39800,0.6277128],[40000,0.6362519],[40200,0.6625675],[40400,0.6625675],[40600,0.6625675],[40800,0.6625675],[41000,0.6625675],[41200,0.6625675],[41400,0.6625675],[41600,0.6625675],[41800,0.169864],[42000,0.1824415],[42200,0.2298837],[42400,0.2171382],[42600,0.1502242],[42800,0.1655366],[43000,0.4019099],[43200,0.4468138],[43400,0.2526839],[43600,0.3886734],[43800,0.1482148],[44000,0.1214127],[44200,0.1238954],[44400,0.1491688],[44600,0.1726841],[44800,0.1284488],[44810,0.1674279],[45000,0.2285933],[45200,0.2183771],[45400,0.1729008],[45581,0.3364623],[45600,0.2945055],[45800,0.2808469],[46000,0.2453256],[46200,0.4735438],[46400,0.5796107],[46600,0.4164918],[46800,0.4568641],[47000,0.4937495],[47187,0.3902971],[47200,0.3652523],[47400,0.228483],[47600,0.2735334],[47800,0.1462345],[48000,0.1344254],[48200,0.2693899],[48400,0.1513159],[48600,0.1942389],[48800,0.2258432],[49000,0.1066693],[49200,0.2155925],[49400,0.6987888],[49500,0.662623],[49600,0.5425338],[49800,0.119788],[50000,0.4789405],[50200,0.5428153],[50400,0.5591934],[50600,0.6582332],[50800,0.2534898],[51000,0.3491718],[51200,0.2775689],[51400,0.3270135],[51600,0.2864624],[51800,0.47185],[52000,0.1774029],[52200,0.2875577],[52326,0.2527875],[52400,0.2485016],[52600,0.469814],[52800,0.2254489],[53000,0.2052019],[53200,0.2416565],[53400,0.192939],[53600,0.4280244],[53800,0.1616794],[54000,0.3650675],[54200,0.114283],[54318,0.1424152],[54400,0.2722449],[54600,0.3718606],[54800,0.714326],[55000,0.6448365],[55200,0.3969623],[55400,0.4848436],[55600,0.586579],[55800,0.6023011],[56000,0.6094827],[56200,0.3094489],[56400,0.3557937],[56600,0.2614958],[56800,0.3267718],[57000,0.2443296],[57200,0.5474188],[57400,0.5316557],[57600,0.6628954],[57800,0.4265319],[58000,0.2231457],[58200,0.3408672],[58400,0.4683643],[58600,0.6303642],[58800,0.7419176],[59000,0.4489543],[59200,0.4948572],[59400,0.2130854],[59600,0.3433085],[59800,0.3530948],[60000,0.2097712],[60200,0.3112777],[60400,0.2558966],[60600,0.3690446],[60800,0.8103722],[61000,0.6103016],[61200,0.6145088],[61400,0.4501943],[61600,0.5196083],[61800,0.7022307],[62000,0.7130757],[62200,0.6135076],[62400,0.4778724],[62600,0.6271346],[62800,0.6350536],[63000,0.63913],[63200,0.6414649],[63400,0.6454525],[63600,0.6625675],[63800,0.6625675],[64000,0.6625675],[64200,0.6625675],[64400,0.6625675],[64600,0.6625675],[64800,0.6625675],[65000,0.6625675],[65200,0.6625675],[65400,0.6625675],[65600,0.6625675],[65800,0.6625675],[66000,0.6625675],[66200,0.6625675],[66400,0.6625675],[66600,0.6625675],[66800,0.6625675],[67000,0.6625675],[67200,0.6002021],[67400,0.2800718],[67600,0.2235372],[67800,0.2244529],[68000,0.1063986],[68200,0.1476917],[68400,0.2069325],[68600,0.3752393],[68800,0.563895],[69000,0.7080068],[69200,0.6711454],[69400,0.6598704],[69600,0.6532435],[69800,0.6300715],[70000,0.6253629],[70200,0.6928818],[70400,0.6853209],[70600,0.6429977],[70800,0.6412993],[71000,0.6745593],[71200,0.6507611],[71400,0.6372676],[71600,0.6115061],[71800,0.5557824],[72000,0.6520193],[72200,0.6166823],[72400,0.6054769],[72600,0.620316],[72800,0.6625675],[73000,0.6625675],[73200,0.6625675],[73400,0.6625675],[73600,0.5588446],[73800,0.4632879],[73816,0.4476254]],"checkpoints":[[17153,0.5009273],[24846,0.6689405],[33471,0.6602026],[44810,0.1674279],[45581,0.3364623],[47187,0.3902971],[49500,0.662623],[52326,0.2527875],[54318,0.1424152]]},{"call_id":"a266b9ef-5e47-4434-a04c-ce4eacd52c19","audio_path":"韩泰机器人抢话/音频/a266b9ef-5e47-4434-a04c-ce4eacd52c19.mp3","audio_sha256":"9a7ebe093e66aaaa08ac462f975b7d428df79a38ed5b418265b82c77d8b91f46","duration_ms":83016.0,"points":[[200,0.4345167],[400,0.436301],[600,0.4767171],[800,0.5062672],[1000,0.4291559],[1200,0.5802677],[1400,0.3472351],[1600,0.3530583],[1800,0.4030991],[2000,0.3150899],[2200,0.3251123],[2400,0.334102],[2600,0.2123672],[2800,0.3993457],[3000,0.3279464],[3200,0.3301128],[3400,0.4552589],[3600,0.4105523],[3800,0.3382302],[4000,0.4046244],[4200,0.4627417],[4400,0.3958454],[4600,0.4036358],[4800,0.4834098],[5000,0.4154564],[5200,0.3178255],[5400,0.3332072],[5600,0.2832801],[5800,0.2468271],[6000,0.2595473],[6200,0.2798105],[6400,0.3213151],[6600,0.2088049],[6800,0.3231682],[7000,0.2886895],[7200,0.4626935],[7400,0.2257768],[7600,0.3088568],[7800,0.2342136],[8000,0.2909826],[8200,0.301501],[8400,0.4991383],[8600,0.3612385],[8800,0.3145849],[9000,0.3895419],[9200,0.458483],[9400,0.4181744],[9600,0.423467],[9800,0.2764505],[10000,0.5286036],[10200,0.5423618],[10400,0.644685],[10600,0.6137856],[10800,0.6674544],[11000,0.6839843],[11200,0.6709768],[11400,0.6349105],[11600,0.6755989],[11800,0.6704156],[12000,0.6726912],[12200,0.6614299],[12400,0.6709962],[12600,0.6768924],[12800,0.6416073],[13000,0.6420186],[13200,0.6350173],[13400,0.6580162],[13600,0.660701],[13800,0.6552957],[14000,0.6699658],[14200,0.5873205],[14400,0.6258481],[14600,0.6176417],[14800,0.680091],[15000,0.6546879],[15200,0.6240177],[15400,0.4104108],[15600,0.167023],[15800,0.2852535],[16000,0.4968529],[16200,0.5487656],[16400,0.6403153],[16600,0.6523921],[16800,0.6408846],[17000,0.6628414],[17200,0.6695771],[17400,0.6691201],[17600,0.6849428],[17800,0.6753799],[18000,0.6657987],[18027,0.6745697],[18200,0.6719821],[18400,0.6582674],[18600,0.6675523],[18800,0.6762729],[19000,0.6709156],[19200,0.6655485],[19400,0.6843941],[19600,0.6456968],[19800,0.6808822],[20000,0.6643813],[20200,0.6539705],[20400,0.7959988],[20600,0.6448851],[20800,0.6200074],[21000,0.6493568],[21200,0.6350507],[21400,0.5364017],[21600,0.6360829],[21800,0.640942],[22000,0.6109522],[22200,0.6655552],[22400,0.6750304],[22600,0.42789],[22800,0.3156546],[23000,0.4095474],[23200,0.5084581],[23400,0.5057358],[23600,0.7510285],[23800,0.5667346],[24000,0.5634689],[24200,0.6860614],[24400,0.6657628],[24600,0.6773223],[24768,0.6706605],[24800,0.661836],[25000,0.6752607],[25200,0.6817252],[25400,0.6876361],[25600,0.6657339],[25800,0.6642359],[26000,0.6768069],[26200,0.6747303],[26400,0.6955754],[26600,0.675612],[26800,0.7056752],[27000,0.6835522],[27200,0.6679037],[27400,0.6643935],[27600,0.6750606],[27800,0.6781188],[28000,0.6541002],[28200,0.6783512],[28400,0.6656902],[28600,0.6588808],[28800,0.6676844],[29000,0.6595722],[29200,0.6644495],[29400,0.6747711],[29600,0.6820124],[29800,0.6545897],[30000,0.6198158],[30200,0.6627407],[30400,0.6607217],[30600,0.641202],[30800,0.6740683],[31000,0.6540518],[31200,0.6588082],[31400,0.6559233],[31600,0.6682429],[31800,0.6285694],[32000,0.6786719],[32200,0.6777591],[32400,0.6632557],[32600,0.6657742],[32800,0.6773342],[33000,0.6756592],[33200,0.6778483],[33400,0.6694012],[33600,0.6802229],[33800,0.6684117],[34000,0.6721382],[34200,0.6899968],[34400,0.6894442],[34600,0.2096573],[34800,0.2091798],[35000,0.3867222],[35200,0.2257759],[35400,0.2408809],[35600,0.2396079],[35800,0.3898815],[36000,0.408575],[36200,0.1389896],[36400,0.1602589],[36600,0.213978],[36800,0.1937357],[37000,0.2043537],[37200,0.212429],[37400,0.4311293],[37600,0.4644178],[37800,0.5740655],[38000,0.1842148],[38200,0.351205],[38400,0.3497956],[38600,0.2242516],[38800,0.448908],[39000,0.3130508],[39200,0.3046088],[39400,0.6883943],[39600,0.6117143],[39800,0.605374],[40000,0.5912363],[40200,0.7320639],[40400,0.6765261],[40600,0.6857361],[40800,0.6295465],[41000,0.6215335],[41200,0.570564],[41219,0.5743901],[41400,0.3589135],[41600,0.23382],[41800,0.217974],[42000,0.3228358],[42200,0.2436494],[42400,0.2588516],[42600,0.2406173],[42800,0.3518472],[43000,0.4264753],[43200,0.2714215],[43400,0.3826988],[43600,0.5260016],[43800,0.6266969],[44000,0.6725428],[44200,0.6522643],[44400,0.6434855],[44600,0.6441302],[44800,0.7681405],[45000,0.2867426],[45200,0.3184229],[45400,0.4278997],[45600,0.1968242],[45800,0.1721676],[46000,0.1066104],[46200,0.0812764],[46400,0.2160367],[46600,0.41218],[46800,0.3086831],[47000,0.4000674],[47200,0.3828063],[47400,0.2001667],[47600,0.3440765],[47800,0.1882469],[48000,0.4895052],[48200,0.4716589],[48400,0.6192448],[48600,0.6273682],[48800,0.6707894],[49000,0.2398218],[49200,0.511504],[49400,0.1764256],[49600,0.0821227],[49800,0.1634111],[50000,0.3075552],[50200,0.1967852],[50400,0.1866799],[50600,0.2118653],[50800,0.2115133],[51000,0.1567738],[51080,0.4752097],[51200,0.4504921],[51400,0.2809794],[51600,0.2824141],[51800,0.3316896],[52000,0.3989812],[52200,0.6142962],[52400,0.6876302],[52600,0.6706554],[52800,0.6652966],[53000,0.6698956],[53200,0.6620733],[53400,0.6795728],[53600,0.6860264],[53800,0.6749202],[54000,0.6584527],[54200,0.6659731],[54400,0.6452241],[54600,0.6763618],[54800,0.6840858],[55000,0.6809158],[55200,0.6619331],[55400,0.6829413],[55600,0.6752866],[55800,0.6666977],[56000,0.6763354],[56200,0.7843698],[56400,0.6860636],[56600,0.6390666],[56800,0.7315279],[57000,0.6762394],[57200,0.6572675],[57400,0.649933],[57600,0.6629208],[57800,0.6827253],[58000,0.6349841],[58200,0.6587008],[58400,0.6788667],[58600,0.6871775],[58800,0.6860054],[59000,0.6826522],[59200,0.6706467],[59400,0.6655321],[59600,0.6829757],[59800,0.6732609],[60000,0.6674662],[60200,0.6837481],[60400,0.6605595],[60600,0.6679412],[60800,0.6828157],[61000,0.280055],[61200,0.2090438],[61400,0.2481346],[61600,0.1929128],[61800,0.2389528],[62000,0.4500928],[62200,0.3703458],[62400,0.0844192],[62600,0.1830474],[62800,0.3618824],[63000,0.4259274],[63200,0.3081097],[63400,0.0968875],[63600,0.5056464],[63800,0.6933734],[64000,0.510523],[64200,0.5393231],[64400,0.6202594],[64600,0.6164137],[64800,0.6279371],[65000,0.3875328],[65200,0.1232945],[65400,0.1903173],[65600,0.2923575],[65800,0.5636643],[66000,0.2059284],[66200,0.3052846],[66400,0.2629787],[66600,0.3129975],[66800,0.1498218],[67000,0.1825629],[67200,0.4785671],[67400,0.4800681],[67600,0.5277901],[67800,0.7405094],[68000,0.6965753],[68200,0.6807669],[68313,0.6697428],[68400,0.6856633],[68600,0.3875855],[68800,0.3090644],[69000,0.1809666],[69200,0.1173681],[69400,0.1458678],[69600,0.1978934],[69800,0.379139],[70000,0.1437205],[70200,0.2993446],[70400,0.5040374],[70600,0.6332332],[70800,0.5381495],[71000,0.6204452],[71200,0.6562889],[71400,0.6301982],[71600,0.5535204],[71800,0.5973307],[72000,0.6020098],[72200,0.5686139],[72400,0.3912429],[72600,0.6056169],[72800,0.6065434],[73000,0.737238],[73200,0.5590062],[73400,0.6348925],[73600,0.6615992],[73800,0.5990223],[74000,0.65615],[74200,0.6605573],[74400,0.6710191],[74600,0.6865842],[74800,0.6698009],[75000,0.6020069],[75200,0.6790967],[75400,0.6830105],[75600,0.6568952],[75800,0.660644],[76000,0.6570584],[76200,0.6723211],[76400,0.6981347],[76600,0.5373325],[76800,0.4372439],[77000,0.4876645],[77200,0.6128959],[77400,0.6355541],[77600,0.6117713],[77800,0.6932243],[78000,0.7343222],[78200,0.6741855],[78400,0.6744559],[78600,0.6603923],[78800,0.6776126],[79000,0.6621495],[79200,0.664486],[79400,0.676447],[79600,0.6909666],[79800,0.6690505],[80000,0.6850667],[80200,0.6718482],[80400,0.6609316],[80600,0.6595173],[80800,0.7244431],[81000,0.6575362],[81200,0.6546962],[81400,0.6514726],[81600,0.6618672],[81800,0.6564285],[82000,0.6610454],[82200,0.674181],[82400,0.590688],[82600,0.6252369],[82800,0.7731693],[83000,0.5542275],[83016,0.6358451]],"checkpoints":[[18027,0.6745697],[24768,0.6706605],[41219,0.5743901],[51080,0.4752097],[68313,0.6697428]]},{"call_id":"cb3238dc-3946-42a5-aad8-9b9a54226363","audio_path":"韩泰机器人抢话/音频/cb3238dc-3946-42a5-aad8-9b9a54226363.mp3","audio_sha256":"7a74dbf3dd742d3d14317d069c28b703dd1398d5eb3dc1dba3d7a7c568a18d60","duration_ms":93756.0,"points":[[200,0.1816447],[400,0.2431741],[600,0.500068],[800,0.6143365],[1000,0.5574507],[1200,0.644973],[1400,0.5939841],[1600,0.6167176],[1800,0.6208836],[2000,0.6911573],[2200,0.5974119],[2400,0.6016577],[2600,0.6550738],[2800,0.6188792],[3000,0.6334981],[3200,0.6669874],[3400,0.5960322],[3600,0.633095],[3800,0.6654555],[4000,0.665613],[4200,0.6514739],[4400,0.6419502],[4600,0.5577639],[4800,0.6680319],[5000,0.6238232],[5200,0.7300361],[5400,0.6810943],[5600,0.6595464],[5800,0.6229361],[6000,0.6618736],[6200,0.6433927],[6400,0.7332305],[6600,0.6649508],[6800,0.6608739],[7000,0.6294128],[7200,0.6489558],[7400,0.6483772],[7600,0.6341208],[7800,0.6633703],[8000,0.6816252],[8200,0.6567342],[8400,0.6640644],[8600,0.7076751],[8800,0.6488658],[9000,0.6001998],[9200,0.5523065],[9400,0.4555249],[9600,0.3408995],[9800,0.2408136],[10000,0.3083849],[10200,0.4557956],[10400,0.5580102],[10600,0.5648381],[10800,0.2923146],[11000,0.1739279],[11200,0.4895556],[11400,0.4093207],[11600,0.453256],[11800,0.6316298],[12000,0.5083615],[12200,0.6109024],[12400,0.6729643],[12600,0.6782666],[12800,0.655474],[13000,0.6234496],[13200,0.6232777],[13400,0.6175735],[13540,0.598156],[13600,0.628023],[13800,0.5391746],[14000,0.6490971],[14200,0.6869131],[14400,0.6676838],[14600,0.6801887],[14800,0.6406044],[15000,0.665584],[15200,0.6939802],[15400,0.6686043],[15600,0.7281463],[15800,0.6857036],[16000,0.6992275],[16200,0.6506795],[16400,0.6449116],[16600,0.4408717],[16800,0.1556143],[17000,0.4034338],[17200,0.3237101],[17400,0.1137883],[17600,0.3524532],[17800,0.4687607],[18000,0.4318262],[18200,0.4175612],[18400,0.4495153],[18600,0.5895666],[18800,0.5781198],[19000,0.6142915],[19200,0.6478207],[19400,0.6310288],[19600,0.6525649],[19620,0.6514598],[19800,0.5262305],[20000,0.653495],[20200,0.6210075],[20400,0.6362801],[20600,0.6041521],[20800,0.6573706],[21000,0.6092901],[21200,0.6461296],[21400,0.6698778],[21600,0.6552587],[21800,0.6607762],[22000,0.658263],[22200,0.67023],[22400,0.6965604],[22600,0.6610764],[22800,0.6540631],[23000,0.6554337],[23200,0.6524035],[23400,0.6725227],[23600,0.6474743],[23800,0.5834382],[24000,0.2109278],[24200,0.5200693],[24400,0.4780443],[24600,0.272115],[24800,0.3207356],[25000,0.2217251],[25200,0.1032807],[25400,0.5968325],[25600,0.3134566],[25800,0.5523142],[26000,0.5352656],[26200,0.6775948],[26400,0.5462554],[26600,0.6451769],[26800,0.7237657],[27000,0.6420161],[27200,0.634868],[27400,0.6771471],[27520,0.679596],[27600,0.6770948],[27800,0.6853139],[28000,0.6937711],[28200,0.6334198],[28400,0.6546059],[28600,0.6324878],[28800,0.6765686],[29000,0.6563755],[29200,0.6891857],[29400,0.6798165],[29600,0.6836641],[29800,0.6637281],[30000,0.6552746],[30200,0.6655284],[30400,0.6823908],[30600,0.6561214],[30800,0.5572017],[31000,0.5660557],[31200,0.5791215],[31400,0.5698673],[31600,0.5594869],[31800,0.5813075],[32000,0.6243753],[32200,0.593039],[32400,0.6436792],[32600,0.6603178],[32800,0.663999],[33000,0.6784391],[33200,0.6592448],[33400,0.6779239],[33600,0.6887066],[33800,0.6152492],[34000,0.6482025],[34200,0.6895148],[34400,0.6708242],[34600,0.6589496],[34800,0.496108],[35000,0.4897703],[35200,0.5967891],[35400,0.5574881],[35600,0.6327854],[35800,0.5248599],[36000,0.4780544],[36200,0.4955019],[36400,0.3429233],[36600,0.2870374],[36800,0.4198734],[37000,0.4946774],[37200,0.5946327],[37400,0.6259007],[37600,0.6155638],[37800,0.6290433],[38000,0.7024282],[38200,0.6522256],[38400,0.6103894],[38600,0.4373513],[38800,0.1311543],[39000,0.1311827],[39200,0.0888945],[39400,0.1057726],[39600,0.1817494],[39800,0.2079771],[40000,0.3918402],[40200,0.1322444],[40400,0.1006396],[40600,0.1447869],[40800,0.2806742],[41000,0.7205904],[41200,0.6322795],[41207,0.6371078],[41400,0.6156197],[41600,0.2520346],[41800,0.1225446],[42000,0.3384568],[42200,0.231875],[42400,0.3882604],[42600,0.3401783],[42800,0.1423391],[43000,0.0904846],[43200,0.3927772],[43400,0.2498244],[43600,0.3001004],[43800,0.1176098],[44000,0.5192389],[44200,0.5201935],[44400,0.2939678],[44600,0.2632802],[44800,0.4415032],[45000,0.0991684],[45200,0.4222175],[45400,0.2886162],[45600,0.3382094],[45800,0.213775],[46000,0.2711392],[46200,0.2318067],[46400,0.2369351],[46600,0.1371468],[46800,0.28126],[47000,0.3032956],[47200,0.2640314],[47400,0.4247598],[47600,0.2413047],[47800,0.2470289],[48000,0.5519217],[48200,0.6918198],[48400,0.432282],[48600,0.5358502],[48800,0.6335591],[49000,0.6466995],[49200,0.6847686],[49204,0.6755564],[49400,0.3861355],[49600,0.2066064],[49800,0.2206406],[50000,0.1748597],[50200,0.1276236],[50400,0.1117287],[50600,0.1661036],[50800,0.1451448],[51000,0.1089968],[51200,0.1600437],[51400,0.4267881],[51600,0.3552128],[51800,0.4784066],[52000,0.7674895],[52200,0.5244482],[52400,0.2046197],[52600,0.4542214],[52800,0.7023336],[53000,0.6534578],[53200,0.6704125],[53400,0.5947458],[53600,0.5976393],[53800,0.666557],[54000,0.6622404],[54200,0.6626372],[54400,0.6390554],[54600,0.6718395],[54800,0.6705866],[55000,0.6272658],[55200,0.6912034],[55400,0.7239308],[55600,0.7025595],[55800,0.6964101],[56000,0.6647796],[56200,0.6557336],[56400,0.2419661],[56600,0.2417097],[56800,0.2669121],[57000,0.1318301],[57200,0.1560064],[57400,0.226723],[57600,0.2429252],[57800,0.380839],[58000,0.4897632],[58200,0.5714046],[58400,0.7280169],[58424,0.6663632],[58600,0.6650494],[58800,0.5906878],[59000,0.3911753],[59200,0.2864709],[59400,0.1831442],[59600,0.1384971],[59800,0.1392974],[60000,0.1161022],[60200,0.0876112],[60400,0.079601],[60600,0.2190142],[60790,0.2505623],[60800,0.279501],[61000,0.6050012],[61200,0.193453],[61400,0.1584275],[61600,0.1044269],[61800,0.1313984],[62000,0.2000019],[62200,0.1291455],[62400,0.3835623],[62600,0.3716887],[62800,0.2384742],[63000,0.2418483],[63200,0.3408974],[63400,0.4134317],[63600,0.624031],[63800,0.7552931],[64000,0.7138931],[64200,0.6571709],[64400,0.6876758],[64600,0.6733078],[64800,0.6848741],[65000,0.6776886],[65200,0.665477],[65400,0.6656933],[65600,0.6532995],[65800,0.6543161],[66000,0.6698788],[66200,0.6706125],[66400,0.6906976],[66600,0.65318],[66800,0.6652879],[67000,0.6831198],[67200,0.6481428],[67400,0.6741536],[67600,0.6589],[67800,0.6527059],[68000,0.7009827],[68200,0.7006955],[68400,0.649012],[68600,0.6379522],[68800,0.2399348],[69000,0.3061051],[69200,0.1902773],[69400,0.2031054],[69600,0.0866412],[69800,0.2202608],[70000,0.2699301],[70200,0.332903],[70400,0.4432706],[70600,0.5658138],[70745,0.5162182],[70800,0.5881583],[71000,0.5464554],[71200,0.3794308],[71400,0.2228374],[71600,0.1297669],[71800,0.4899577],[72000,0.1976129],[72200,0.2942366],[72400,0.2761462],[72600,0.2599208],[72800,0.2905293],[73000,0.1915388],[73200,0.2799097],[73400,0.394418],[73600,0.3516027],[73640,0.3879855],[73800,0.3395367],[74000,0.2759752],[74200,0.1838273],[74400,0.292223],[74600,0.3015986],[74800,0.3386468],[75000,0.3157986],[75200,0.3522993],[75400,0.3842761],[75600,0.6445656],[75800,0.3777222],[76000,0.3274448],[76200,0.3865751],[76400,0.7433353],[76600,0.4454026],[76800,0.296063],[77000,0.1215217],[77200,0.1289177],[77400,0.250237],[77600,0.2183994],[77800,0.2646197],[78000,0.5813056],[78200,0.6316615],[78400,0.6384914],[78600,0.6500176],[78800,0.5988552],[79000,0.6740611],[79200,0.6470769],[79400,0.6739208],[79600,0.6524063],[79800,0.5579658],[80000,0.6060069],[80200,0.5977144],[80400,0.5791516],[80600,0.5900785],[80800,0.6522762],[81000,0.6737132],[81200,0.6465244],[81400,0.6296926],[81600,0.6112141],[81800,0.6604102],[82000,0.676937],[82200,0.6699749],[82400,0.6469446],[82600,0.6939381],[82800,0.6522785],[83000,0.6214584],[83200,0.4462869],[83400,0.4703358],[83600,0.3629153],[83800,0.3808416],[84000,0.1771432],[84200,0.1570054],[84400,0.1624205],[84600,0.1823019],[84800,0.1920096],[85000,0.3285021],[85200,0.1677176],[85400,0.3392186],[85600,0.3886316],[85800,0.4920565],[86000,0.4931619],[86200,0.6826861],[86400,0.6627282],[86600,0.6984537],[86800,0.6778538],[87000,0.6867585],[87200,0.6953308],[87400,0.6991301],[87600,0.6669087],[87800,0.6222069],[88000,0.5777913],[88200,0.6370894],[88400,0.1824307],[88600,0.1718428],[88800,0.1596956],[89000,0.1204189],[89200,0.1983033],[89400,0.3103898],[89600,0.4634188],[89800,0.638099],[90000,0.7061905],[90200,0.6758728],[90400,0.6854513],[90600,0.6477499],[90800,0.5890122],[91000,0.7760471],[91200,0.6283466],[91400,0.5737435],[91600,0.5736725],[91800,0.7030185],[92000,0.6276371],[92200,0.6599352],[92400,0.6629101],[92600,0.7058392],[92800,0.6663302],[93000,0.6897002],[93200,0.662775],[93400,0.5982006],[93600,0.3965424],[93756,0.3369702]],"checkpoints":[[13540,0.598156],[19620,0.6514598],[27520,0.679596],[41207,0.6371078],[49204,0.6755564],[58424,0.6663632],[60790,0.2505623],[70745,0.5162182],[73640,0.3879855]]},{"call_id":"e304f740-85d4-427e-9fd6-c5474e9cd737","audio_path":"韩泰机器人抢话/音频/e304f740-85d4-427e-9fd6-c5474e9cd737.mp3","audio_sha256":"44672603d0cf9feac41275e99d59baa4cafbdcdbb172da23de52aa0a2a4961d2","duration_ms":71616.0,"points":[[200,0.1603712],[400,0.227636],[600,0.5894714],[800,0.6713896],[1000,0.696371],[1200,0.5616085],[1400,0.5243592],[1600,0.6327031],[1800,0.5593874],[2000,0.6497232],[2200,0.5098075],[2400,0.3705519],[2600,0.6174386],[2800,0.3151855],[3000,0.3282557],[3200,0.3464202],[3400,0.4944025],[3600,0.5684925],[3800,0.4738429],[4000,0.5062382],[4200,0.5255587],[4400,0.491782],[4600,0.3235339],[4800,0.2284795],[5000,0.4249905],[5200,0.5853274],[5400,0.5457311],[5600,0.5452172],[5800,0.647085],[6000,0.6289942],[6200,0.3223727],[6400,0.3486575],[6600,0.4233323],[6800,0.1674957],[7000,0.2763239],[7200,0.4836757],[7400,0.4372955],[7600,0.4859376],[7800,0.1618093],[8000,0.1157513],[8200,0.2803517],[8400,0.4314212],[8600,0.5102998],[8800,0.6445863],[9000,0.3790434],[9200,0.3283204],[9400,0.2297172],[9600,0.3593623],[9800,0.3530384],[10000,0.2168899],[10200,0.2795511],[10400,0.35491],[10600,0.5145195],[10800,0.6087366],[11000,0.6712811],[11200,0.6428863],[11400,0.6484991],[11531,0.6718385],[11600,0.6634637],[11800,0.6472943],[12000,0.6740773],[12200,0.6482726],[12400,0.6164815],[12600,0.6268214],[12800,0.6589153],[13000,0.6432008],[13200,0.6212733],[13400,0.6036853],[13600,0.696502],[13800,0.6638453],[14000,0.5777025],[14200,0.1994879],[14400,0.4901709],[14600,0.5509537],[14800,0.5942125],[15000,0.4582361],[15200,0.3191651],[15400,0.2424378],[15600,0.3582562],[15800,0.2730088],[16000,0.2440887],[16200,0.1293402],[16400,0.5236434],[16600,0.2817583],[16800,0.1723303],[17000,0.2512657],[17200,0.0805941],[17400,0.3101277],[17600,0.4903203],[17800,0.7806203],[18000,0.6092994],[18200,0.6196277],[18400,0.6015902],[18600,0.6465207],[18800,0.6509346],[18842,0.597839],[19000,0.6199176],[19200,0.6441745],[19400,0.6321104],[19600,0.6837528],[19800,0.6752204],[20000,0.666117],[20200,0.6559135],[20400,0.566282],[20600,0.4779004],[20800,0.1802288],[21000,0.4836925],[21200,0.6065296],[21400,0.5140553],[21600,0.638565],[21800,0.5785184],[22000,0.6132911],[22200,0.6625675],[22400,0.6625675],[22600,0.6625675],[22800,0.6625675],[23000,0.6625675],[23200,0.6625675],[23400,0.6625675],[23600,0.6586936],[23800,0.2223566],[24000,0.2924385],[24200,0.4226109],[24400,0.4835603],[24600,0.519535],[24800,0.647646],[25000,0.6726671],[25200,0.6456532],[25400,0.6825801],[25600,0.6564174],[25800,0.6695753],[26000,0.6372968],[26200,0.6590797],[26400,0.6271315],[26600,0.648288],[26800,0.6165127],[27000,0.497983],[27200,0.1936875],[27400,0.2232635],[27600,0.1082088],[27800,0.0991122],[28000,0.1166983],[28200,0.3324777],[28400,0.310903],[28600,0.4956416],[28800,0.6291415],[29000,0.6433423],[29200,0.5897156],[29400,0.6027735],[29600,0.6284463],[29619,0.6137039],[29800,0.6350826],[30000,0.6569269],[30200,0.6311355],[30400,0.632661],[30600,0.6211862],[30800,0.5464921],[31000,0.6095479],[31200,0.6104029],[31400,0.6155695],[31600,0.6282243],[31800,0.4808343],[32000,0.6883468],[32200,0.4259771],[32400,0.4935556],[32600,0.6092075],[32800,0.5903008],[33000,0.644835],[33200,0.3265307],[33400,0.5706713],[33600,0.6236209],[33800,0.6275833],[34000,0.6432866],[34200,0.6528389],[34400,0.6393094],[34600,0.6625675],[34800,0.6625675],[35000,0.3605733],[35200,0.3143969],[35400,0.5119606],[35600,0.6206203],[35800,0.6251778],[36000,0.5117856],[36200,0.6035879],[36400,0.6241272],[36600,0.6625675],[36800,0.6625675],[37000,0.6625675],[37200,0.6625675],[37400,0.22067],[37600,0.4638026],[37800,0.6387714],[38000,0.4728834],[38200,0.1826853],[38400,0.159191],[38600,0.2570222],[38800,0.2095748],[39000,0.1003257],[39200,0.2647854],[39400,0.3480182],[39600,0.4052456],[39800,0.3066205],[40000,0.3950308],[40200,0.3698278],[40400,0.5647132],[40600,0.6557596],[40701,0.6689901],[40800,0.6137424],[41000,0.5809551],[41200,0.3314236],[41400,0.249944],[41600,0.1085424],[41800,0.1675201],[42000,0.3626808],[42200,0.4366524],[42400,0.410464],[42600,0.4641586],[42800,0.2809275],[43000,0.3333305],[43200,0.1986244],[43400,0.1753385],[43600,0.3558428],[43800,0.4558281],[44000,0.6235281],[44200,0.7125419],[44400,0.6106749],[44600,0.6300417],[44800,0.6170473],[45000,0.6625675],[45200,0.6625675],[45400,0.4446484],[45600,0.2917797],[45800,0.2899495],[46000,0.4340467],[46200,0.2524054],[46400,0.2172672],[46600,0.101616],[46800,0.4956729],[47000,0.1866806],[47200,0.1355306],[47400,0.2090646],[47600,0.1058891],[47800,0.324169],[48000,0.4466488],[48200,0.7039214],[48400,0.4940156],[48600,0.3405387],[48800,0.1619861],[49000,0.1546595],[49200,0.2112692],[49400,0.1249454],[49600,0.2451559],[49800,0.2762708],[50000,0.2022017],[50200,0.3750242],[50400,0.5889438],[50600,0.6369498],[50800,0.5759173],[51000,0.4315768],[51200,0.1551409],[51400,0.1525347],[51600,0.258505],[51800,0.1026263],[52000,0.2585692],[52200,0.3493484],[52400,0.2216691],[52600,0.2171333],[52800,0.6869715],[53000,0.6815709],[53200,0.6335283],[53400,0.3877815],[53600,0.5798678],[53800,0.6190268],[54000,0.5515804],[54200,0.6407838],[54400,0.661016],[54600,0.6682159],[54800,0.6551818],[55000,0.6475132],[55200,0.6728882],[55400,0.6632106],[55600,0.6615226],[55800,0.6394992],[56000,0.6185964],[56200,0.5600776],[56400,0.6256394],[56600,0.6730971],[56800,0.664164],[57000,0.6210983],[57200,0.5921692],[57400,0.6153954],[57600,0.6222017],[57800,0.6625675],[58000,0.6625675],[58200,0.6625675],[58400,0.6625675],[58600,0.6625675],[58800,0.6625675],[59000,0.6625675],[59200,0.6625675],[59400,0.6625675],[59600,0.4593257],[59800,0.5344181],[60000,0.6258165],[60200,0.5988552],[60400,0.6365301],[60600,0.625716],[60800,0.1760363],[61000,0.4212762],[61200,0.4093577],[61400,0.457209],[61600,0.1950275],[61800,0.2225656],[62000,0.1289447],[62200,0.1268931],[62400,0.2132389],[62600,0.5622693],[62800,0.7490165],[62828,0.7292628],[63000,0.6401598],[63200,0.5865443],[63400,0.4498047],[63600,0.1935875],[63800,0.2410382],[64000,0.078197],[64200,0.1877789],[64400,0.0835932],[64600,0.0871433],[64800,0.16475],[65000,0.3440112],[65200,0.608045],[65400,0.629123],[65600,0.5996044],[65800,0.6562853],[65819,0.6575707],[66000,0.6271675],[66200,0.4307708],[66400,0.2876734],[66600,0.3486252],[66800,0.5030261],[67000,0.1415417],[67200,0.4123764],[67400,0.4806845],[67600,0.3528168],[67800,0.4479554],[68000,0.3829834],[68200,0.407132],[68400,0.1232479],[68600,0.306043],[68800,0.3529903],[69000,0.3681506],[69200,0.4355638],[69400,0.5137807],[69600,0.5503446],[69800,0.5239492],[70000,0.6212499],[70200,0.5875054],[70400,0.5895107],[70600,0.6025012],[70800,0.6625675],[71000,0.6625675],[71200,0.6625675],[71400,0.5743005],[71600,0.4582321],[71616,0.4291523]],"checkpoints":[[11531,0.6718385],[18842,0.597839],[29619,0.6137039],[40701,0.6689901],[54600,0.6682159],[62828,0.7292628],[65819,0.6575707]]}]} diff --git a/experiments/livekit-v1-mini/results/smoke.log b/experiments/livekit-v1-mini/results/smoke.log new file mode 100644 index 0000000..0cc2219 --- /dev/null +++ b/experiments/livekit-v1-mini/results/smoke.log @@ -0,0 +1,2 @@ +WITNESS CPU seeded probability=0.580093086, repeat=0.580093086, parallelism=2 +{"load_ms": 123.47654160112143, "provenance": {"machine": "macOS-26.4.1-arm64-arm-64bit", "hardware": "Apple M4 Mac mini CPU, 16 GB", "python": "3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]", "dependencies": {"livekit-local-inference": "0.2.7", "livekit-agents": "1.8.8", "numpy": "2.2.6", "scipy": "1.15.3", "soundfile": "0.13.1"}, "native_binary_sha256": "7afa5899367957328c9916153b5d672392e191c0bfadf1f49325af2e4f3055b4", "weight_identity": "Weights embedded in pinned official binary; separate hash not exposed", "wheel_sha256": "fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622", "native_parallelism": 2, "script_sha256": "e05a0408fcce2a8194966bf594d7324e17cd8025d0b7eb06152e58eb9b46f892", "annotation_sha256": "780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e"}} diff --git a/experiments/livekit-v1-mini/results/summary.json b/experiments/livekit-v1-mini/results/summary.json new file mode 100644 index 0000000..ac24401 --- /dev/null +++ b/experiments/livekit-v1-mini/results/summary.json @@ -0,0 +1,60 @@ +{ + "metrics": { + "threshold": 0.355, + "n": 44, + "tn": 6, + "fp": 16, + "fn": 2, + "tp": 20, + "accuracy": 0.5909090909090909, + "false_reply_rate": 0.7272727272727273, + "false_hold_rate": 0.09090909090909091 + }, + "reference_threshold_05": { + "threshold": 0.5, + "n": 44, + "tn": 11, + "fp": 11, + "fn": 4, + "tp": 18, + "accuracy": 0.6590909090909091, + "false_reply_rate": 0.5, + "false_hold_rate": 0.18181818181818182 + }, + "model": "LiveKit Turn Detector v1-mini", + "official_zh_threshold": 0.355, + "load_ms": 119.18720882385969, + "method": "Agents 1.8.8 local transport, native v1-mini 0.2.7. User channel 0; received int16 prefix /32768 cropped BEFORE scipy resample_poly to 16kHz; last 19200 samples converted with *32767. Native left-padding below 1.2s. No ASR, VAD gate, silence timeout or fallback scores. EOT_PARALLELISM=1. Prefix resampling differs from official librosa and online streaming resampling; not a full service replay.", + "provenance": { + "machine": "macOS-26.4.1-arm64-arm-64bit", + "hardware": "Apple M4 Mac mini CPU, 16 GB", + "python": "3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]", + "dependencies": { + "livekit-local-inference": "0.2.7", + "livekit-agents": "1.8.8", + "numpy": "2.2.6", + "scipy": "1.15.3", + "soundfile": "0.13.1" + }, + "native_binary_sha256": "7afa5899367957328c9916153b5d672392e191c0bfadf1f49325af2e4f3055b4", + "weight_identity": "Weights embedded in pinned official binary; separate hash not exposed", + "wheel_sha256": "fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622", + "native_parallelism": 2, + "script_sha256": "e05a0408fcce2a8194966bf594d7324e17cd8025d0b7eb06152e58eb9b46f892", + "annotation_sha256": "780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e" + }, + "preparation_ms": { + "p50": 5.839478690177202, + "p95": 9.578727371990682 + }, + "inference_ms": { + "p50": 6.118791177868843, + "p95": 7.3341685347259045 + }, + "limitations": [ + "44 selected points: exploratory, not held-out generalization.", + "Point false reply rate is not interval interruption rate; user channel may contain robot echo.", + "Raw zh threshold without production VAD/endpointing gates.", + "Wheel license restricts use to LiveKit Agents; do not use outputs to improve other models." + ] +} diff --git a/experiments/livekit-v1-mini/results/评估说明.md b/experiments/livekit-v1-mini/results/评估说明.md new file mode 100644 index 0000000..0276bbb --- /dev/null +++ b/experiments/livekit-v1-mini/results/评估说明.md @@ -0,0 +1,16 @@ +# LiveKit v1-mini 韩泰评估结果 + +本机 M4 CPU;6 通录音、44 个判断点,正负各 22。官方中文阈值来自锁定 SDK 的 LOCAL_LANGUAGES[zh],未对本批数据搜索最优阈值。 + +| 阈值 | 正确 / 总数 | 准确率 | 误接话(应等待却接话) | 漏接话(应接话却等待) | +| --- | --- | --- | --- | --- | +| 0.355 | 26 / 44 | 59.09% | 16 / 22(72.73%) | 2 / 22(9.09%) | +| 0.5 | 29 / 44 | 65.91% | 11 / 22(50.00%) | 4 / 22(18.18%) | + +模型已加载后,框架本地推理调用(包含异步派发)中位数 6.12 ms、P95 7.33 ms;输入准备/前缀重采样中位数 5.84 ms、P95 9.58 ms。模型构造耗时 119.19 ms,不含 Python/Agents 导入,不是完整进程冷启动时间。原生库报告 parallelism=2,不能称为单线程。耗时不等于端点等待时间。 + +连续曲线每 200 ms 独立计算最近 1.2 秒窗口,并包含精确判断点,非插值生成。全部 44 点验证了重复结果一致,以及修改未来音频不改变输入。本实验读取当前标注;已有其他模型结果来自之前的标注快照,已发现第二通录音有一个判断点从旧结果的 48348 ms 移至当前 48536 ms,其余 43 点时间和标签一致。因此不能直接拿旧 44 点汇总作严格横向排名;旧曲线空心点仍保留原快照时刻。 + +中文默认阈值下,16 个应等待点误判,仍不能认为解决了韩泰抢话问题。0.5 是预先选定参考值,不是独立验证的最优阈值。小样本手选点仅为探索性回测,点级误接话率不等于连续对话打断率,用户声道可能有机器人回声。 + +只评估原始模型分数,不含 LiveKit 会话静音、VAD、超时或故障放行策略。预处理采用判断前裁取再重采样,具体差异见上级 README。模型许可限制见上级 README,结果不用于其他模型训练。 diff --git a/experiments/livekit-v1-mini/run_experiment.py b/experiments/livekit-v1-mini/run_experiment.py new file mode 100644 index 0000000..c87ba33 --- /dev/null +++ b/experiments/livekit-v1-mini/run_experiment.py @@ -0,0 +1,111 @@ +"""Causal v1-mini evaluation using LiveKit Agents' official local transport.""" +import os +for k in ('OMP_NUM_THREADS','OPENBLAS_NUM_THREADS','MKL_NUM_THREADS','EOT_PARALLELISM'): os.environ[k]='1' +import argparse,asyncio,csv,hashlib,json,math,platform,sys,time,weakref +import importlib.metadata as metadata +from collections import Counter +from pathlib import Path +import numpy as np +import soundfile as sf +from scipy.signal import resample_poly +from livekit.agents.inference import TurnDetector +from livekit.agents.inference.eot.transports import _LocalTransport +from livekit.agents.inference.eot.languages import LOCAL_LANGUAGES +from livekit.local_inference import _native +HERE=Path(__file__).resolve().parent +ROOT=HERE.parents[1] +OUT=HERE/'results' +LABELS=ROOT/'labels/EOT标注/工作数据/eot_labels.csv' +THRESHOLD=LOCAL_LANGUAGES['zh'] +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() +def pcm_at(user,sr,ms): + end=min(len(user),ms*sr//1000) + if end<=0: raise ValueError('No received audio') + prefix=user[:end].astype(np.float32)/32768. + g=math.gcd(sr,16000) + audio=resample_poly(prefix,16000//g,sr//g) if sr!=16000 else prefix + return np.ascontiguousarray((np.clip(audio[-19200:],-1,1)*32767).astype(np.int16)) +class Receiver: + def _resolve_prediction(self,request_id,prob,**kwargs): self.value=prob +class CheckedNative: + """Reject the framework's error fallback instead of counting it as a model score.""" + def __init__(self,native): self.native=native;self.success=False + def predict(self,pcm): + self.success=False + self.value=float(self.native.predict(pcm)) + if not np.isfinite(self.value) or not 0<=self.value<=1: raise ValueError('Invalid score') + self.success=True + return self.value +class Scorer: + def __init__(self): + self.detector=TurnDetector(version='v1-mini') + self.transport=_LocalTransport(opts=self.detector._opts) + self.checked=CheckedNative(self.transport._eot) + self.transport._eot=self.checked + self.receiver=Receiver() + self.transport._stream_ref=weakref.ref(self.receiver) + async def predict(self,pcm): + self.checked.success=False;self.receiver.value=None + await self.transport._predict('offline-evaluation',pcm) + if not self.checked.success or self.receiver.value!=self.checked.value: raise RuntimeError('Inference fallback rejected') + return self.receiver.value + +def metrics(rows,threshold): + c=Counter((int(r['can_reply_now']),int(r['probability']>=threshold)) for r in rows if r['can_reply_now'] in ('0','1')) + tn,fp,fn,tp=c[0,0],c[0,1],c[1,0],c[1,1];n=tn+fp+fn+tp + return dict(threshold=threshold,n=n,tn=tn,fp=fp,fn=fn,tp=tp,accuracy=(tn+tp)/n, + false_reply_rate=fp/(tn+fp) if tn+fp else None,false_hold_rate=fn/(tp+fn) if tp+fn else None) +def provenance(): + return dict(machine=platform.platform(),hardware='Apple M4 Mac mini CPU, 16 GB',python=sys.version, + dependencies={p:metadata.version(p) for p in ['livekit-local-inference','livekit-agents','numpy','scipy','soundfile']}, + native_binary_sha256=sha(Path(_native.__file__)),weight_identity='Weights embedded in pinned official binary; separate hash not exposed', + wheel_sha256='fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622', + native_parallelism=_native._parallelism(),script_sha256=sha(Path(__file__)),annotation_sha256=sha(LABELS)) +async def main(mode): + OUT.mkdir(exist_ok=True) + t=time.perf_counter();model=Scorer();load_ms=(time.perf_counter()-t)*1000 + rng=np.random.default_rng(42);x=(rng.normal(0,.005,19200)*32767).astype(np.int16) + p=await model.predict(x);q=await model.predict(x);assert p==q + print(f'WITNESS CPU seeded probability={p:.9f}, repeat={q:.9f}, parallelism={_native._parallelism()}',flush=True) + if mode=='smoke': + print(json.dumps(dict(load_ms=load_ms,provenance=provenance()),ensure_ascii=False));return + with LABELS.open(encoding='utf-8-sig',newline='') as f: labels=list(csv.DictReader(f)) + calls,rows=[],[] + for call in sorted({r['call_id'] for r in labels}): + path=ROOT/'data/韩泰机器人抢话/音频'/f'{call}.mp3' + pcm,sr=sf.read(path,dtype='int16',always_2d=True);user=pcm[:,0];duration=round(len(user)*1000/sr,3) + exact={int(r['decision_ms']):r for r in labels if r['call_id']==call} + if any(t>duration for t in exact): raise ValueError('Annotation exceeds audio') + times=sorted(set(range(200,int(duration)+1,200))|set(exact)|{int(duration)}) if mode=='all' else sorted(exact) + points=[];checkpoints=[] + for ms in times: + t=time.perf_counter();audio=pcm_at(user,sr,ms);prep=(time.perf_counter()-t)*1000 + t=time.perf_counter();score=await model.predict(audio);latency=(time.perf_counter()-t)*1000 + points.append([ms,round(score,7)]) + if ms in exact: + assert score==await model.predict(audio) + modified=user.copy();modified[ms*sr//1000:]=0 + assert np.array_equal(audio,pcm_at(modified,sr,ms)) + checkpoints.append([ms,round(score,7)]);row=exact[ms] + rows.append(dict(call_id=call,decision_ms=ms,can_reply_now=row['can_reply_now'],probability=score, + prediction=int(score>=THRESHOLD),threshold=THRESHOLD,input_samples=len(audio), + available_end_ms=(ms*sr//1000)*1000/sr,preparation_ms=prep,inference_ms=latency)) + calls.append(dict(call_id=call,audio_path=f'韩泰机器人抢话/音频/{call}.mp3',audio_sha256=sha(path), + duration_ms=duration,points=points,checkpoints=checkpoints)) + print(f'{call[:8]}: {len(points)} scores, {len(checkpoints)} checkpoints; repeat/future-suffix checks passed',flush=True) + with (OUT/'predictions.csv').open('w',encoding='utf-8',newline='') as f: + w=csv.DictWriter(f,fieldnames=list(rows[0]));w.writeheader();w.writerows(rows) + method='Agents 1.8.8 local transport, native v1-mini 0.2.7. User channel 0; received int16 prefix /32768 cropped BEFORE scipy resample_poly to 16kHz; last 19200 samples converted with *32767. Native left-padding below 1.2s. No ASR, VAD gate, silence timeout or fallback scores. EOT_PARALLELISM=1. Prefix resampling differs from official librosa and online streaming resampling; not a full service replay.' + summary=dict(metrics=metrics(rows,THRESHOLD),reference_threshold_05=metrics(rows,.5),model='LiveKit Turn Detector v1-mini', + official_zh_threshold=THRESHOLD,load_ms=load_ms,method=method,provenance=provenance(), + preparation_ms={k:float(np.percentile([r['preparation_ms'] for r in rows],v)) for k,v in [('p50',50),('p95',95)]}, + inference_ms={k:float(np.percentile([r['inference_ms'] for r in rows],v)) for k,v in [('p50',50),('p95',95)]}, + limitations=['44 selected points: exploratory, not held-out generalization.', 'Point false reply rate is not interval interruption rate; user channel may contain robot echo.', 'Raw zh threshold without production VAD/endpointing gates.', 'Wheel license restricts use to LiveKit Agents; do not use outputs to improve other models.']) + (OUT/'summary.json').write_text(json.dumps(summary,ensure_ascii=False,indent=2)+'\n') + if mode=='all': + out=dict(schema_version=1,model='livekit_mini',name='LiveKit v1-mini',score='P(turn ended)',sample_interval_ms=200, + method=method,provenance=provenance(),calls=calls) + (OUT/'score-timeline.json').write_text(json.dumps(out,ensure_ascii=False,separators=(',',':'))+'\n') + print(json.dumps(summary['metrics']),flush=True) +if __name__=='__main__': + p=argparse.ArgumentParser();p.add_argument('mode',choices=['smoke','evaluate','all']);asyncio.run(main(p.parse_args().mode)) diff --git a/experiments/livekit-v1-mini/uv.lock b/experiments/livekit-v1-mini/uv.lock new file mode 100644 index 0000000..95cdecb --- /dev/null +++ b/experiments/livekit-v1-mini/uv.lock @@ -0,0 +1,1141 @@ +version = 1 +revision = 3 +requires-python = "==3.11.*" + +[[package]] +name = "aiofiles" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/c3/534eac40372d8ee36ef40df62ec129bee4fdb5ad9706e58a29be53b2c970/aiofiles-25.1.0.tar.gz", hash = "sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2", size = 46354, upload-time = "2025-10-09T20:51:04.358Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl", hash = "sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695", size = 14668, upload-time = "2025-10-09T20:51:03.174Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/eec0465c2f67b2664688d0240b3212d5196fd89e741df67ddb81f8d35658/aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d", size = 24757, upload-time = "2026-07-01T17:11:55.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472", size = 15038, upload-time = "2026-07-01T17:11:54.055Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.14.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "typing-extensions" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/4c/bdccd81e9ee225b69c60e7766c9a5b05364f118f4d383713b89a682d772d/aiohttp-3.14.5.tar.gz", hash = "sha256:5558a7f5a05af9ecf744af91e5baefc436f93c9333e656c27ec253f9a6bbe178", size = 8078052, upload-time = "2026-10-11T01:05:12.408Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/f3/8997f18890a92c79f77fcfbb4f78ca17c2d4ab109e9eb6d31b4e9de194a0/aiohttp-3.14.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d51db97c96384fbfcaf8f4c65922183a68b94f891c3c10c862ef5f6df2adbb1f", size = 832358, upload-time = "2026-10-11T00:59:42.195Z" }, + { url = "https://files.pythonhosted.org/packages/8e/42/084651e9efb5cadb99265f786df60f2a7b353cead7bfd2c87003cb4867ad/aiohttp-3.14.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ae53924aa853a7a2ca20ed4142c7c6b56338e4d4cd999e2980075b9efc2e257a", size = 559636, upload-time = "2026-10-11T00:59:43.677Z" }, + { url = "https://files.pythonhosted.org/packages/3d/fe/92838944e601f0fe195fd3f3ada37e29fbee3d19bfd323fe15937ec79d36/aiohttp-3.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2c473a355f9239efcb72c92d5abfd8fcdb0cc78c8e9af607e72ca12dbb36593", size = 552588, upload-time = "2026-10-11T00:59:45.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b8/dd9b95c5c20ceae1b47738e656bd79e9883e3117a9cc8b143901eb604e9a/aiohttp-3.14.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e8fa6644e541fcd7e02430588c7fc93b602c1778ea0bc345505db76b61cfb4", size = 1928224, upload-time = "2026-10-11T00:59:47.294Z" }, + { url = "https://files.pythonhosted.org/packages/c6/47/70010cd2ba8746968d53d433ff328c33f06a66c99da5f3de759c64a6b2eb/aiohttp-3.14.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:579f97d5120f2971876d2ddca2968135f6944d00c44c3a6590ad7d86ca9b403f", size = 1877674, upload-time = "2026-10-11T00:59:49.472Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a1/b026f071dbd87f0bdba86b92d47e46f3899e3ad7143b6e0fe7e7887090b4/aiohttp-3.14.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24409db442e2fb6e766bc7f3943851a8381dec3098140e43bb2e843b79e31b12", size = 1985850, upload-time = "2026-10-11T00:59:51.296Z" }, + { url = "https://files.pythonhosted.org/packages/36/d1/f7b6f6f8c3cb5a71b53baeddc2e70c224c28b12a23a55c42994c504019b7/aiohttp-3.14.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e8f97c0488ffda3082766ac0f2c8150a9a58c4d05788330e479cfd449b37939", size = 2105471, upload-time = "2026-10-11T00:59:53.191Z" }, + { url = "https://files.pythonhosted.org/packages/42/74/2a2b22953de15c6c8a80debf26db3047e4e8a5a5db6dd7c2c6c01eec0605/aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50a195903119008fe9cc68710535eb37f556ffffd6a7759afe70a2c145587045", size = 1929915, upload-time = "2026-10-11T00:59:55.609Z" }, + { url = "https://files.pythonhosted.org/packages/33/ad/f80e8d33933d0eacd0217efa3b7fb32c9f48ed480ed0db53cf9948bf474f/aiohttp-3.14.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0133c3c3b54a0bf1e71fa5c1ad95c93f07fd54e24ef1fe182f5122e1573d2bf1", size = 1773832, upload-time = "2026-10-11T00:59:57.611Z" }, + { url = "https://files.pythonhosted.org/packages/04/a4/0273d239f3e3bb69438f209c64c82e1f98dc60d5db264795e41f7dd05dcb/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c172db893e516e1358e65a95ee20b7ce7173963eefe318b6ab2a2220688b999e", size = 1901001, upload-time = "2026-10-11T01:00:00.605Z" }, + { url = "https://files.pythonhosted.org/packages/16/ed/7dd439d26c654645bc34ca3c9a822fc11c1c51801fed1cefdfe1cc41c1f6/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f2a7966bda23dd85051f1661ce0ace38d6890e05ec6c357ecae9d2479cba377e", size = 1907218, upload-time = "2026-10-11T01:00:02.699Z" }, + { url = "https://files.pythonhosted.org/packages/32/dd/86249c3b8248562a17fd3e22ee0c164378d65766f01aceef62cf52783710/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4887d130a7bbfed3a85493bb5a25e5b5b558d40c1d986dd16970d2bb26d63793", size = 1958650, upload-time = "2026-10-11T01:00:04.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/ca4d53d68f683ce195807fd0aeb063bf6d1c6b39343fff234c9524e8d5a9/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:225c579c23b68b343cccea27a7e06e3bd8ec23a09c30b427eb3f1e4ca6239b20", size = 1760057, upload-time = "2026-10-11T01:00:06.978Z" }, + { url = "https://files.pythonhosted.org/packages/6b/42/005437ffd7fa56c2ce3347add40404b654a32754ce91f2e2a14b9e5ab2bc/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ab52d8f1fc1b64821c1fbad64a647ed6203627004059a6d1ed4f0858a1499703", size = 1978081, upload-time = "2026-10-11T01:00:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/3a5b66fe1b7b23d3c6524350817ed55de5feb7fbb4cccba7cbe044d118dd/aiohttp-3.14.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb131d775a1573c1aee66656bd78b023577bbdb6cb8349a07773bd4f73e68a6e", size = 1922954, upload-time = "2026-10-11T01:00:11.035Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/d08a554f281d42fd7c6b2b6dd7738f3e3a7a9f657ddd87e11ca2091cdfe3/aiohttp-3.14.5-cp311-cp311-win32.whl", hash = "sha256:e87046c8ff77a8decdb6a41d8ab25824b47531b2da933aeab0c1e21c7acff329", size = 488101, upload-time = "2026-10-11T01:00:12.933Z" }, + { url = "https://files.pythonhosted.org/packages/0f/15/52b5e65f02b33686ae49f1518548ae4f5a7adaf31d9d3c54fa12a143137b/aiohttp-3.14.5-cp311-cp311-win_amd64.whl", hash = "sha256:6f275c11d1aa6d4c458e05a68be084efe3c55a113d99e3f46a318098e52948fc", size = 512575, upload-time = "2026-10-11T01:00:14.743Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b9/bb75012635f3defb0f7cbb7c4ae391e36bb9cb3fbdca3b9944e2ebebf743/aiohttp-3.14.5-cp311-cp311-win_arm64.whl", hash = "sha256:b032a0023eb41d768ce77d83210ab2a3c389bc0b09313273c7e1eca48c10a755", size = 493179, upload-time = "2026-10-11T01:00:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/68/30/173960c42b05a6c59f7558e4b12a4b0d9ba376cf6aa9bde7f9e08a30ca8d/aiohttp-3.14.5-py3-none-any.whl", hash = "sha256:efc21a454892828368b11c2c780de0ff8bc991f73f6b99c6b66e56205470929b", size = 279517, upload-time = "2026-10-11T01:05:08.523Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "anyio" +version = "4.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "av" +version = "18.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/f4/f22114d30d3435e38c6af2b4870f37b864403dca6ae7af747a289ce0a18e/av-18.1.0.tar.gz", hash = "sha256:47bfc286e1bc9de7ab4681fc2b575cd2460a66919d31ffe1bd5aa54fae531a28", size = 4451061, upload-time = "2026-08-12T22:28:18.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/d4/d7cdc8bff143c17a6d35924375ae28dd692cacde38700a7d419fde54f44a/av-18.1.0-cp311-abi3-macosx_11_0_x86_64.whl", hash = "sha256:ae75d8bb6467895ed1f8572ededf7ffa49eac07f6e483222f5d7d62a41d12f04", size = 22546147, upload-time = "2026-08-12T22:27:11.851Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c9/37a619297492256b77d5ed906e7d8166c10a26ed251dccf1ae03ab19bff6/av-18.1.0-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:b30a4e8d934558e19602b68998a4d9ac9f250fa0dacef216f7e8e40153b13316", size = 18217603, upload-time = "2026-08-12T22:27:14.713Z" }, + { url = "https://files.pythonhosted.org/packages/d9/84/2464ffb64c08c5ce8b522c8e74594714414e3b0575267652c5c51c0574b9/av-18.1.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6fc837cc51adf80331ac850779cd53b5d4c4460b0ebe9057a02a921c6736f19d", size = 33640142, upload-time = "2026-08-12T22:27:17.835Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/204dbfc3e08eb4cdc6e6ff57be02150bc44523ebdb50182d10025792ebd9/av-18.1.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:8a032e8d8ebc73dec079364b9b4a6837638a2d106e8472314e685ffbf163e700", size = 35786210, upload-time = "2026-08-12T22:27:20.984Z" }, + { url = "https://files.pythonhosted.org/packages/e1/99/b0d04ec553ff9a7e00455458dfa3a39c8a8f627b273056b4e5fe57d590de/av-18.1.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:3c8b1f8b46f99d52e2d8b0ed5d0cdadf172d24794d46e2077b16e44ed08e26ff", size = 39379798, upload-time = "2026-08-12T22:27:24.432Z" }, + { url = "https://files.pythonhosted.org/packages/56/b1/e00d4feae59160149df6126585e726fdc6300798fd40c5dd324879e81f68/av-18.1.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ab5ac081bc9eaf54109120d4e56284674fecfbe520d9aa1707c7fa911ec5f4d2", size = 34690321, upload-time = "2026-08-12T22:27:27.769Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/836fa987e3084d11a21489f11357fb24843ef3aa8faf74ddddfc603d5062/av-18.1.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:191224788d87af06c31784a395bb73f14b72f33d7f4871ace0157de2abdc6276", size = 36859932, upload-time = "2026-08-12T22:27:31.403Z" }, + { url = "https://files.pythonhosted.org/packages/33/b4/76ba21e46704f632004276b85289a1582e95f5eff760436d6149875a1881/av-18.1.0-cp311-abi3-win_amd64.whl", hash = "sha256:ea1480b7a8d5405cb5f382b344731bf125fd2c1c6fae3964f6c48595628387ff", size = 27595679, upload-time = "2026-08-12T22:27:35.177Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ad/a3135884c5753b09773176b97201ae602f67ad14206c395ff838d66bf9b0/av-18.1.0-cp311-abi3-win_arm64.whl", hash = "sha256:5509ec12aaa19fd6601de13cfa6f4cdad450da07982118510592875d970454d6", size = 20257584, upload-time = "2026-08-12T22:27:38.472Z" }, +] + +[[package]] +name = "certifi" +version = "2026.10.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/1c/f41d4e74c28ab327ff3acd36053f7ea506c55872d7a90b0fa71aa3ab0c89/charset_normalizer-3.5.2.tar.gz", hash = "sha256:39de2a259fc954455c57274dc94c79d5842774e1247a016aff30bc0efed0f4ef", size = 172659, upload-time = "2026-09-30T04:39:23.398Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/67/6a0b94a7960d5e1b5eacd2fb529f3fccc47db4644f7f0a7cfdcfc3be578a/charset_normalizer-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d21b8b13c7592db2ac5e544a6d83187b995257472b0c9e8351b6d507ae37ed6", size = 370642, upload-time = "2026-09-30T04:35:06.91Z" }, + { url = "https://files.pythonhosted.org/packages/fb/94/01009e13b94041599004edf32e56e382c24e570f60f79bab8efe45cfe1eb/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d760fe2a4d7c3b226cb9026d6a842868d52a7901bd98420e1baf14e80da85cf5", size = 259280, upload-time = "2026-09-30T04:35:08.448Z" }, + { url = "https://files.pythonhosted.org/packages/66/85/3b5358f60a13210f0b67d3755c168ef758701b021e655d88d4da28554467/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9790464842f85f437dbbb54417eda1e0e6bfc52dd8d22d6fd1c994b73b2dc74", size = 245335, upload-time = "2026-09-30T04:35:10.104Z" }, + { url = "https://files.pythonhosted.org/packages/74/75/77c1c479b09ecd751d1e767b251ea5c14d4d50ff757bf404afab2692f600/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4685902cf26edf013ed7a3da0f426ebba7a00ebb9541386d835afbf002c11cab", size = 291707, upload-time = "2026-09-30T04:35:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0d/363f78cacb70f58f15f4b083961bbd9d292f335d3f5c66fc4f1cfe69cb90/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4495c5002a7b28557e7e222e77e0b661183e432b7d6d2e788101e3f240e05b8c", size = 286747, upload-time = "2026-09-30T04:35:13.022Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ed/cf505d3011ffceb12c2067a7a5d3cfe92b875d4d44bb0ff0d69375e2c184/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:211d5a3eb6af8f513b8d4ca19a8c1b7accab1b5f0d3175f9826b03c1a920dc1f", size = 269972, upload-time = "2026-09-30T04:35:14.606Z" }, + { url = "https://files.pythonhosted.org/packages/15/d8/f0a93a431d170e7ca681d4f6650fee3de934d18560e474e7267eb4b0f987/charset_normalizer-3.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef4fcbf3327382cd4c9f540babd61248208af7b93eec4de397b4d5f58a09e288", size = 269339, upload-time = "2026-09-30T04:35:16.087Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/9b2bd1c5b7af02462c9752d33994834ff972a96b4c483eefde9e594488e2/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd16aabe4a02a297c23417aa17ac6299dbd8c49f673bcd645b4929b11f5a4400", size = 261683, upload-time = "2026-09-30T04:35:17.488Z" }, + { url = "https://files.pythonhosted.org/packages/76/a5/cac540ab0fd61f3fec88ad3dbb64509e71424593d73cfdfff5ab3e4db279/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fb9e68df06293761f9fe66ade60a9bc6d0f5e42b8acf2939a9158af86ab0e5bd", size = 248143, upload-time = "2026-09-30T04:35:18.849Z" }, + { url = "https://files.pythonhosted.org/packages/71/7a/ff467301deef2089fad87f72df9e000a26a78fec7acbb18e1999371b8369/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:59f63901b0031c3136cf64704dcb21de0bbae62ce2c9529bc39d27665463de37", size = 292358, upload-time = "2026-09-30T04:35:20.326Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/22d7e785d1e210afc2e2f58600dd1799d17a35665faf84383f002826c5f8/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:304d5463e65a35d7bb0850550e0780395395f6fcf452f04db7d5ca7cecc425ac", size = 268766, upload-time = "2026-09-30T04:35:21.72Z" }, + { url = "https://files.pythonhosted.org/packages/ae/91/e8e946267f1c2d9e2bd651726e2fbd2addf02c4d36cea5069e32ca9d7bb5/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9cf9b1a857e25c4baceeb3624e92a56df3668f398c4acba74e174d81fb4d1d3a", size = 287432, upload-time = "2026-09-30T04:35:23.273Z" }, + { url = "https://files.pythonhosted.org/packages/4e/88/7561d8a88d555e7df6623abe7c0070b4baf47549b9408783a2ae0a1a6cf7/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:114e4d0c92d618409ed82a99e22b5c5e768fe995f2973f78265f4524f49d4640", size = 272470, upload-time = "2026-09-30T04:35:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/35/7e/578c702301ec036f01455f30744a08d2b42f6ab35b9b2d4bf8cae0ef2a80/charset_normalizer-3.5.2-cp311-cp311-win32.whl", hash = "sha256:2625388c6c754520c37abaf3b41eb34d1cc4a373f457898f08606c8e362b891d", size = 186688, upload-time = "2026-09-30T04:35:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/e8/fc/fdf8cf52ff21cd5bf158f20978991cf985325842f74283eb6df26c8a39d8/charset_normalizer-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:87e50a3e7cb90af586b6c5faf23e302a970415ac73bd7bd90a515a04b427ef96", size = 214932, upload-time = "2026-09-30T04:35:27.796Z" }, + { url = "https://files.pythonhosted.org/packages/97/66/3e45a506d8110b632541faf9a9470185aa9878f1ed44020f31346c1c5e5b/charset_normalizer-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:254eb48b9fa5ee9898a3c445825a1f340fe53712a098904b39b0bddba8ea3cb1", size = 202828, upload-time = "2026-09-30T04:35:29.259Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ab/176fbfd5b64939c55d652366aa5b9ef1d767af207a3aa6ebeb0d226c484d/charset_normalizer-3.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4275811936e2f06feff5e598fb42a1b7ae852da8e39605211892b56b81a34efd", size = 331815, upload-time = "2026-09-30T04:38:26.216Z" }, + { url = "https://files.pythonhosted.org/packages/7e/84/371eac6b30bdbcbf2d632a1a01809103459216fcaae61b8b8d922c1bfb8a/charset_normalizer-3.5.2-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1c50fe28bbc2ced33386f298650d91218076c05420e6cbd790b913adc41659e7", size = 253276, upload-time = "2026-09-30T04:38:28.032Z" }, + { url = "https://files.pythonhosted.org/packages/43/6f/c4fbae58febff71709c51bc7e18fdfa55341dc382704740f9f0cbf03817b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19fbd981a488e22cd04883659ca6b08f50b5974f9fd7c95655ef6a043e5893f", size = 241239, upload-time = "2026-09-30T04:38:29.732Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/458c3f42164a07d0c5210798e9e704b39e540a6793b05aba67f3a35243a9/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0fed1d06615f022ee3b13caf5e8b180cfea32bb2c5aded8a9d44277afc040f93", size = 231121, upload-time = "2026-09-30T04:38:31.462Z" }, + { url = "https://files.pythonhosted.org/packages/09/54/ab9e89367076f6331bb6c65c4bf14a5361fa5191cb6561bf534f18504e1b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:838dcc90063569a0448120554591a1d6c4a4ffe11babf048908793154ab86ade", size = 260350, upload-time = "2026-09-30T04:38:33.239Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/061431ecc688d9d76602502cb57cc01e691e682c18f1beb45f9673b5bbd2/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ce45c6627b22c47e390bc91a41c3d13032192e699fa0bea96e9671b373d69b0", size = 255430, upload-time = "2026-09-30T04:38:34.865Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1f/20c8949f0676f7ab811abdeb7f4d7f1cbc6e61ff20bef08b44edeb092bc8/charset_normalizer-3.5.2-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0774bf9bf620249fee3e0b8b9fd3065de213be30f3aa94ce2494b3b638949e26", size = 250612, upload-time = "2026-09-30T04:38:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9e/46f2fa4c431fc98c4ae76a8cb5bdca54e0341e3cfc3fcfd8e82740250818/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1db38f4c5496827c1a501846d64d14c3b80c7e6714e406cd7dc36a9899fa1011", size = 242083, upload-time = "2026-09-30T04:38:38.26Z" }, + { url = "https://files.pythonhosted.org/packages/bd/39/559be29a0c0f086e0bba6922babd38916cc5e0b58ced4de13ee01ea05508/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:304d8e4d493af723536393eee0c689eb7813f4a474c8b479dee63f1fdd98f621", size = 232738, upload-time = "2026-09-30T04:38:39.81Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6c/387b0e4f756a282831c1d9fc6aeb6c51ca4507ca202767c8de15ce9b12e2/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:9b7f416ff0978e2f2249330527f0ad6fa02f4932e6199692d3b52da2048c19e4", size = 260703, upload-time = "2026-09-30T04:38:41.346Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/1fdf015f09ef449f50d3ac4b67c90887c9c318b727daa95cc4f866e6521d/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:01077390b03f7988f11d700a2194e69b119741a86b1a638b1db88891e3eced8e", size = 247622, upload-time = "2026-09-30T04:38:42.937Z" }, + { url = "https://files.pythonhosted.org/packages/dc/3c/8e7b8a5671ad5d433669fb2a76f1a0164df2d9b1718b0206bc2a16d840cc/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:7e841fb9010836c992c9f12fcbd43a831de93a5f726fc1ccd8ca1d0268c5014c", size = 257500, upload-time = "2026-09-30T04:38:44.604Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f0/45b579df5cabc1d5d53ea1cc35e8437d3ca768c0acccc7041517cb6fbb32/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9cae88599c7219005d879f98e5ed53341e9a122af585e1091200358a3003d2a0", size = 255100, upload-time = "2026-09-30T04:38:46.289Z" }, + { url = "https://files.pythonhosted.org/packages/31/68/fdec18a343f5fb3f310588dd478b09ac4799e0b187dbade3a8cd776f03ef/charset_normalizer-3.5.2-cp37-abi3-win32.whl", hash = "sha256:01b0c0d2262a9e28e8484a278c7e1b5d650e3ac8cf2683d2967e25899f208bdf", size = 174499, upload-time = "2026-09-30T04:38:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8a/b618149cc5207943a0242068d7a27897f56a62947b5a039085f2a22029f8/charset_normalizer-3.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:9f56f72050826f63dcee7a7f55b0a77168cb3bfc553fd405e7f8f9ece75a4036", size = 200092, upload-time = "2026-09-30T04:38:49.707Z" }, + { url = "https://files.pythonhosted.org/packages/03/cf/4c66866fa9e2b1c78e3c911516d1de497a677b7ac60f1eceda74ce777ca3/charset_normalizer-3.5.2-cp37-abi3-win_arm64.whl", hash = "sha256:40ab6bffa02ae10a0581e6c198be7d2d8ca5c2a0c64e4ed3465d766df457573e", size = 294363, upload-time = "2026-09-30T04:38:51.312Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/d07d7862a62ffa6d79d68074d14823243dd235a77c45262acbf6adeb28bf/charset_normalizer-3.5.2-py3-none-any.whl", hash = "sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685", size = 68872, upload-time = "2026-09-30T04:39:21.828Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + +[[package]] +name = "eval-type-backport" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/15/273a4baf8248d6d76220723c3caf039d283774b31a7c46ba686120145b76/eval_type_backport-0.4.0.tar.gz", hash = "sha256:8397d25e6524c2e67b9576bb0636be27dea2192017711220c534ec2de921e9b0", size = 10260, upload-time = "2026-06-02T13:22:06.059Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/a7/bb99bf5e6f78736ddb53480f2c3ff3702ffe2196a7c5e1661c03081d398e/eval_type_backport-0.4.0-py3-none-any.whl", hash = "sha256:ad5e2a8db71b6696a56eafb938b0f5a337d3217f256b8e158b469422b4772b20", size = 6432, upload-time = "2026-06-02T13:22:04.827Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/2b/6ce81972d5c8cab9705fddce3153be63222d9e12fd96f8baba5038a744dd/googleapis_common_protos-1.75.5.tar.gz", hash = "sha256:c7a866fc34ed29a3b10af627a4b9b1dc2433313ca6e959f0ae4feb132047ed72", size = 156513, upload-time = "2026-09-29T19:26:14.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/b9/6b29500a1c581ff4d77fd83c6568d068bee06f1b139fb6eb0a4f2d4bce8a/googleapis_common_protos-1.75.5-py3-none-any.whl", hash = "sha256:d7285525c23039db98f2463e6d5a4f9b958b94d497f03a844ece3259c4e72d5d", size = 307737, upload-time = "2026-09-29T19:25:48.735Z" }, +] + +[[package]] +name = "grpcio" +version = "1.84.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/4f/4435c0aae54657258d9cfcba78598f3d9e5fe4c82ff18d78558567b90faf/grpcio-1.84.0.tar.gz", hash = "sha256:19aaf172fc2edbefccce3f6e92c5150975dbe56c45744e9e87cf72ebdf85bfbe", size = 13493876, upload-time = "2026-09-14T06:59:33.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/b9/46146728b3f4a5c7e34c17d0ab724d58b5456b116e76dc77d3ef4e79b135/grpcio-1.84.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:4aaeceeb7fa7d824c322d1ec3208c8495c88478a927295553235435fc49043ad", size = 6454572, upload-time = "2026-09-14T06:57:14.651Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/5d668b4102637410d700153fd12d6a798e3ff8308bd9dcbaeae93f191060/grpcio-1.84.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:06619ba1515e5ee69fb2a514e95dd8be05ce74cb3928d5b34f87f87c86fe3c27", size = 12359529, upload-time = "2026-09-14T06:57:17.202Z" }, + { url = "https://files.pythonhosted.org/packages/18/2a/52e29c02047a493f15a78c0502bde4d3fab7c19c7813944d367cd501811c/grpcio-1.84.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:158c1c11cfb61b4849c3caf4d52de6f5ecd376e14446feb4a90dc95a90d616f5", size = 7029927, upload-time = "2026-09-14T06:57:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/0a/11/9962b313553647abb091943e0721e4a1662ecc63cdfe930abf00abcce47a/grpcio-1.84.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:a9383401d9f116f98cacd4eba6c505a6edb80ba65badfc8e8ed8ae64983bcc44", size = 7782268, upload-time = "2026-09-14T06:57:22.381Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b7/14a9413cb7d4b2e782b4f79c81a918610caedf55138ab5916f5fdd4b002f/grpcio-1.84.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bd8ea8eb3817b226057cc1c0e7ec4b378dcda52043b972b6ff12b1152178967d", size = 7187959, upload-time = "2026-09-14T06:57:24.686Z" }, + { url = "https://files.pythonhosted.org/packages/ee/3b/6cc8e6aed8f23be40f52af341e5d4595ec3ec8d7572271a692b5c1212178/grpcio-1.84.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:756ea5c2da00fa65c930284892d2a9706828704ca3ba40b4c51c4834eb39fcfd", size = 7737554, upload-time = "2026-09-14T06:57:27.5Z" }, + { url = "https://files.pythonhosted.org/packages/3c/7e/6f61002a01802ca9675e1b3599c9b0f9f3cf168ded94ebacc02199309f88/grpcio-1.84.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:28d2609691da93051e998495108bbddd2a9f7a561253bae94828d81290f30c15", size = 8792681, upload-time = "2026-09-14T06:57:29.731Z" }, + { url = "https://files.pythonhosted.org/packages/eb/84/8bec1ae7e6732a9b435a394ddfdfffde46c2620ae0109823f7cce1a54455/grpcio-1.84.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:27b8b36200a9fbee6e120246f4a8a41657549107ef19fb2c819c4b2fd524f39a", size = 8145493, upload-time = "2026-09-14T06:57:32.672Z" }, + { url = "https://files.pythonhosted.org/packages/59/84/c8c7bd210d657288f18af06522f150f61e81ea14fd3c7c135beed697c5fd/grpcio-1.84.0-cp311-cp311-win32.whl", hash = "sha256:465eef3d17e59ad22a556fc0138f7c7c799df426734344daec42c797d49fda99", size = 4495596, upload-time = "2026-09-14T06:57:34.799Z" }, + { url = "https://files.pythonhosted.org/packages/da/1e/da99356b3b573af357d059753a47fba54f1ca1a9c0e4deccd0210cb7f4ba/grpcio-1.84.0-cp311-cp311-win_amd64.whl", hash = "sha256:f9a456bdbed52a01c9ab8423bdebab04a5363c78676edc55ab9b58bd13bdf9e1", size = 5259900, upload-time = "2026-09-14T06:57:37.067Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore2" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h11" }, + { name = "truststore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/61/afa9d6b7452f9eca73f73d45324eb0bb52f098fd5e6049bf6b8263be9b4e/httpcore2-2.16.0.tar.gz", hash = "sha256:c72cd0413563b17e1cd8354677dff887466f8ec2551679759e93126534428643", size = 69886, upload-time = "2026-10-21T07:09:45.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/c2/ce417c397afa5181f0e3c6ff01a4d01639414e1adef08730d97571297151/httpcore2-2.16.0-py3-none-any.whl", hash = "sha256:5c4358319f2602d984ad93182c9fee5160f22e9da7babdda870a5e7c4e2dc34f", size = 85070, upload-time = "2026-10-21T07:09:42.802Z" }, +] + +[[package]] +name = "httpx2" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten'" }, + { name = "httpcore2", marker = "sys_platform != 'emscripten'" }, + { name = "idna" }, + { name = "truststore", marker = "sys_platform != 'emscripten'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/73/5ca2cedf5e4e50423d1c258877865a6b62793633b561c58499f8aeb33b7e/httpx2-2.16.0.tar.gz", hash = "sha256:0d54c98128e8f2ff7fbbde0fca8c359e5f032edeaaaac443cdb7f31f685bcd7f", size = 103116, upload-time = "2026-10-21T07:09:46.348Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/3d/2e4bc4fd1ef9770871669adb348d612a6e4786b303a23f9935b81c48dd60/httpx2-2.16.0-py3-none-any.whl", hash = "sha256:fd2c5d7909e8d86fe92d53020c310ca0e4e431b838c207c5754b9bbf0308d49a", size = 97880, upload-time = "2026-10-21T07:09:44.01Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, +] + +[[package]] +name = "jiter" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/1f/8176d92e001f86505424b41664032ae26a882bc9ca41a32c803f373f9195/jiter-0.17.0.tar.gz", hash = "sha256:03e432f226a453851079fb84cd17c6da9991eab723e28d716f14ae3d906e0c12", size = 229037, upload-time = "2026-09-12T15:14:14.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/50/17afdaffcc8af4bf4fddf2b6c26d066553aa2221983f2affcde435fc2532/jiter-0.17.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cfafd7be8b16ceadd298db542cead37cddc211c4c49e04ad2596924df18625b1", size = 290699, upload-time = "2026-09-12T15:11:30.085Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/c185d32d5b3657ad84da26c84a9eb15f00aa1b39d6882fcc0052dba2d7c2/jiter-0.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8adca2e793288e5f1bb29279bb439d0d3cfbb50eddca7e7e6ffd42ff4f482406", size = 324246, upload-time = "2026-09-12T15:11:31.3Z" }, + { url = "https://files.pythonhosted.org/packages/24/7a/8b8903bfe91a90a8fa1ec9b45d9fda5b6287a386693b69d720a882d73f3c/jiter-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30c692d567ba206c7cca38c9d1d0ccc70c9786290173c184d871ca12e9981ed7", size = 343275, upload-time = "2026-09-12T15:11:32.758Z" }, + { url = "https://files.pythonhosted.org/packages/a2/5d/6821fae2abc71a3c3a84bef8598d31fc4f27d9edfb55bd8f6c08afb8ef93/jiter-0.17.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81c83c0abe614446a283d994d2c07c4f58632dea2cdf66ba9e2921bb8ccd593e", size = 328034, upload-time = "2026-09-12T15:11:33.9Z" }, + { url = "https://files.pythonhosted.org/packages/f3/51/8e7a963b1c2dfdc01d6228b004f50a2a3d7c46f0549d7b096a5d15ef81d5/jiter-0.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:073dc68c1a700c8fc480e877864a6b6ffc887533e261f4380c08c16bf09d057a", size = 342457, upload-time = "2026-09-12T15:11:36.414Z" }, + { url = "https://files.pythonhosted.org/packages/73/27/8b2a267e3bda45d9298331cacfe3521e761f0a2b05ad10a23c6548d08358/jiter-0.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:492f37230bbf9581ab2c17bcda862c249afb9ae2e3ab2dd6db59943bc4cc3153", size = 351271, upload-time = "2026-09-12T15:11:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/4a/8f/5c74e5e142a6736833d7a991ab04d5c0738038dc44db05af0bb3cd2559e8/jiter-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5888fe5abc1ca2fa834a3e1b4c7ef0dcece286a7d7e95a609ef0934b777b9fc9", size = 346052, upload-time = "2026-09-12T15:11:39.722Z" }, + { url = "https://files.pythonhosted.org/packages/98/9c/f54920f06d1696e80b1be841d56412871c6856b1b1e3b541b1ed35346554/jiter-0.17.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:84ac78df457e1ee3f7e733bd114823302ae8c5ad5542d7e6647d92ffaa090a04", size = 328915, upload-time = "2026-09-12T15:11:41.065Z" }, + { url = "https://files.pythonhosted.org/packages/21/53/080f126863bceb055db9f1fd5431485eb493b35545a3c35e961ac18cd924/jiter-0.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7573e80232c5bcf80c24c038cf7e53a463f5c3b1dd1dd4109d66304f4dccc233", size = 337240, upload-time = "2026-09-12T15:11:42.356Z" }, + { url = "https://files.pythonhosted.org/packages/f0/76/3ab742823a0e0e70e143c6c90a482d9d90396ac2445e7b9483eb7245d3b5/jiter-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:11902505d401691720f5785c15b02204248526edee11b635cd6c40cd52b81599", size = 484917, upload-time = "2026-09-12T15:11:43.549Z" }, + { url = "https://files.pythonhosted.org/packages/14/e0/8ca71bc8b9cc9ed96c9da565863e00f3bb875a8fb82abcf03e975e067902/jiter-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:64846211a2debe7c071d2146d2283d2b0c1c93dc8fd5fb7794faac2ca6061b5c", size = 521868, upload-time = "2026-09-12T15:11:44.704Z" }, + { url = "https://files.pythonhosted.org/packages/c1/02/81f8719dcedb75713082a2048405376c81f6546b75af8167f3bba01a1ed0/jiter-0.17.0-cp311-cp311-win32.whl", hash = "sha256:c19b9357309b8cc6de8a48fca8e44a8c9c2feaaa2f5896d037fa505d48fcab80", size = 187844, upload-time = "2026-09-12T15:11:45.874Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8c/59693f348488f01ed12d862e99ab8da14961152d3e9c39b9b1ef363f3572/jiter-0.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:e654b6b04e39c9cb19cb8b04c6ddf1f2db07751fa14156413969fd78bad0e5cb", size = 231402, upload-time = "2026-09-12T15:11:47.083Z" }, + { url = "https://files.pythonhosted.org/packages/fe/89/fb35e286463cb9f01edc2c4e47df6e5477ee36bca5096414e9ea87985588/jiter-0.17.0-cp311-cp311-win_arm64.whl", hash = "sha256:3ad556afc289f15d2b181b941982d01f06190863c07440185b9f354e1bd2def3", size = 187006, upload-time = "2026-09-12T15:11:48.245Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3b/05a917204413e2e09906dfa35240c1021227aeb56c7305abea9562c598b4/jiter-0.17.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:eaba834b72d573547b9d966465b3394b749d5e14208cc70acb63aca37619ab33", size = 288143, upload-time = "2026-09-12T15:14:02.998Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e1/a1cd3c0cf8f79945939e4f8caae9990529f67d7f77f671769f73956329b9/jiter-0.17.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:51e1519d676a9f14dad9c2a411170d43b022ddb7989562df4e849b261ce127b2", size = 281847, upload-time = "2026-09-12T15:14:04.414Z" }, + { url = "https://files.pythonhosted.org/packages/72/b4/9b797679e09f4a46c32986aeb3670bd9bc562fc0b373c7a0ee5c5dce1206/jiter-0.17.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ce4feb52493e3513335b2accdcd75605652e4632772d3c8c2f7b86954d7f39", size = 304797, upload-time = "2026-09-12T15:14:05.733Z" }, + { url = "https://files.pythonhosted.org/packages/25/4a/0d77415b27a00d970e4e710f7c1de62e96a11c4cab3ed1add0015af04626/jiter-0.17.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29f49b325e0234e4ad9ecca5b861ffbd09b95ccac9bd46fa55841b6e56eea5fe", size = 307815, upload-time = "2026-09-12T15:14:07.105Z" }, +] + +[[package]] +name = "json-repair" +version = "0.63.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/29/653c36e0de80f7048f01298a9098f1c66bb9da162e92ad6a6e2c3202cc52/json_repair-0.63.5.tar.gz", hash = "sha256:75a6a1a4ea954935dd3fb69b6e49ac0e3e3d69b4290127a0c8d37af93b709f3a", size = 52945, upload-time = "2026-09-22T18:36:08.745Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/a4/222e2581667c326183a87df229e772140fbf3e5dc03ec73e2a0e74804114/json_repair-0.63.5-py3-none-any.whl", hash = "sha256:0e39b3066f7829b4bd7fc614e463cfd4ff7a4c46f82f5b65431fc11e29a74c81", size = 51334, upload-time = "2026-09-22T18:36:07.05Z" }, +] + +[[package]] +name = "livekit" +version = "1.1.20" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "numpy" }, + { name = "protobuf" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/dd/651c7ad31d8f80b43511b2cb9ee1a8f5bf50a31ed4399182d09e70777e90/livekit-1.1.20.tar.gz", hash = "sha256:93f0ed9e8ee9ef356da6cbf71f98edcc891678da6872946a87e34e1458528c9c", size = 394319, upload-time = "2026-09-23T20:33:57.147Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/96/2c0ab8b78779f9241017a6e1980dd24c95e7509870d9d3de9bd4acf4f739/livekit-1.1.20-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:253e4d15a78bbb408e926d0b317c7a47c2ca3f6bb9f9d2c7d10528a49f9b4fd9", size = 10485365, upload-time = "2026-09-23T20:33:43.35Z" }, + { url = "https://files.pythonhosted.org/packages/08/73/9d35e3ffec6e428b040d3b599d4e1ddf554d2046dacfffeae1c20c972f8f/livekit-1.1.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a29120a0278a20ede380ac719cd084e39241546cfd3b415aa503c7b8a21afb4e", size = 9307974, upload-time = "2026-09-23T20:33:47.143Z" }, + { url = "https://files.pythonhosted.org/packages/75/55/dd84369c741eb04a8ca92f7c586f6d24aa0491d4bcb81fa275d91568681c/livekit-1.1.20-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:c29a5f966806db961a0607ca8e2e4957e6900bbd44710f5f618b284043be584c", size = 10602682, upload-time = "2026-09-23T20:33:49.514Z" }, + { url = "https://files.pythonhosted.org/packages/cc/15/a53a370dc5b1f2a7c3806f24f1543fbad98bcadb0588f28f938fc338a627/livekit-1.1.20-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:83c0ea54d7ff505e92c3e88943e050e54825b0bf0f7e90652fb126eb447b3d76", size = 11832028, upload-time = "2026-09-23T20:33:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bf/dccec2015a5594eedf26c605fe4a2682d152fabcae0cce4b71d1412efbd2/livekit-1.1.20-py3-none-win_amd64.whl", hash = "sha256:64ea60b3293e3ce92c60592ff32c518bb7c278548b97de8026c1d0617510af4d", size = 10991380, upload-time = "2026-09-23T20:33:54.775Z" }, +] + +[[package]] +name = "livekit-agents" +version = "1.8.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "aiohttp" }, + { name = "av" }, + { name = "certifi" }, + { name = "click" }, + { name = "colorama" }, + { name = "docstring-parser" }, + { name = "eval-type-backport" }, + { name = "httpx2" }, + { name = "json-repair" }, + { name = "livekit" }, + { name = "livekit-api" }, + { name = "livekit-blingfire" }, + { name = "livekit-local-inference" }, + { name = "livekit-protocol" }, + { name = "nest-asyncio" }, + { name = "numpy" }, + { name = "openai" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp" }, + { name = "opentelemetry-sdk" }, + { name = "prometheus-client" }, + { name = "protobuf" }, + { name = "psutil" }, + { name = "pydantic" }, + { name = "pyjwt" }, + { name = "pyyaml" }, + { name = "sounddevice" }, + { name = "typer" }, + { name = "types-protobuf" }, + { name = "typing-extensions" }, + { name = "watchfiles" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/95/f62737eea8d027e054f93c2dd9be0bb697124c9527b4ef81ac06ecaa93f1/livekit_agents-1.8.8.tar.gz", hash = "sha256:c3231937a8b5c3e14f05ebe863364ccd0a0bf073223eec912ad6a194ca10f21b", size = 2814611, upload-time = "2026-10-15T06:07:04.672Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/0b/0af975caf0673edb7beea5f8d25a7317f4e7d61e8530533adeb500ce301a/livekit_agents-1.8.8-py3-none-any.whl", hash = "sha256:b5c8f79381c822412f6a42e4b4b4cc472efaf43a9ba11f2d6feef10380dc77a6", size = 2944277, upload-time = "2026-10-15T06:07:00.131Z" }, +] + +[[package]] +name = "livekit-api" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "idna" }, + { name = "livekit-protocol" }, + { name = "multidict" }, + { name = "protobuf" }, + { name = "pyjwt" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/0c/a6ced29213cf99f868b8456157a9778294336d2aa53e83cc790b4ed2a364/livekit_api-1.2.2.tar.gz", hash = "sha256:689753198dfefe58b007581fcce09e1089b2ad80adb3f9445798e55abdc9a264", size = 23116, upload-time = "2026-10-16T03:34:58.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/39/d103c5314fb508832a5abc92b8b3394cb50f79cd07aac350bf5a6e7c9c3a/livekit_api-1.2.2-py3-none-any.whl", hash = "sha256:64f82ed90aaef2dc982dbc7f9dcda6f5dc958928ce77ef2b582459d8e2c87b6b", size = 28806, upload-time = "2026-10-16T03:34:57.178Z" }, +] + +[[package]] +name = "livekit-blingfire" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/b7/8126191a0009adfe6352099ceaf0aed4bd9b3177cd131f4334aa84e1b3d8/livekit_blingfire-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8c48fe4c0a6844f23bf8b4362bc6af60d8231ed1cf9537f3e4f63c6d74e91a3", size = 156881, upload-time = "2026-10-13T00:08:55.115Z" }, + { url = "https://files.pythonhosted.org/packages/30/07/3e7bfb16777706c890afb037f95be1f8b5a1b4dc3273ca5414e778b1e834/livekit_blingfire-1.2.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:4e6f7021e52d77c4d1d28bbbd27dfba006dd32a6449f4d000f2a1e0e74257274", size = 161544, upload-time = "2026-10-13T00:08:56.797Z" }, + { url = "https://files.pythonhosted.org/packages/e0/64/824e87bb1fe0e022ead798267023e3e0db43210973704be2934c48333c33/livekit_blingfire-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecd98fd03b2be151e6bbc171c4060a1efe89035be4bffd834c4624bbb5dc92b5", size = 176260, upload-time = "2026-10-13T00:08:58.02Z" }, + { url = "https://files.pythonhosted.org/packages/10/f8/b2d48b3231f7935be42e53a8ac815d47d6995658028934d1a8a57592888a/livekit_blingfire-1.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:826213f80afd74293cc63e43b83a7f4c339471a24952ab6fe2888efdea81d27e", size = 184474, upload-time = "2026-10-13T00:08:59.437Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/1a945c070bdddc2c46252d7c3fcf680d26e48519cb7eccc60e33325f91c0/livekit_blingfire-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:c53413ce5cc6ebcf725d7e1b36e5b297303bcbcdbc3f5b2d531a231ae3aa583e", size = 138555, upload-time = "2026-10-13T00:09:00.68Z" }, +] + +[[package]] +name = "livekit-local-inference" +version = "0.2.7" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/c2/3131270c3e068a3a1605c13d382e5fe619643581b03194fcc9acec7b890f/livekit_local_inference-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce67f4ad56df54fff3ea1c9d8966d33c825cf983c8b3c46593589fb434954abc", size = 34836817, upload-time = "2026-08-18T09:46:22.97Z" }, + { url = "https://files.pythonhosted.org/packages/18/a7/3bcce6ee79ad87abe521b10ce88c18d08939658fb53f28d6e92b4cc6e8be/livekit_local_inference-0.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622", size = 35094944, upload-time = "2026-08-18T09:46:25.88Z" }, + { url = "https://files.pythonhosted.org/packages/d5/47/18f484e8e6e4552bb74c1820e9b5bacdd2354975101f309a6bcd250e816d/livekit_local_inference-0.2.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de7753f545e93636d4e85fd485076d2bba2fc45bc43bf83c1ca492c2c7d6cfd1", size = 34833082, upload-time = "2026-08-18T09:46:28.513Z" }, + { url = "https://files.pythonhosted.org/packages/6d/4b/4d552fa7acd6664158d69ba77d2d040a884030b13b36e8e552d6c5a062cb/livekit_local_inference-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b74561b380db6ac646d26f34b38bff97f8a2c461c8b7299f12a9643424dce73", size = 34873827, upload-time = "2026-08-18T09:46:31.077Z" }, + { url = "https://files.pythonhosted.org/packages/30/a5/d156e0168f672c1b5350859e6ce834b90c3f5819eb466d8cb2f58f890bbe/livekit_local_inference-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:205b147fc08e24f0b721b31c80b1d306fa00cc47eb23edd2db8d24f994b1bc21", size = 34875189, upload-time = "2026-08-18T09:46:33.69Z" }, +] + +[[package]] +name = "livekit-protocol" +version = "1.1.27" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, + { name = "types-protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/15/f3/5572f2b58f04534e22e266e113cb49b4f0b2a4e1d2abf385267cb51559ab/livekit_protocol-1.1.27.tar.gz", hash = "sha256:740a4c6e438da763d204f2a6b0fc8f7f33ca96e27b17ce9abc6557dbb0a28dbd", size = 124650, upload-time = "2026-09-16T12:43:25.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/04/12a047d5ec0ea5099426d071a0147118767cb231d270cb1d0bece266eb01/livekit_protocol-1.1.27-py3-none-any.whl", hash = "sha256:765bbe0c9c6b626519f6f5952793f81eaf3f5b8c9bd1e1b03994f3177774aa10", size = 151314, upload-time = "2026-09-16T12:43:24.327Z" }, +] + +[[package]] +name = "livekit-v1-mini-evaluation" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "livekit-agents" }, + { name = "livekit-local-inference" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "soundfile" }, +] + +[package.metadata] +requires-dist = [ + { name = "livekit-agents", specifier = "==1.8.8" }, + { name = "livekit-local-inference", specifier = "==0.2.7" }, + { name = "numpy", specifier = "==2.2.6" }, + { name = "scipy", specifier = "==1.15.3" }, + { name = "soundfile", specifier = "==0.13.1" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "multidict" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/79/84ddb5ba16c4eb2c69c71db76ae3c579fe546e511f7170c7e27eedbab7c1/multidict-7.1.0.tar.gz", hash = "sha256:61a4e5d81b8d4e4ad61964b230129e7a2b914793d96289029078fc9009f074ec", size = 362341, upload-time = "2026-10-09T20:31:38.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/72/c68c86c078a3b3cfa254bce218fbeaf1f6617d4ace811558154ae63d2c20/multidict-7.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:41ff3202cc23c800507777df5a4805b402f262b31008c60fdc652aeb6db2f278", size = 165442, upload-time = "2026-10-09T13:59:19.146Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/988c71ec3a6fe143b2971ac8d57cd5aca7cc6da970bccd1e4c2254997a09/multidict-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e50f7775b66c7802f4cb697e986c5acf30ec07301efee95b396c08114e890d67", size = 95611, upload-time = "2026-10-09T13:59:20.591Z" }, + { url = "https://files.pythonhosted.org/packages/30/5e/7d18eb5a75cf4bacb6b3ee689929dcb27d7ed8ca2d245e80e9b8056fcbf5/multidict-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85cb3ced4fa84949cee12bfe78208b6ece7baf3cbd242b26dcaf773efff8d206", size = 98743, upload-time = "2026-10-09T13:59:21.841Z" }, + { url = "https://files.pythonhosted.org/packages/72/38/2aeff3de6ddf235094aad6f833e3df14d1b3175e328748508443cb2b5458/multidict-7.1.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2128f3358335e0c83688ecb40c19d9d6606cd60784dfbf2e24e980ac2ba87b0d", size = 452832, upload-time = "2026-10-09T13:59:23.131Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1f/94d8b7fc7d47bb43be1fc041bccc2784383d352258d4d0dd90ef55d1a2e5/multidict-7.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2e718fa9d1d900decbc240a533d5d0baf0947ef464c78a8cd4fa32b4e8f590c", size = 475378, upload-time = "2026-10-09T13:59:24.661Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/78f431ef2735fae7a773261ea26cff11e37cbbb4520bf3caed56ece006f1/multidict-7.1.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ecc68f5e47bc6f6f889bbed5bc657b22bb2237ad9ccab8229cb5a0d64f4cb536", size = 442847, upload-time = "2026-10-09T13:59:26.276Z" }, + { url = "https://files.pythonhosted.org/packages/45/d3/1c5af82fe42f677f7c4dcaf487449511d754b84fc29f11a6d190cfb01836/multidict-7.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5f21fda91bd6c34455bd5c312e42aa1334da46cdafb4c533ecd01e0f7f19250b", size = 493652, upload-time = "2026-10-09T13:59:28.162Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bc/414b4a83a12811329c046a7c1954d6f08a5eda63f8466939a6cb612da22b/multidict-7.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a90453a79423cd7145cc08fc92322dcd7aca4862258f533e03f473226d4b835", size = 506991, upload-time = "2026-10-09T13:59:29.701Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ac/a91709d7153489a3b53661b62af371112b96fb083d10443e22d54665a1e1/multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c54ae1b89e582aa25f213cd8b5eac0bda1724e79299f486baeb3f562bbf82ca5", size = 480392, upload-time = "2026-10-09T13:59:31.179Z" }, + { url = "https://files.pythonhosted.org/packages/72/63/a4fc53b6da419876f363fc6860f9fbaa48eb8066f458e907eb2989e9510b/multidict-7.1.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ff8dd079e7b5f3438332499233a2a5acfca0741fd0eb3d4ddba0c2d9bc04d19", size = 431248, upload-time = "2026-10-09T13:59:32.899Z" }, + { url = "https://files.pythonhosted.org/packages/3d/78/08af4a624b3b9d2f48af730c173394135d14afbf4b3de5ae6c80e0900fd1/multidict-7.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e4ef15d0a29fc2da67fe8ba2301ecabd6f8733696cc2bf0a0cf96a144a20328c", size = 463657, upload-time = "2026-10-09T13:59:34.721Z" }, + { url = "https://files.pythonhosted.org/packages/58/ef/06e5c75b88506972c880d228fe96702cf0fa058ea31f157f5fcd5efcf006/multidict-7.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5fa296f14068538fced53c6eec86520a2ef3d3d27a0fb134640d03e067986d5f", size = 436120, upload-time = "2026-10-09T13:59:36.135Z" }, + { url = "https://files.pythonhosted.org/packages/23/8d/a917004a1e8ceb325c4cf0583e418a40b7ff9519cbfe759bc6982cd3b4c1/multidict-7.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6ab323f0c5490abaf35a78563e1043c7a772eb86d93f359ecc0fd286d1cd3807", size = 453859, upload-time = "2026-10-09T13:59:37.878Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0b/d1cc417355625152b611790aa1f0bc780983ed8c0752f44087fc7dbe66c9/multidict-7.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:88ec4d16e9f58071c9896ea01c4da97cce9d01418fe844ff06eebb00e0a1386a", size = 481768, upload-time = "2026-10-09T13:59:39.39Z" }, + { url = "https://files.pythonhosted.org/packages/94/0b/8e79adf65cf5430497d1020504b7d86ebe90e3289a95bb6b252a630d761f/multidict-7.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:9161eb81b8062da824426d3700d4b0d287f0cb0b05923713adfe3bd25e7937ac", size = 426973, upload-time = "2026-10-09T13:59:40.932Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4c/e84d6e05943600b16cd2745587e65a407f89b3a4a1f77081d456c5a07011/multidict-7.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c564d0758748f38aec56a6b98c6801a427b3a63f39b7cac538b2b2d18ca32740", size = 489681, upload-time = "2026-10-09T13:59:42.663Z" }, + { url = "https://files.pythonhosted.org/packages/eb/98/01951236a01b3e15c037a4a796f329b5099374e46365d0bc65bb4a7b325d/multidict-7.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c5e4a362a95b85301d262ef6bed06cc8e4a144ac7e2be874cb4c3c46ae89d754", size = 475655, upload-time = "2026-10-09T13:59:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/d3/72/52be318cdb46732da8eb118c2e4212fe570724eaef817901f8b702af2016/multidict-7.1.0-cp311-cp311-win32.whl", hash = "sha256:5d19bb1ec12e385c09215d5d53a243c060c7e8a0aacdba16d933e22902ee380d", size = 81719, upload-time = "2026-10-09T13:59:46.158Z" }, + { url = "https://files.pythonhosted.org/packages/37/fd/1ed7b7d206ef7a6918ac3de515543ca4b49bc50131325ca1814c005daf3f/multidict-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:396ba9917fe489ec3a5942ae3e29e91324c8b9956f371f7e124c971c71379e7a", size = 93586, upload-time = "2026-10-09T13:59:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1e/837877d218bfd2b656ca899ec9dd83e6eb82d8e1ef16e896d5abf3cb60cd/multidict-7.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:b5ed78742502b8d90ff2816688d407a097c8b5cc6af4343fc5ad7a98df53a7cd", size = 92446, upload-time = "2026-10-09T13:59:48.996Z" }, + { url = "https://files.pythonhosted.org/packages/d0/86/a3de309c5e28ee85b314d0e3ba0e0dea6fd361c313322a05e67be4656e1e/multidict-7.1.0-py3-none-any.whl", hash = "sha256:d9ef29cfd98e17085b4f91bba8fa1570bec6787d5c52ce653ed33a58785585d0", size = 28087, upload-time = "2026-10-09T20:31:35.945Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, +] + +[[package]] +name = "openai" +version = "3.36.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx2" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/5e/a7c7e6f565950764214fb13e2b72076e5957ce80c37eb1b0ddda2102e4f4/openai-3.36.1.tar.gz", hash = "sha256:ad8e5d56f20198915d98726ac1edb12ae38e7ecfa9bd560057e84642168b20c9", size = 2307878, upload-time = "2026-10-22T03:33:16.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/e4/83f139714d10d75af2b6891a20c973945dd9b942b11cc407ba4536fb40b9/openai-3.36.1-py3-none-any.whl", hash = "sha256:4c15b6765fe1792c5ad753556f44c7f82c2920c5e9e40219c0fca97369e923d3", size = 2296265, upload-time = "2026-10-22T03:33:14.555Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/02/6e0ae9cc61bd3169d401077b507b3ebc344745171e1051ab430be012dcd9/opentelemetry_api-1.45.1.tar.gz", hash = "sha256:aa38ed19bcc084ba42782a73255b3582283eced7ad6dddbd6695189e69adfb75", size = 72804, upload-time = "2026-10-06T17:32:58.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/41/f7dcf80b81ee8e71c1a2b59f14208bc723edbd89ed027a73b175abf6348e/opentelemetry_api-1.45.1-py3-none-any.whl", hash = "sha256:b31553efa588ae44bc306f863c785c5333a9ecc091248c6ee68b4b6c87fdedfb", size = 60256, upload-time = "2026-10-06T17:32:33.506Z" }, +] + +[[package]] +name = "opentelemetry-exporter-http-transport" +version = "0.66b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/0c/e3ebdb4b507f66afcc905e6885a4946969bd75b45988492643356fbbdc63/opentelemetry_exporter_http_transport-0.66b1.tar.gz", hash = "sha256:443080203bf52586ce0b2ad901e8951c61833eab1aa539ae6f1f16fe9e8e7952", size = 11693, upload-time = "2026-10-06T17:32:59.65Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/69/6af86ff66492b481c6a4c05dcfd68beb47ed8ba046440a26a2aac76b95c7/opentelemetry_exporter_http_transport-0.66b1-py3-none-any.whl", hash = "sha256:2f95404bdee7f9d2d529c7de56c7bd86d014d774d8fbf137810e0167f8a492bf", size = 12155, upload-time = "2026-10-06T17:32:35.454Z" }, +] + +[package.optional-dependencies] +requests = [ + { name = "requests" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e3/6f/5a561048ea372894f22f58f70e8478e4cd97d9a4e2d6f014559584a29bc5/opentelemetry_exporter_otlp-1.45.1.tar.gz", hash = "sha256:d0ac35592e77663a9fabf2740b4818c57196b1b764e0c8449d0d7bb2c7b2bc67", size = 6094, upload-time = "2026-10-06T17:33:00.966Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/e1/68c28d7da4482ce882a640b2c61405a78284c0a3a17a4db125647189b0b7/opentelemetry_exporter_otlp-1.45.1-py3-none-any.whl", hash = "sha256:ef3910d32b36ccbaf62390189759bd43a8109885e2d50b738ed9c9b255bf5cb5", size = 6730, upload-time = "2026-10-06T17:32:37.236Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-common" +version = "0.66b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-sdk" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/19/41de712173f43057e4532d42ece7d0c6d4210d353e5752433cb14987643f/opentelemetry_exporter_otlp_common-0.66b1.tar.gz", hash = "sha256:6b1403487a2185ac1feb45fd5546fdf8630ce71c36bcefaadf51e2130e9e23f9", size = 14325, upload-time = "2026-10-06T17:33:01.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/39/8c23d67665c762aa51840fa06f86e902e8f6f1693bc8d7e3d98cd6e2f753/opentelemetry_exporter_otlp_common-0.66b1-py3-none-any.whl", hash = "sha256:00ff8592c3a7cb729ff3fdc7ffa12372c243bdf2163e80c180994d0c7bd83ee9", size = 12385, upload-time = "2026-10-06T17:32:38.177Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/8e/65e85e5137991a3c493b11682151d198638a5bc1dd4b4c5f67e013c57d7c/opentelemetry_exporter_otlp_proto_common-1.45.1.tar.gz", hash = "sha256:2e4adcc3a67bcf57804fc49514f0ef64974ca7590aa3491da389852b4a0628f6", size = 18873, upload-time = "2026-10-06T17:33:04.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/aa/92f225d353904e7f70b8b3e3c1b02db0cf56f744c2e83c581dc372e78873/opentelemetry_exporter_otlp_proto_common-1.45.1-py3-none-any.whl", hash = "sha256:2f446183ae7047b036226f1d846c41a834b0e8755ad13b51a51dd38952eb466c", size = 15393, upload-time = "2026-10-06T17:32:41.911Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-common" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/00/a82af0be959dc58495740b169c6669a86e0811f6cd353a01eda34d255db3/opentelemetry_exporter_otlp_proto_grpc-1.45.1.tar.gz", hash = "sha256:3b3dcfbfdcb4e35149fcf309972282054b45228f5c10547d0095d6578510a9a0", size = 25997, upload-time = "2026-10-06T17:33:05.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/46/2d1da202f1e17c81aae7efcf702898d524b46709e4d3e2bf1f7f8ca8fbc6/opentelemetry_exporter_otlp_proto_grpc-1.45.1-py3-none-any.whl", hash = "sha256:e42ecb789d2fc5d8145e3dadc3e2991c9f18cd166d7c7514e234702540274b76", size = 19492, upload-time = "2026-10-06T17:32:42.838Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-http-transport", extra = ["requests"] }, + { name = "opentelemetry-exporter-otlp-common" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/17/26487707ea4caa97b17e6e4b5fa72133a53512ffa2f5cf7a49ef284b29cb/opentelemetry_exporter_otlp_proto_http-1.45.1.tar.gz", hash = "sha256:45c218405ce3fd879596924b1874bf9a8f6880206d61065c5a912c8e5c297fb7", size = 28839, upload-time = "2026-10-06T17:33:05.713Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/1f/517eaa0187ba106a9da97160ce2add3a371812681dc440930b267f714e42/opentelemetry_exporter_otlp_proto_http-1.45.1-py3-none-any.whl", hash = "sha256:24a97cf3753c7fb52fad44a696e452ff371686339e2acf3309e2eda3d0230700", size = 22180, upload-time = "2026-10-06T17:32:43.946Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/7f/15f014fb195da6c2dbb6c71399b8e76824878718e94de6454038488eed28/opentelemetry_proto-1.45.1.tar.gz", hash = "sha256:79e0fb95e4616691a469439238aa9224d75779b3e108e895d1aa125ab29ca77c", size = 46488, upload-time = "2026-10-06T17:33:11.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/9a/42ec8180a769516ae757e893b69736826efceac7332553915b4528a91c6d/opentelemetry_proto-1.45.1-py3-none-any.whl", hash = "sha256:f38e2a8413053c180cd3d2637fbb279673ec2f6a6e09c995aafa2f452c52b46e", size = 72488, upload-time = "2026-10-06T17:32:53.057Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.45.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/79/7392e21a1c8f0c61d90b223e31c7e48cb9d452e91a6b820ad24cca5f23c4/opentelemetry_sdk-1.45.1.tar.gz", hash = "sha256:63d24a6ca645019a631e6a51999c73e93adcac1196ca640b8ae78a7cc4762bf3", size = 218324, upload-time = "2026-10-06T17:33:13.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/3c/87c42b4bd6dd297536f04cd9383d212ac557ecd49f2cbdcd46da1c9ef5c8/opentelemetry_sdk-1.45.1-py3-none-any.whl", hash = "sha256:c604c11dc429810812348989115fa44bd558772a3d7442afc43d024f2c250ca4", size = 140063, upload-time = "2026-10-06T17:32:55.04Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.66b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/e4/dbbfb2a010c4db2224a5114638acede6fe563d33cc20fb1752cebcbe6298/opentelemetry_semantic_conventions-0.66b1.tar.gz", hash = "sha256:497ca63bf383723411e8eaf60c8779e9877633c936bb641080adab59d0eb6ec8", size = 150250, upload-time = "2026-10-06T17:33:14.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/14/67f8aa798857f8cf686f515bf93d9bb877ce952ddc8efae0fa25b45ce0d6/opentelemetry_semantic_conventions-0.66b1-py3-none-any.whl", hash = "sha256:d4cddeb4315490b35213f55e2bdc9ac54bb1e4d318927475bed62b35545e581b", size = 206279, upload-time = "2026-10-06T17:32:56.103Z" }, +] + +[[package]] +name = "prometheus-client" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/9a/9fbf4e4ec0c2d7f1c32519fff782ef467859b8faa9fbc5331a96f6395d43/propcache-0.5.4.tar.gz", hash = "sha256:ff6b113f50bc066a698db5d944d2c6dc7507168dd3341e255a8892fd0715a558", size = 61545, upload-time = "2026-09-16T00:17:14.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/40/14b21e505b7921617466576423f188a5c9caddfdaa1cf4b2b8a83d8fe216/propcache-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:897d1ddf6716e8f47200f7aad9a0efa6cc7586df66c6defa572f9eab379c078e", size = 86393, upload-time = "2026-09-16T00:14:06.9Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4b/5a52e1a7b43563f7d408814194bb23cc8bf214eb6b86639b667a33a8d0d0/propcache-0.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9cbfff4423eef4cc6cafc021469641a2b835f610b2647a6c5281903e21b8670d", size = 50431, upload-time = "2026-09-16T00:14:08.025Z" }, + { url = "https://files.pythonhosted.org/packages/05/cf/b5248180bf056cc76acc60c9c6e8c0ebbfdbd1c6cffd31fd14996927b7c8/propcache-0.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fc24f209c1b7f7f688b66b98293954f5504279760999b58920ee12dd8471c1d", size = 52116, upload-time = "2026-09-16T00:14:09.114Z" }, + { url = "https://files.pythonhosted.org/packages/86/a8/7c6cd6bfead1a11f2e411e688640e6d26574cb0bde7dcaa7423b0b65ed7a/propcache-0.5.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62530ca89187827e4a4fe733f971abe81a7542eeea48ff61995f19b64d7199c8", size = 238729, upload-time = "2026-09-16T00:14:10.357Z" }, + { url = "https://files.pythonhosted.org/packages/5c/b4/442715b2e980df51be52d203549279e027728f24c80b00b5e525e31cd5ea/propcache-0.5.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fc3f7599528db40b1efa0889a620116e2704144495273d66066e8164e45838", size = 246121, upload-time = "2026-09-16T00:14:11.735Z" }, + { url = "https://files.pythonhosted.org/packages/bc/5d/df0684fc2b1732a01a7bec26d7897369022712422d25b09c37ce7dbc88a2/propcache-0.5.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4f2d880ff60f45898f4acfa152aac8d04e3ee627d90ff4003491bf92239d5757", size = 251735, upload-time = "2026-09-16T00:14:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/c7/06/519a5ebb48b6f94beb48396e55c905f12246a25c3a3608a7ec7bceabf50e/propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e9368e87a3efc285e559131092c5db643eb8e56de4ee42064d5baec22ef2bb5", size = 235381, upload-time = "2026-09-16T00:14:14.398Z" }, + { url = "https://files.pythonhosted.org/packages/3c/07/1e0a9bb310830f2245edbd5cd3c6d24a783c053c4efd8e08e386e513c940/propcache-0.5.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:004e685b315646c410771836e72a44f143bbe624f29653a42687815069a303d5", size = 208973, upload-time = "2026-09-16T00:14:15.715Z" }, + { url = "https://files.pythonhosted.org/packages/62/5c/9324fab27d6088eecc47fe4332bf7aaf8c1ded93c36f558391e8a06d41a7/propcache-0.5.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:594eb4c6ec35e7179b058481f4e9f02521b56de16fa577c4b85c76fb1bf8a9f8", size = 233897, upload-time = "2026-09-16T00:14:17.25Z" }, + { url = "https://files.pythonhosted.org/packages/9c/a3/570d92fc952eae93b676f3a1568f4b89264102abd3c982ab6a9ebec58dcf/propcache-0.5.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2dba2f02d2d5c09ef8a0e6c1a42aeaa451f4be9898cb00b04fe98717da2eb23b", size = 223512, upload-time = "2026-09-16T00:14:18.87Z" }, + { url = "https://files.pythonhosted.org/packages/65/47/26810d889d89bba31db397e6a88f8984af775f5ed6bad0a29dce84324cff/propcache-0.5.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c3ef2818d63bc86071e9d2989ae75a1bc32b8f7059cfd9f5abbbee70c32e2ed6", size = 239043, upload-time = "2026-09-16T00:14:20.366Z" }, + { url = "https://files.pythonhosted.org/packages/89/2d/f9c47691aa024c8299a3afacd78d22a01ab57eb627b481b6089708e71017/propcache-0.5.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:dd2ac8f5b643454c2cc6b6118b13da16e88f4a6434fc3ba61aca384029f04f36", size = 208218, upload-time = "2026-09-16T00:14:21.801Z" }, + { url = "https://files.pythonhosted.org/packages/74/6b/d510c0c378cabbf9d0ac7b663af6d00f2e9074073d93b20c85f24aa5c071/propcache-0.5.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4054acf80d40456a0537f2913b349718649d8d6458a14ab7f48d0ce28c30869d", size = 240301, upload-time = "2026-09-16T00:14:23.121Z" }, + { url = "https://files.pythonhosted.org/packages/3d/80/c80f6adaaa1e51f0db2dce8c9b3714d94ec45e358a21f9a1910b10b40a80/propcache-0.5.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40e94adb1e7d39ff28a8bd8d8b8fbd1df6b9f40976dbe379134f1ce058e532dd", size = 230785, upload-time = "2026-09-16T00:14:24.458Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e2/c32a7df3f39caa7f11b2eb37ea5b6960a6946f2bc7c4b8ff97bbdf6d6b6e/propcache-0.5.4-cp311-cp311-win32.whl", hash = "sha256:9f86f7259efe2c951f43e57d471c9b41daa5bfc7db9f67189059cf1ae6d77fd9", size = 42747, upload-time = "2026-09-16T00:14:25.715Z" }, + { url = "https://files.pythonhosted.org/packages/0a/8a/3db6a3543d8101263b4c52978b6276a04ead2caff2c5ab880d934f47bd89/propcache-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:e904d4d01f36bd6e197590be1533c44e06058771e0746dd073a8ebb3ef880858", size = 46268, upload-time = "2026-09-16T00:14:26.996Z" }, + { url = "https://files.pythonhosted.org/packages/41/07/5222e2665bbf6e45847492ecbf3b9f3e4975a0ae300e5fd465df7d48ce55/propcache-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:d42a9a856a4a6e2f6c10f1318c07e7daa498d6593abe745c71dae4521a26ca39", size = 43547, upload-time = "2026-09-16T00:14:28.143Z" }, + { url = "https://files.pythonhosted.org/packages/f5/cd/785c64ed382f3f04201870267b02783f63b4678c2acfddc177a3ebcc2727/propcache-0.5.4-py3-none-any.whl", hash = "sha256:62c60aec739ed00124573cce1178138fd690c7676352d67a37328c1cf51d7468", size = 16338, upload-time = "2026-09-16T00:17:13.106Z" }, +] + +[[package]] +name = "protobuf" +version = "7.36.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" }, + { url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" }, + { url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pycparser" +version = "3.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/27/eeb9f307bf07060f3d9f9aa0fb8c15b01bdfded0a941e4b2719c7f94cacd/pycparser-3.12.tar.gz", hash = "sha256:f03387877eab82ce01bbdfd0ba7252ee55a90b1c708d5129e2ce915475cf1db6", size = 158785, upload-time = "2026-10-22T13:40:03.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/ae/315bbeee126a769cbde43cf4908acb4b40408d8bf8bbf334dd7368d8dadf/pycparser-3.12-py3-none-any.whl", hash = "sha256:a076f3f489b39b43ed13563a1dafe42447445bec2e294154ec5c57fcdda4c85e", size = 62600, upload-time = "2026-10-22T13:40:02.021Z" }, +] + +[[package]] +name = "pydantic" +version = "2.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/0b/8e10b2e693af8ec54346a14caf36221334775975a747c9ceaa3f8371d96d/pydantic-2.14.1.tar.gz", hash = "sha256:94f478203dd03404682a1ada216965651dd74b1d2d5ffd62e00e0837caab5c26", size = 900362, upload-time = "2026-10-11T18:37:55.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/ea/a56b9fe5066f3537b7882f77e9c5dfb26d8c2eefdaed9b5fc73d57b4dc22/pydantic-2.14.1-py3-none-any.whl", hash = "sha256:9195d967ec791692a04438115466764fb8b9a27b31f14a760437694f40d6b454", size = 488106, upload-time = "2026-10-11T18:37:53.437Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.50.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/24/af4ec4be49fbc810f35b0bdcacc3d433b56bbfa469fd3bfd4ae116cd9bf1/pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09", size = 513515, upload-time = "2026-10-11T18:35:44.82Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/1b/ca81811da3d2aea724fb3c4ba6b83f50ab8f210576306ccd601973142d35/pydantic_core-2.50.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c531166c42ea7bdfecc8c50049581f05dd1993b09cc7c52bb36a14e96deaec7d", size = 2152145, upload-time = "2026-10-11T18:31:58.046Z" }, + { url = "https://files.pythonhosted.org/packages/59/20/938ef7e0541af0a314e2f9d63848dbd1656ba2ebfe5ca0469f7ebee00d5e/pydantic_core-2.50.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6d0c2183008c188e19f4906d426b293bdc4f67ab17df8e180fe16cda208fa71", size = 2045761, upload-time = "2026-10-11T18:31:59.35Z" }, + { url = "https://files.pythonhosted.org/packages/2f/4b/456497fe2affa18f49b226e89bde31e8a204751ee343dd9beaac5438123e/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94be440c03fede26969a5ce75468e0e6a9927a1b46d9b679ee8adc1b057b0350", size = 2049557, upload-time = "2026-10-11T18:32:01.121Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/cd5dfe13928f55e236dff3a1bee06721d318ca6c955d9ca993b0a5d09f39/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:36c426eac0af8d1529ff8467e612b933346caec1fdc0d774f78f67a1a11e16c1", size = 2188153, upload-time = "2026-10-11T18:32:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8d/d0b25bc484f8d9136ea76ece69e0b2d24ab370cc2e7bbd1b79e61723b763/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028e2f212273d4a39b1ec1e0de8166b1165a65fc0f1111452a9d94fc7c625c63", size = 2388308, upload-time = "2026-10-11T18:32:03.767Z" }, + { url = "https://files.pythonhosted.org/packages/c5/64/6513cac7c9f78492abafa01d57a69de1d246bf3085fd7b0330bf14b025b3/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6f0cc1bb9900dc558960894adeb30b0c083366fc1d69b856209fb2ca5c36fe5", size = 2431187, upload-time = "2026-10-11T18:32:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/ed/60/7f2ae89c37e69a3dc0da9ff57b0388c285542c688d05f36767770429de85/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8812592c85d0edf423f10eadcef42716d71e8219085ad9e85b775057b7306133", size = 2157623, upload-time = "2026-10-11T18:32:06.616Z" }, + { url = "https://files.pythonhosted.org/packages/87/02/e3a71373b85a7973099b9a229a4302c7792262717e0b4997e41c01f7dd16/pydantic_core-2.50.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:bbce99252ba3167b2b6277f1829d5bf4b43b754524bddf7f944707c3db7d2253", size = 2254539, upload-time = "2026-10-11T18:32:07.968Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d5/5b620aaf40dc631d911565b64d49d3fa8422027c046a7a96dc4e4921ae98/pydantic_core-2.50.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:476f6ed8e43cd1e0b460920e23571700872b284e77331cb30c4faf459cf48a4b", size = 2267344, upload-time = "2026-10-11T18:32:09.399Z" }, + { url = "https://files.pythonhosted.org/packages/e0/48/f46baf4580d8a56ca4782aa65842e16d3cf39736b29fcce8e9c0521b3422/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2cbd1b75b09e976ed0d6b6ca297675632ca35df86130088457cdc60ef36970ae", size = 2300877, upload-time = "2026-10-11T18:32:10.903Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9d/e7d28505e6092c1fe075838a4f793ccbe6dd676e44ab16175815ee06cfe0/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:5958c72adb417c39b12ac87525ac60b0d73315fcdc59e21f44ee4a5e2512c9ef", size = 2464270, upload-time = "2026-10-11T18:32:12.329Z" }, + { url = "https://files.pythonhosted.org/packages/22/b1/3bf63b82efd93ebc9968f9c12fc46037a28bcb452c88e4688f33e5ff7dca/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f9e8a6c4ab04b78d61f78627370d834eb004b2869dcb28cfffa647b4ea1980", size = 2478653, upload-time = "2026-10-11T18:32:13.735Z" }, + { url = "https://files.pythonhosted.org/packages/28/17/26d1e4b9c2ba6a92b7dc75bbcb99ef44456b7e3af1bced868403667ea7d3/pydantic_core-2.50.1-cp311-cp311-win32.whl", hash = "sha256:4be846f55c9477f5f3ddde8f2ce941137e16862a56d018ed885d422bb6ae02f2", size = 2120246, upload-time = "2026-10-11T18:32:15.591Z" }, + { url = "https://files.pythonhosted.org/packages/24/65/3e875e7991eaecd4d70686293ff0d8a99aa8f93dc295e6a21c3d702912fb/pydantic_core-2.50.1-cp311-cp311-win_amd64.whl", hash = "sha256:0048b6dddc8ef4b64fccaad878bd143b0c3882ea9936279dc11d613f6b7dd1bc", size = 2176332, upload-time = "2026-10-11T18:32:17.153Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5c/58dbd17c61f209d91c70f549eb7a3bbec7023e89ea12dead091462d6d658/pydantic_core-2.50.1-cp311-cp311-win_arm64.whl", hash = "sha256:6a733778df2f7087ec1100ed0b41533e4f3001976e99570fa34f57c66e7f8e3e", size = 2182471, upload-time = "2026-10-11T18:32:18.49Z" }, + { url = "https://files.pythonhosted.org/packages/e7/73/a23a327237d9bb985298ce47702e196f995ce850224c12c70886bd66bb5c/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:062e891facce5ca296a1c37098e5e466780457f86413894b399f0cf22934f769", size = 2162560, upload-time = "2026-10-11T18:35:06.274Z" }, + { url = "https://files.pythonhosted.org/packages/df/b2/33b37b5e82408f402a5e82649a43e7c95cd5dab7beaeef2c35cedbfd18f2/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:49c2cbb2397fe4d0987e84606e691af6cb87bc0ee1bd3e7b737f7e10b4c142f9", size = 2075250, upload-time = "2026-10-11T18:35:08.455Z" }, + { url = "https://files.pythonhosted.org/packages/04/62/c7d5b9249466ccab90f3ce4790c2399dbfb8172ae9e74a7753dd295fe65a/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e4472072de0137ee0d8e72d6620e85939c271d2f90f6bbb4b15c24638b79f92", size = 2107891, upload-time = "2026-10-11T18:35:10.918Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7e/28d29bc1657195933147f772dee0558d9e0f045bbc11db7f992f40c37bb5/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ed4f3cef55164b026fefb41341b7754cc6b624c75dfe7142d2ecceb5ad21c87", size = 2268026, upload-time = "2026-10-11T18:35:13.336Z" }, + { url = "https://files.pythonhosted.org/packages/bd/35/002a378302ff91d2a7f149bc8d22363faf581ba40ac39d0123444315a32d/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7456d699b13954e9c0164dcb267250a10ae0dfb03e6e26d6796ab0d46e189c84", size = 2154076, upload-time = "2026-10-11T18:35:24.743Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5c/7a034330082c00f3c9795052bd9b161aaaf6e1951e897ac00a094823ef7e/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0d955195bbbe489ad343fcc956eacea9357b79cb22192c66cacdefcbc14b32f", size = 2085850, upload-time = "2026-10-11T18:35:27.009Z" }, + { url = "https://files.pythonhosted.org/packages/57/fa/d5b44a7d3d4eceed6ef8713a0003af56fefde6ec75915513bcdd5d730cd9/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2c634642694e6a0dad2ab1d375589fa671fd442edd5caf7d9737b8f6ca22906", size = 2259754, upload-time = "2026-10-11T18:35:29.763Z" }, + { url = "https://files.pythonhosted.org/packages/b6/88/e01dd37301710bd8b3b2daf34ec9e2a6e83a333130831c0d468b0292a48c/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee6db2fbed51a7991302e8fac498cd67e336246026d0dfa84cf5166ce1412760", size = 2268712, upload-time = "2026-10-11T18:35:32.654Z" }, + { url = "https://files.pythonhosted.org/packages/3e/43/5bb80d4a4d2b2d84612a30205662cc521a20d209c94abc079ea48b4e0df2/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:79490e33c4c0fcb933bbbcfc3a62184d8803b99f535863dfbb925e1bcb6945ad", size = 2305049, upload-time = "2026-10-11T18:35:35.392Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7b/e3ef76b269cfe4a5bd3bdcf5d7124cf05e5a8909d443b91639307116bdae/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:48569b0ade9edfbe065cad1d700175546592aebbb42f02adcebcc26e75b896fe", size = 2466001, upload-time = "2026-10-11T18:35:37.791Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7a/ea0947aadc1d9f72d4be00d2e19939611ec17363bcb5e6eb9ec7d8221c34/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f3cae32fc46121f787cb2486de9cf95a8bf72aec5cc78f64c606fa1735a6ef5", size = 2481777, upload-time = "2026-10-11T18:35:40.287Z" }, + { url = "https://files.pythonhosted.org/packages/24/f3/d15bc0b1fb0c4f1e07b3326ffb7489f7ae70da2b56a0884d22641b0eb47c/pydantic_core-2.50.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7f476456ac2bb0d937f75191494a09c83a30765fea4f70f3b404942fe25f6cdf", size = 2336787, upload-time = "2026-10-11T18:35:42.558Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/ea/5194e52748b0da83d71e082d75496eaec6e58f419f5e184786ded517e6a9/pyjwt-2.15.1.tar.gz", hash = "sha256:4f259e80cdfb6b3fc18a7de51fd1ef9ec79652f25019bae68975ca2468a34df8", size = 121252, upload-time = "2026-09-28T18:40:42.598Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/ca/44de4e75f8aadc457f0634be3b542815078ded46dca30efb960edeecad6e/pyjwt-2.15.1-py3-none-any.whl", hash = "sha256:42d59d631f7768a1028a64c7ff581a9bf7519804daf91fc5b6c56e30eec5e193", size = 33860, upload-time = "2026-09-28T18:40:41.429Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sounddevice" +version = "0.5.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/db/0c890e2d9aab9ba284021efc02e1d3aebfecab1b611762d7434602209bcf/sounddevice-0.5.6.tar.gz", hash = "sha256:8ec9fbfde2e32f020b167e348f3ab3bac6625a5f15af524d790108ac7147a410", size = 1120094, upload-time = "2026-08-17T07:55:05.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/1f/62eef605172bddc1017508469a12f75bc7c4194ece35c734f822795f53b1/sounddevice-0.5.6-py3-none-any.whl", hash = "sha256:de099612311ad81e55d31ccbd83f43ea6bf4d87b48f9b6ea55a1fbcde0eee4e0", size = 32793, upload-time = "2026-08-17T07:54:57.507Z" }, + { url = "https://files.pythonhosted.org/packages/b6/84/85e719d49cf98b2f406d9ac9c338892286c4448eb42ef0b2625ccf159616/sounddevice-0.5.6-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:e3aef00ad8b1d1740eb66d9a7671eab88a4d2b8fa4ab33498d742e63b65c309c", size = 1009647, upload-time = "2026-08-17T07:54:58.814Z" }, + { url = "https://files.pythonhosted.org/packages/c5/6f/6292145099f72a153a710245f46ae43e5fb6c77bec1b6086cb76c12dc280/sounddevice-0.5.6-py3-none-win32.whl", hash = "sha256:b36b807eb02abd257198bf84b2af05e4fea199a9d2f0019014169c7136d45e9c", size = 1009627, upload-time = "2026-08-17T07:55:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/8d/3e/cbc593c31a5f0d817b3fe97e64aa8461bd0f55cb07b67ce1b776296ae336/sounddevice-0.5.6-py3-none-win_amd64.whl", hash = "sha256:7f4162f514f007b0bf25a3ccfed3f1705bc2ec311888a90232729eec4f57a4f4", size = 1009630, upload-time = "2026-08-17T07:55:02.088Z" }, + { url = "https://files.pythonhosted.org/packages/60/a4/b0c21c9f215a6fd9606b8f8748c21212dc098e5d5a2d93068c50edcf19b4/sounddevice-0.5.6-py3-none-win_arm64.whl", hash = "sha256:c8ae19173e5f27f8c12d4b5eee2dbfe542cee125d591e663e0fb4dfb75246d45", size = 1009630, upload-time = "2026-08-17T07:55:03.689Z" }, +] + +[[package]] +name = "soundfile" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b", size = 46156, upload-time = "2025-01-25T09:17:04.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/28/e2a36573ccbcf3d57c00626a21fe51989380636e821b341d36ccca0c1c3a/soundfile-0.13.1-py2.py3-none-any.whl", hash = "sha256:a23c717560da2cf4c7b5ae1142514e0fd82d6bbd9dfc93a50423447142f2c445", size = 25751, upload-time = "2025-01-25T09:16:44.235Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ab/73e97a5b3cc46bba7ff8650a1504348fa1863a6f9d57d7001c6b67c5f20e/soundfile-0.13.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:82dc664d19831933fe59adad199bf3945ad06d84bc111a5b4c0d3089a5b9ec33", size = 1142250, upload-time = "2025-01-25T09:16:47.583Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e5/58fd1a8d7b26fc113af244f966ee3aecf03cb9293cb935daaddc1e455e18/soundfile-0.13.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:743f12c12c4054921e15736c6be09ac26b3b3d603aef6fd69f9dde68748f2593", size = 1101406, upload-time = "2025-01-25T09:16:49.662Z" }, + { url = "https://files.pythonhosted.org/packages/58/ae/c0e4a53d77cf6e9a04179535766b3321b0b9ced5f70522e4caf9329f0046/soundfile-0.13.1-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9c9e855f5a4d06ce4213f31918653ab7de0c5a8d8107cd2427e44b42df547deb", size = 1235729, upload-time = "2025-01-25T09:16:53.018Z" }, + { url = "https://files.pythonhosted.org/packages/57/5e/70bdd9579b35003a489fc850b5047beeda26328053ebadc1fb60f320f7db/soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618", size = 1313646, upload-time = "2025-01-25T09:16:54.872Z" }, + { url = "https://files.pythonhosted.org/packages/fe/df/8c11dc4dfceda14e3003bb81a0d0edcaaf0796dd7b4f826ea3e532146bba/soundfile-0.13.1-py2.py3-none-win32.whl", hash = "sha256:c734564fab7c5ddf8e9be5bf70bab68042cd17e9c214c06e365e20d64f9a69d5", size = 899881, upload-time = "2025-01-25T09:16:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/14/e9/6b761de83277f2f02ded7e7ea6f07828ec78e4b229b80e4ca55dd205b9dc/soundfile-0.13.1-py2.py3-none-win_amd64.whl", hash = "sha256:1e70a05a0626524a69e9f0f4dd2ec174b4e9567f4d8b6c11d38b5c289be36ee9", size = 1019162, upload-time = "2025-01-25T09:16:59.573Z" }, +] + +[[package]] +name = "truststore" +version = "0.10.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/9f/c5201d42a484c061e528825fc8e2d565f5abd50a4ced6fb7d29c4ec99b2b/truststore-0.10.5.tar.gz", hash = "sha256:30d36967ccaded5cbb38d602c433f53600036c79d502f4533a49b60a03bbefcd", size = 28091, upload-time = "2026-10-12T22:27:31.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/e9/3a7820be2bb0fe53b6bc9c3be26d3d1158004e4c3ab953aa6840b955b1e9/truststore-0.10.5-py3-none-any.whl", hash = "sha256:9aaaedaefaf06d8b206278cf8b5012bc897f485a874503501e12d776df78951c", size = 19017, upload-time = "2026-10-12T22:27:30.377Z" }, +] + +[[package]] +name = "typer" +version = "0.27.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/51/d33db42cc72ffd8c30777547b42d01f0cbf9d95a770457698d0174b3ed71/typer-0.27.3.tar.gz", hash = "sha256:d0396f770a560ab1b0a8504e13b5f254b728cedb05c61cf0359e944e50ce8901", size = 205303, upload-time = "2026-10-06T17:24:16.61Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/ea/2e31b67051e91a133189e9c000c222502ddc6969856416de0d095de4c0b0/typer-0.27.3-py3-none-any.whl", hash = "sha256:e50022f28b82a86313e54501317a1db64bf8f8d036ff8cfe5ca7e47675454aff", size = 123312, upload-time = "2026-10-06T17:24:15.054Z" }, +] + +[[package]] +name = "types-protobuf" +version = "7.35.1.20260906" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/6c/e3e5b3e10bc328126a39637c138f9ebfd734bf14342b9f3540039b4ab995/types_protobuf-7.35.1.20260906.tar.gz", hash = "sha256:efd1a3862d4c967dad5512ef8d56b1530ac84f182c41735b94004756518c4998", size = 69895, upload-time = "2026-09-06T06:35:28.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/4e/f63e826c68f77ef875506d72f225918800346545ee99847bc28f3394f18d/types_protobuf-7.35.1.20260906-py3-none-any.whl", hash = "sha256:5155e48569e0dabff303fdf578db96cd31ea9a4a63b18018a4ceac6b0ae17462", size = 86419, upload-time = "2026-09-06T06:35:27.247Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "urllib3" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/68/e6aa0b77d217b31f8f486ec0cdfe5e00e6e38dc0be657e7d85819b9faf0a/watchfiles-1.3.0.tar.gz", hash = "sha256:99aee4a07847c06820765fd7b1b49ceac4f3f711ccb7d104655a33231de1c207", size = 108119, upload-time = "2026-09-21T09:08:55.664Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/fa/c0b840d5d8bafe640925408ce11095948c8945bb61be1e67d0ab629b872a/watchfiles-1.3.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:000b9688fc8133037a8b075c8ebf98f32844ff8964dda61e85c1db547dafc441", size = 399703, upload-time = "2026-09-21T09:08:13.518Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/894799b485fe9473ad10422a0d9668e53fb78e3a2b5cc6061159572844ad/watchfiles-1.3.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:bbc1198edfdc90fda0600f825aa94150f428dfcbf8138746f55998e0e660d64c", size = 397647, upload-time = "2026-09-21T09:08:15.16Z" }, + { url = "https://files.pythonhosted.org/packages/5a/61/f277cd5ead05f5d37b98b41fbdd0c943ee0c04d49738f62e902cb291cf43/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4af9c464d410e8c44b58ddf1cbec7c3a02c1cb2c6c80df9c74659ba2fbda0ab5", size = 454994, upload-time = "2026-09-21T09:08:16.587Z" }, + { url = "https://files.pythonhosted.org/packages/46/66/ea4c01382975e53b1ac1b0a0ea1b353416b8127fb6e04f5c1c313119aab6/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb94e40b9a0db19636b5e3fed0a9803452ecc7381df13b385272abb779ee83ca", size = 460105, upload-time = "2026-09-21T09:08:17.961Z" }, + { url = "https://files.pythonhosted.org/packages/31/c3/1a501b597817096c9831c255f6270c124ce0e2faeb74124be24dcc93b86d/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7398930a2b76b9dc67a4e6b8bfc7baf30946892a86f417a3920c07bdd6febc30", size = 493761, upload-time = "2026-09-21T09:08:19.327Z" }, + { url = "https://files.pythonhosted.org/packages/5a/16/77352d05e152c7786a016e9f1decdb4507e8aa5bcf3343c72142a0413d14/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:025b108f2d5cc2799cb941f79380df3e8b22bfb589c218e801767fe78d598c95", size = 577500, upload-time = "2026-09-21T09:08:20.723Z" }, + { url = "https://files.pythonhosted.org/packages/95/fe/81001c55b24466fe9911135e50269fd3a29f43e446627a92adfab54553b6/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be9ef3cd403d756a304a0a08a112163c63da7ec72c8c9d083c98818291ff8f29", size = 469209, upload-time = "2026-09-21T09:08:22.346Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cf/e3ad894ed5909a7c44b0707e89bc25d19a3d78b3a7aec846119443b6ae56/watchfiles-1.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5768b49e426fd5b550b012c866db347cdf15c398ef98dc557b6e6b72fa74cd1", size = 458353, upload-time = "2026-09-21T09:08:23.7Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f5/2f106829e6e2bc91ad74614730f6df484202b9a4d20d927dbf2f08d37d44/watchfiles-1.3.0-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:d36c72fcdc08f143d87316a4c4c3b064e340da2c7383d39803950740ed418935", size = 468707, upload-time = "2026-09-21T09:08:25.167Z" }, + { url = "https://files.pythonhosted.org/packages/15/37/2741ab776b978669c1f3bba1e573f1a184f727ab8b4d3a6d9c61090800ed/watchfiles-1.3.0-cp310-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f0c9865240e065a2247f4b5248528ae3d01e0e8ae071462c250c884dc16e3ee3", size = 632510, upload-time = "2026-09-21T09:08:26.532Z" }, + { url = "https://files.pythonhosted.org/packages/48/64/db4a4684275fe9b696ee5118c194705c1423b3d42181c3f8ee70194d5c73/watchfiles-1.3.0-cp310-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:380f513d26cc2e598266b88d66456e07d67ef4be8f0f435a1154d9c44b43d509", size = 661723, upload-time = "2026-09-21T09:08:28.004Z" }, + { url = "https://files.pythonhosted.org/packages/52/80/95ddb24f6a2f595c031c24432ab7b8aa7d6d1ada0c6d63a552166e06e8d1/watchfiles-1.3.0-cp310-abi3-win32.whl", hash = "sha256:509d9f74d2bec5c1f4cd868ddcfe0c9601f7ea53066dfcb19d8ede742c4de661", size = 277761, upload-time = "2026-09-21T09:08:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/48/a1/1c4a1b3c8030cd03206232612be8a6e8799093490c220b0fcb935d02b75a/watchfiles-1.3.0-cp310-abi3-win_amd64.whl", hash = "sha256:1acabde19b67e673274e89a04d613b7fb1f122e2c4b8ec9a581e59c149264b61", size = 290643, upload-time = "2026-09-21T09:08:30.45Z" }, + { url = "https://files.pythonhosted.org/packages/82/e0/d2db577c632d26d08078c4390dd870b8555c4e558df25d22270f0166c71f/watchfiles-1.3.0-cp310-abi3-win_arm64.whl", hash = "sha256:d978cc1dd7ba44f5590d7de74f7a9c8be7262d9e469c2c0efb8bbfc2574321dc", size = 285510, upload-time = "2026-09-21T09:08:31.561Z" }, + { url = "https://files.pythonhosted.org/packages/cd/eb/289fec71eba51d6c3ef3a28c81f7213f4e860084ffae5abc866933c564f0/watchfiles-1.3.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:45726c6b5a8d67c8087eb2933c4398948546d04206ef40f629dc4881d65d23d1", size = 396932, upload-time = "2026-09-21T09:08:50.217Z" }, + { url = "https://files.pythonhosted.org/packages/92/cc/a3c3f557992a20a5bb24607f0da44d39cf6d6ba3f8f6ed7cb31f6c73371a/watchfiles-1.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:6398d250994baff581147ccba846223076fe6492ca93c0d1b3588fcf5355eb5c", size = 394852, upload-time = "2026-09-21T09:08:51.412Z" }, + { url = "https://files.pythonhosted.org/packages/55/65/d45763a5e1108a65af85a217af2930ebf1081c73fd8169d3f75e586992bb/watchfiles-1.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:591de392458bca26f6130fea4e667c06b657e873ad334ea06fad5a79f5086cef", size = 451789, upload-time = "2026-09-21T09:08:53.144Z" }, + { url = "https://files.pythonhosted.org/packages/02/96/165c6e540bf765ca1115062017adf861d0816525f02464ba71313fe7cf92/watchfiles-1.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec46a1ff4c1d81405a5fc645abdbff5e4e9388f7c9a6cdb392316a7c29b884f", size = 456919, upload-time = "2026-09-21T09:08:54.372Z" }, +] + +[[package]] +name = "yarl" +version = "1.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/16/e8be8e2fb175bbf41a0680381a319f1199fae256588241a2ac8677eafb49/yarl-1.25.1.tar.gz", hash = "sha256:03dd38de09bc213e9a8b29761eec33ee1d5318dac0e49d8af36e4d27830e23a7", size = 246245, upload-time = "2026-09-15T19:35:02.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/b3/2cea721d495ca57f8f414aa4867ee263f486b274e07463158cf52f02ba7f/yarl-1.25.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9d693bf4bf534e9ba3ae2780cfd577f5135629f7b5ac653490859d0b77864865", size = 143794, upload-time = "2026-09-15T19:30:26.946Z" }, + { url = "https://files.pythonhosted.org/packages/55/e6/cd145cff8e5cf60b8b3c41fbecfa2a45028a8dec3fbc52bec03595ff3d3b/yarl-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ab2054c5531af2a9ba7b69b8ec91e4f884420e83a8c5e579b013084cb57e5e5d", size = 103993, upload-time = "2026-09-15T19:30:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/ce/7c/fbb40fe2d53747c40aa36a9e2bd2178a202f942bda0b670f3306d4aefbce/yarl-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:564fdc7085d2245ab84f88882fdb1d6ac0723124bff6ded35bfb1c00f812630d", size = 104010, upload-time = "2026-09-15T19:30:31.069Z" }, + { url = "https://files.pythonhosted.org/packages/f0/0b/5a516f70641092283f57cf3670bdb75e7327bcc0dcb5038697e4dfbfd569/yarl-1.25.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acae6b45d1ace09b6ba3876da43b88366ef368f73b988c7f57e14231753d4420", size = 116444, upload-time = "2026-09-15T19:30:32.894Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/d1a627f827b0a404ae0f5647cab0534959081cde13b0756a783469fb3b5e/yarl-1.25.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1fb2a01ba8cd9c5d2c5dc1ec35e0fc951d04b4f037541d4ac090c993ce58b3d7", size = 107565, upload-time = "2026-09-15T19:30:35.188Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cf/c8e0aaec886840a6c4480fe44eaec7cd4319f79a563b79321473be79c56f/yarl-1.25.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e92b6bcc741b86d67606c40d3cb9c7cc8e6c737f81e31f4a94efc204456c92e3", size = 125006, upload-time = "2026-09-15T19:30:37.1Z" }, + { url = "https://files.pythonhosted.org/packages/50/26/0cce366d54a93cdc8342965dc7663385e4db161625cc1e8b18e786753d24/yarl-1.25.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:72c34ac7ad4314c19362d5ce27626dcc8429bd30bbf8c179f4234078851f9492", size = 128717, upload-time = "2026-09-15T19:30:38.904Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/a71501bbc1a674ff72c4d6c2b75f4d9a5af819f5244c3a7558080a8802c5/yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5add7b4ca7afeea91d52e4d4e4db3b1fe9885b71f07054560d8c4296b7441a2", size = 117728, upload-time = "2026-09-15T19:30:40.809Z" }, + { url = "https://files.pythonhosted.org/packages/e7/6f/c3267ca01defeed9ed9c4ff9b17bd54915432c405945233265b707475d1c/yarl-1.25.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:def538065f9e4d4cf1ae164bd59aba00dfa84f03923e0de4c3788f252d6bcd17", size = 116224, upload-time = "2026-09-15T19:30:42.818Z" }, + { url = "https://files.pythonhosted.org/packages/8f/69/fad57ee52d648431718ee0f1f68966a99c1352c3924688ffbdcc9d3fe51a/yarl-1.25.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a191bfdb30a79b98e5d175d75285f9fcb78bf0e46ba5efda042e1c72071a0de", size = 116299, upload-time = "2026-09-15T19:30:44.966Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d4/6a8c1e29f33338687ca278cba0a8fbf6525a322c2c02a9a500ccbe041152/yarl-1.25.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:71f42c5b9a948c113bbdebfa544598321431d064ff959d32e99b1feb61d68345", size = 108625, upload-time = "2026-09-15T19:30:46.874Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d2/3a35ae791c9cb6522c106923ff25c3230d999091e5e65511bca23bbd9914/yarl-1.25.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:72849d892954be4d09e569b8b831ac39ce58417fedc767d4308a0fe542018a40", size = 124515, upload-time = "2026-09-15T19:30:49.082Z" }, + { url = "https://files.pythonhosted.org/packages/be/fd/2b022109a6b4af0f7dc371cf7500af380b0d4f034010243e1b0ce218dc93/yarl-1.25.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:efb01a106f971cb3752856bca2318bbdf7f01bd8823779c461586cbe5ffd5258", size = 115711, upload-time = "2026-09-15T19:30:51.208Z" }, + { url = "https://files.pythonhosted.org/packages/18/59/f7586271136c3ddb0126bbfe661844699369b76b555fe38c4efe86870b2e/yarl-1.25.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a1daf47cd95a7c3a63456336bc5aaa8c86dd3a47d07ed3d0e76132ae4666a5a1", size = 122751, upload-time = "2026-09-15T19:30:53.535Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0b/07f7a2d881f7e16c385b47fc1753382600847cad305dcc7fa0c25828acf8/yarl-1.25.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9489e6abf47ba37f332075a91444c7cfedb03e6ce99fbb2f116bfe1ce810da3b", size = 117983, upload-time = "2026-09-15T19:30:55.277Z" }, + { url = "https://files.pythonhosted.org/packages/aa/9d/8cdceec66a9b940700cb45931741403f045b162afd79bcb93c41cadd0972/yarl-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7306dee25b8a0e737363f347362b875094b4dc4e367311470656ae420fdbf8e", size = 102894, upload-time = "2026-09-15T19:30:57.606Z" }, + { url = "https://files.pythonhosted.org/packages/17/f1/7ec357db1d3ad2863542d71e8fe64a126bbec17b134cd7d30951196809a5/yarl-1.25.1-cp311-cp311-win_arm64.whl", hash = "sha256:abb1384477f5901d436b5d2e5465954de46ea6098f59163d243660b5c4461d35", size = 98609, upload-time = "2026-09-15T19:30:59.705Z" }, + { url = "https://files.pythonhosted.org/packages/54/22/318c7980066769c6bcd9221ed2248294f5698811da099013098c670565ed/yarl-1.25.1-py3-none-any.whl", hash = "sha256:681c758b0490f9e96b78e5fa8e8dc6e648e9185bb6eaebe73183c33ea0c445f3", size = 63617, upload-time = "2026-09-15T19:34:59.616Z" }, +] diff --git a/experiments/turnsense-1.0/.gitignore b/experiments/turnsense-1.0/.gitignore new file mode 100644 index 0000000..d538bc5 --- /dev/null +++ b/experiments/turnsense-1.0/.gitignore @@ -0,0 +1,5 @@ +.venv/ +__pycache__/ +models/ +vendor/ +cache/ diff --git a/experiments/turnsense-1.0/.python-version b/experiments/turnsense-1.0/.python-version new file mode 100644 index 0000000..2c07333 --- /dev/null +++ b/experiments/turnsense-1.0/.python-version @@ -0,0 +1 @@ +3.11 diff --git a/experiments/turnsense-1.0/README.md b/experiments/turnsense-1.0/README.md new file mode 100644 index 0000000..74c20c6 --- /dev/null +++ b/experiments/turnsense-1.0/README.md @@ -0,0 +1,39 @@ +# TurnSense 1.0 FP32 韩泰测试 + +本机 Apple M4 Mac mini、CPU、16 GB,独立 Python 3.11 uv 环境。锁定依赖见 pyproject.toml / uv.lock,声明规范见 env-spec.json。ONNX Runtime CPU,intra/inter-op 各 1 线程。官方代码与权重版本、SHA256 见 model-manifest.json。 + +## 复现 + +从项目根目录运行: + +```bash +cd experiments/turnsense-1.0 +uv sync --locked +uv run --locked python setup_assets.py +uv run --locked python run_experiment.py smoke +uv run --locked python run_experiment.py all +``` + +本机 Hugging Face 直连失败时,使用已配置代理(示例为本机现有 7897 端口)下载公开权重: + +```bash +HTTPS_PROXY=http://127.0.0.1:7897 uv run --locked python setup_assets.py +``` + +已有固定 vendor/ 与 models/ 时,可直接执行 smoke,不需联网。`smoke` 应输出 WITNESS、三项概率之和为 1、repeat identical;固定 seed=42 噪声输入应主要判为 invalid。`all` 跑全部六通录音的 200 ms 网格及当前 44 个精确判断点;`evaluate` 仅跑判断点。输出只写 results,不修改人工标注。 + +## 输入与规则 + +- 原录音用户左声道 channel 0,int16 / 32768;先裁取 decision_ms 之前已收到的前缀,再用官方依赖 librosa 重采样到 16 kHz,取末尾最多 8 秒。不用转写、未来音频、超时放行或 VAD 停止门槛。 +- 官方前端:kaldi-native-fbank,80 mel,25 ms Hamming 窗、10 ms 帧移,snip_edges=true,dither=0,LFR m=7/n=6,官方 am.mvn。LFR 边界重复的是已收到音频的最后特征,不读真实未来帧。官方完整前端未改动。 +- 保留 complete/incomplete/invalid 三项概率和原生 argmax 类别。主要二类映射为原生 complete=>can_reply=1,其余两类=>0;另报告 P(complete)>=0.5。网页曲线显示 P(complete),0.5 参考线不等同原生三分类 argmax。 +- 每个精确判断点重复推理须完全一致;将之后的音频置零,准备出的输入须保持一致。固定 200 ms 网格是逐次真实独立推理,非插值,也不是原生流式模型。前缀重采样与特征抽取均可重算,因此计算耗时不能声称为在线增量开销。 +- 实际环境、输入文件/脚本/前端/CMVN/权重哈希写入 summary.json。分开记录重采样、特征提取、ONNX 推理耗时;模型构造不含 Python 进程启动和 import。 + +官方来源: +- https://github.com/Bairong-Xdynamics/TurnSense +- https://huggingface.co/brgroup/TurnSense/tree/main/TurnSense1.0 + +供应代码 LICENSE 为 Apache-2.0,保留在 vendor/LICENSE;README 还提到附加条件,产品部署前应以所用版本实际许可为准。本目录只做公开模型的本地比较,不重分发权重。 + +44 个选定点仅为探索性测试,点级误接话率不等于连续对话抢话率,用户声道可能含机器人回声。旧模型若标注时间不同,不能直接用旧汇总排名。结果解读见 results/评估说明.md。 diff --git a/experiments/turnsense-1.0/env-spec.json b/experiments/turnsense-1.0/env-spec.json new file mode 100644 index 0000000..6c6a339 --- /dev/null +++ b/experiments/turnsense-1.0/env-spec.json @@ -0,0 +1,38 @@ +{ + "base": "macOS arm64 CPU, Python 3.11", + "pip_phases": [ + [ + "numpy==2.2.6", + "onnxruntime==1.24.4", + "soundfile==0.13.1", + "librosa==0.11.0", + "kaldi-native-fbank==1.22.3" + ] + ], + "env": { + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1" + }, + "resource": { + "machine": "Apple M4 Mac mini / 16 GB", + "device": "CPUExecutionProvider", + "inter_op_threads": 1, + "intra_op_threads": 1 + }, + "code_revision": "c6d83e5b0d1355125b05eaf1b4b5c6c1acabb338", + "weights": { + "repo": "brgroup/TurnSense", + "directory": "TurnSense1.0", + "variant": "FP32", + "revision": "341dd68c9df87d74d35b9cee63a1dcf0fff24966", + "sha256": { + "model_fp32.onnx": "82256247dd38f0d9f2f213beec7ede1507347f84422fa48f29d565b613d89976", + "am.mvn": "29b3c740a2c0cfc6b308126d31d7f265fa2be74f3bb095cd2f143ea970896ae5" + } + }, + "smoke": { + "cmd": "uv run --locked python run_experiment.py smoke", + "expect": "WITNESS" + } +} diff --git a/experiments/turnsense-1.0/model-manifest.json b/experiments/turnsense-1.0/model-manifest.json new file mode 100644 index 0000000..9c5a716 --- /dev/null +++ b/experiments/turnsense-1.0/model-manifest.json @@ -0,0 +1,12 @@ +{ + "repo": "brgroup/TurnSense", + "revision": "341dd68c9df87d74d35b9cee63a1dcf0fff24966", + "version": "TurnSense1.0 FP32", + "code_repo": "Bairong-Xdynamics/TurnSense", + "code_revision": "c6d83e5b0d1355125b05eaf1b4b5c6c1acabb338", + "files": { + "model_fp32.onnx": "82256247dd38f0d9f2f213beec7ede1507347f84422fa48f29d565b613d89976", + "am.mvn": "29b3c740a2c0cfc6b308126d31d7f265fa2be74f3bb095cd2f143ea970896ae5" + }, + "verified_against": "Hugging Face fixed revision LFS SHA256 / Git blob SHA1" +} diff --git a/experiments/turnsense-1.0/pyproject.toml b/experiments/turnsense-1.0/pyproject.toml new file mode 100644 index 0000000..8ddc531 --- /dev/null +++ b/experiments/turnsense-1.0/pyproject.toml @@ -0,0 +1,5 @@ +[project] +name = "turnsense-1-0-evaluation" +version = "0.1.0" +requires-python = ">=3.11,<3.12" +dependencies = ["numpy==2.2.6", "onnxruntime==1.24.4", "soundfile==0.13.1", "librosa==0.11.0", "kaldi-native-fbank==1.22.3"] diff --git a/experiments/turnsense-1.0/results/predictions.csv b/experiments/turnsense-1.0/results/predictions.csv new file mode 100644 index 0000000..363e894 --- /dev/null +++ b/experiments/turnsense-1.0/results/predictions.csv @@ -0,0 +1,45 @@ +call_id,decision_ms,can_reply_now,p_complete,p_incomplete,p_invalid,native_class,native_can_reply,prediction_05,input_samples,available_end_ms,preparation_ms,frontend_ms,inference_ms +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,21780,1,0.7006610631942749,0.29899370670318604,0.00034517815220169723,complete,1,1,128000,21780.0,0.6559574976563454,4.819874651730061,31.615042127668858 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,29860,1,0.6634299755096436,0.3349137306213379,0.0016562796663492918,complete,1,1,128000,29860.0,1.0954178869724274,5.1015829667449,32.756125554442406 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,48125,0,0.37549158930778503,0.624477744102478,3.058241418329999e-05,incomplete,0,0,128000,48125.0,1.650916412472725,5.288207903504372,31.92400000989437 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,64000,1,0.48844802379608154,0.5109370946884155,0.0006149054388515651,incomplete,0,0,128000,64000.0,2.638166770339012,5.002083256840706,35.11762525886297 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,76672,0,0.13564634323120117,0.8621996641159058,0.0021539577282965183,incomplete,0,0,128000,76672.0,3.0605001375079155,5.475125275552273,30.60787543654442 +2c83253a-7977-4e3c-a387-0aa1ea06fbe1,88482,1,0.942379891872406,0.05571956932544708,0.0019004124915227294,complete,1,1,128000,88482.0,3.272208385169506,4.725124686956406,35.046874545514584 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,22007,1,0.3481478691101074,0.651701033115387,0.00015111359243746847,incomplete,0,0,128000,22007.0,0.7836250588297844,4.815500229597092,31.588083133101463 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,31842,1,0.4427306354045868,0.5568790435791016,0.000390340865124017,incomplete,0,0,128000,31842.0,0.8989162743091583,4.637166857719421,31.384666450321674 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,48536,0,0.7467879056930542,0.2531856596469879,2.6438898203196004e-05,complete,1,1,128000,48536.0,1.652708277106285,4.660000093281269,29.796875081956387 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,52348,1,0.9037413597106934,0.09623286128044128,2.5730008928803727e-05,complete,1,1,128000,52348.0,2.6957085356116295,6.087250076234341,32.25929103791714 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,65298,0,0.16583986580371857,0.8341189026832581,4.125330087845214e-05,incomplete,0,0,128000,65298.0,2.300082705914974,4.840708337724209,29.82383221387863 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,67943,0,0.12022174149751663,0.8796190023422241,0.00015931774396449327,incomplete,0,0,128000,67943.0,2.689083106815815,5.102500319480896,31.059750355780125 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,70430,0,0.0029643976595252752,0.9970191717147827,1.6417250662925653e-05,incomplete,0,0,128000,70430.0,2.258916385471821,4.696916788816452,31.458708457648754 +40ae686c-8196-4d7b-b7ad-3e12a427ebb6,82941,1,0.5291794538497925,0.4702177941799164,0.0006027779309079051,complete,1,1,128000,82941.0,3.3505000174045563,5.25750033557415,31.063792295753956 +872a1e67-873a-4c49-a598-b38a670afcad,17153,1,0.6752944588661194,0.32434993982315063,0.0003555795119609684,complete,1,1,128000,17153.0,0.5732094869017601,4.804333671927452,31.661707907915115 +872a1e67-873a-4c49-a598-b38a670afcad,24846,1,0.19226661324501038,0.8076792359352112,5.4253305279416963e-05,incomplete,0,0,128000,24846.0,0.7762927561998367,5.662750452756882,31.10175020992756 +872a1e67-873a-4c49-a598-b38a670afcad,33471,1,0.670210599899292,0.3295625150203705,0.00022692007769364864,complete,1,1,128000,33471.0,1.130000688135624,4.772042855620384,31.292874366044998 +872a1e67-873a-4c49-a598-b38a670afcad,44810,0,0.613646924495697,0.3845664858818054,0.0017866046400740743,complete,1,1,128000,44810.0,1.7957082018256187,5.095167085528374,30.916291289031506 +872a1e67-873a-4c49-a598-b38a670afcad,45581,0,0.5043333172798157,0.4948233664035797,0.0008433183538727462,complete,1,1,128000,45581.0,1.8424158915877342,4.733665846288204,31.039416790008545 +872a1e67-873a-4c49-a598-b38a670afcad,47187,0,0.33440664410591125,0.664151668548584,0.001441665575839579,incomplete,0,0,128000,47187.0,1.7980830743908882,4.785459488630295,31.987749971449375 +872a1e67-873a-4c49-a598-b38a670afcad,49500,1,0.46493276953697205,0.5347657203674316,0.0003015460097230971,incomplete,0,0,128000,49500.0,2.1763751283288,5.169540643692017,29.42441590130329 +872a1e67-873a-4c49-a598-b38a670afcad,52326,0,0.31294915080070496,0.6869400143623352,0.00011081220145570114,incomplete,0,0,128000,52326.0,2.1302076056599617,4.98233363032341,30.02820909023285 +872a1e67-873a-4c49-a598-b38a670afcad,54318,1,0.7077078223228455,0.2920091450214386,0.00028306824970059097,complete,1,1,128000,54318.0,1.9198330119252205,4.737791605293751,30.707416124641895 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,18027,1,0.19850707054138184,0.8014131784439087,7.97970496932976e-05,incomplete,0,0,128000,18027.0,0.5511250346899033,4.951875656843185,30.43895773589611 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,24768,1,0.45438897609710693,0.5453333258628845,0.00027762504760175943,incomplete,0,0,128000,24768.0,0.8649574592709541,5.036665126681328,29.373792000114918 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,41219,0,0.20029887557029724,0.798045814037323,0.001655340543948114,incomplete,0,0,128000,41219.0,1.262083649635315,4.710624925792217,30.250207521021366 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,51080,0,0.6161020994186401,0.3807879388332367,0.003109981305897236,complete,1,1,128000,51080.0,1.7816657200455666,4.898290149867535,38.34949992597103 +a266b9ef-5e47-4434-a04c-ce4eacd52c19,68313,0,0.8574621677398682,0.1419398933649063,0.0005979320267215371,complete,1,1,128000,68313.0,1.8581673502922058,5.039874464273453,29.415292665362358 +cb3238dc-3946-42a5-aad8-9b9a54226363,13540,1,0.6023414134979248,0.39736831188201904,0.0002902977867051959,complete,1,1,128000,13540.0,0.6275000050663948,5.3015416488051414,31.05229139328003 +cb3238dc-3946-42a5-aad8-9b9a54226363,19620,1,0.3794628083705902,0.6204359531402588,0.00010125405970029533,incomplete,0,0,128000,19620.0,0.6028758361935616,5.842084065079689,35.181958228349686 +cb3238dc-3946-42a5-aad8-9b9a54226363,27520,1,0.5865507125854492,0.41297394037246704,0.0004753079265356064,complete,1,1,128000,27520.0,0.7745418697595596,4.71708457916975,30.025207437574863 +cb3238dc-3946-42a5-aad8-9b9a54226363,41207,0,0.44317537546157837,0.5567837953567505,4.084650208824314e-05,incomplete,0,0,128000,41207.0,1.503458246588707,4.907291382551193,31.758290715515614 +cb3238dc-3946-42a5-aad8-9b9a54226363,49204,0,0.4868903160095215,0.513083815574646,2.5880843168124557e-05,incomplete,0,0,128000,49204.0,1.718541607260704,4.778958857059479,30.595874413847923 +cb3238dc-3946-42a5-aad8-9b9a54226363,58424,0,0.13133850693702698,0.8686069250106812,5.45754301128909e-05,incomplete,0,0,128000,58424.0,1.8835840746760368,4.6873753890395164,29.813292436301708 +cb3238dc-3946-42a5-aad8-9b9a54226363,60790,0,0.1166829988360405,0.8832864761352539,3.057053982047364e-05,incomplete,0,0,128000,60790.0,2.817000262439251,4.758957773447037,29.99345865100622 +cb3238dc-3946-42a5-aad8-9b9a54226363,70745,0,0.22430983185768127,0.7756540179252625,3.617277616285719e-05,incomplete,0,0,128000,70745.0,2.755166031420231,5.143124610185623,32.967125065624714 +cb3238dc-3946-42a5-aad8-9b9a54226363,73640,0,0.46023279428482056,0.5397213697433472,4.5886350562796e-05,incomplete,0,0,128000,73640.0,3.018917515873909,5.13325072824955,31.059250235557556 +e304f740-85d4-427e-9fd6-c5474e9cd737,11531,1,0.4405680298805237,0.5592595338821411,0.0001724747708067298,incomplete,0,0,128000,11531.0,0.40116626769304276,4.7815414145588875,31.708291731774807 +e304f740-85d4-427e-9fd6-c5474e9cd737,18842,1,0.6414244771003723,0.35465940833091736,0.003916137386113405,complete,1,1,128000,18842.0,0.5581667646765709,4.73874993622303,29.53079156577587 +e304f740-85d4-427e-9fd6-c5474e9cd737,29619,1,0.5816889405250549,0.41641655564308167,0.0018945817137137055,complete,1,1,128000,29619.0,0.842750072479248,4.706874489784241,29.850250110030174 +e304f740-85d4-427e-9fd6-c5474e9cd737,40701,0,0.3338589072227478,0.6659473180770874,0.0001937897759489715,incomplete,0,0,128000,40701.0,1.445750705897808,5.079125054180622,31.952625140547752 +e304f740-85d4-427e-9fd6-c5474e9cd737,54600,1,0.8655244708061218,0.13437898457050323,9.655235044192523e-05,complete,1,1,128000,54600.0,2.032499760389328,4.749624989926815,31.001625582575798 +e304f740-85d4-427e-9fd6-c5474e9cd737,62828,0,0.4587578773498535,0.5411435961723328,9.847679757513106e-05,incomplete,0,0,128000,62828.0,2.3750411346554756,4.857249557971954,32.79420919716358 +e304f740-85d4-427e-9fd6-c5474e9cd737,65819,0,0.08307088166475296,0.9169193506240845,9.722626600705553e-06,incomplete,0,0,128000,65819.0,2.238958142697811,4.7214580699801445,32.456833869218826 diff --git a/experiments/turnsense-1.0/results/run.log b/experiments/turnsense-1.0/results/run.log new file mode 100644 index 0000000..9e13e5d --- /dev/null +++ b/experiments/turnsense-1.0/results/run.log @@ -0,0 +1,30 @@ +WITNESS CPU seed=42 [2.4581515390309505e-05, 7.737393025308847e-05, 0.9998980760574341] repeat identical +2c83253a: 100/489 scores +2c83253a: 200/489 scores +2c83253a: 300/489 scores +2c83253a: 400/489 scores +2c83253a DONE: 489 scores, 6 checkpoints; repeat/future-suffix checks passed +40ae686c: 100/441 scores +40ae686c: 200/441 scores +40ae686c: 300/441 scores +40ae686c: 400/441 scores +40ae686c DONE: 441 scores, 8 checkpoints; repeat/future-suffix checks passed +872a1e67: 100/379 scores +872a1e67: 200/379 scores +872a1e67: 300/379 scores +872a1e67 DONE: 379 scores, 9 checkpoints; repeat/future-suffix checks passed +a266b9ef: 100/421 scores +a266b9ef: 200/421 scores +a266b9ef: 300/421 scores +a266b9ef: 400/421 scores +a266b9ef DONE: 421 scores, 5 checkpoints; repeat/future-suffix checks passed +cb3238dc: 100/478 scores +cb3238dc: 200/478 scores +cb3238dc: 300/478 scores +cb3238dc: 400/478 scores +cb3238dc DONE: 478 scores, 9 checkpoints; repeat/future-suffix checks passed +e304f740: 100/365 scores +e304f740: 200/365 scores +e304f740: 300/365 scores +e304f740 DONE: 365 scores, 7 checkpoints; repeat/future-suffix checks passed +{"native_argmax": {"n": 44, "tn": 17, "fp": 5, "fn": 9, "tp": 13, "accuracy": 0.6818181818181818, "false_reply_rate": 0.22727272727272727, "false_hold_rate": 0.4090909090909091}, "threshold_05": {"n": 44, "tn": 17, "fp": 5, "fn": 9, "tp": 13, "accuracy": 0.6818181818181818, "false_reply_rate": 0.22727272727272727, "false_hold_rate": 0.4090909090909091}, "class_counts": {"complete": 18, "incomplete": 26}} diff --git a/experiments/turnsense-1.0/results/score-timeline.json b/experiments/turnsense-1.0/results/score-timeline.json new file mode 100644 index 0000000..423be70 --- /dev/null +++ b/experiments/turnsense-1.0/results/score-timeline.json @@ -0,0 +1 @@ +{"schema_version":1,"model":"turnsense","name":"TurnSense 1.0","score":"P(complete), 3-class output","sample_interval_ms":200,"method":"TurnSense1.0 FP32, official code/frontend/CMVN and 3-class postprocessing. CPU one intra/inter-op thread. User channel 0 int16/32768, crop received prefix BEFORE librosa resample to 16kHz, last 8s, no future ASR/audio or silence/timeout gates. Score=P(complete), native argmax complete=>1 else0; separately report threshold0.5. Full-prefix resampling is offline causal-window evaluation, not an incremental frontend benchmark.","provenance":{"machine":"macOS-26.4.1-arm64-arm-64bit","hardware":"Apple M4 Mac mini CPU / 16 GB","python":"3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]","dependencies":{"numpy":"2.2.6","onnxruntime":"1.24.4","librosa":"0.11.0","kaldi-native-fbank":"1.22.3","soundfile":"0.13.1"},"providers":["CPUExecutionProvider"],"intra_op_threads":1,"inter_op_threads":1,"model_manifest":{"repo":"brgroup/TurnSense","revision":"341dd68c9df87d74d35b9cee63a1dcf0fff24966","version":"TurnSense1.0 FP32","code_repo":"Bairong-Xdynamics/TurnSense","code_revision":"c6d83e5b0d1355125b05eaf1b4b5c6c1acabb338","files":{"model_fp32.onnx":"82256247dd38f0d9f2f213beec7ede1507347f84422fa48f29d565b613d89976","am.mvn":"29b3c740a2c0cfc6b308126d31d7f265fa2be74f3bb095cd2f143ea970896ae5"},"verified_against":"Hugging Face fixed revision LFS SHA256 / Git blob SHA1"},"script_sha256":"23215a6db3c39f6819761adf1e6cd46a8f7c0c7767d1a3640bc928ecd548b2fb","annotation_sha256":"780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e","frontend_sha256":"22808c254ea2150e290e6bdcf115322a723b67fc4e53b1ef02b8f3f42697187d","official_infer_sha256":"40295fb42a36ae4ecca30093d6bc37acbca9c75304b1a722dba73fd3b30498df"},"calls":[{"call_id":"2c83253a-7977-4e3c-a387-0aa1ea06fbe1","audio_path":"韩泰机器人抢话/音频/2c83253a-7977-4e3c-a387-0aa1ea06fbe1.mp3","audio_sha256":"2b8a67dc76b8975d287df42193647cf040229377537eadaaf3adc13358201fe1","duration_ms":96756.0,"points":[[200,0.0178363],[400,0.000207],[600,0.0002446],[800,0.0002844],[1000,0.0016494],[1200,0.000697],[1400,0.0006115],[1600,0.0009065],[1800,0.0032939],[2000,0.0005226],[2200,0.0005399],[2400,0.002893],[2600,0.0017568],[2800,0.0030404],[3000,0.0005118],[3200,0.0031438],[3400,0.0148187],[3600,0.0088893],[3800,0.0267703],[4000,0.1079392],[4200,0.1640289],[4400,0.1771518],[4600,0.2281101],[4800,0.3023287],[5000,0.3726197],[5200,0.5827284],[5400,0.6222142],[5600,0.6403178],[5800,0.6861727],[6000,0.6640415],[6200,0.7038003],[6400,0.70963],[6600,0.7203923],[6800,0.7315339],[7000,0.7409663],[7200,0.7475415],[7400,0.748975],[7600,0.7580429],[7800,0.7627183],[8000,0.7633237],[8200,0.7346435],[8400,0.7034926],[8600,0.7421032],[8800,0.7579859],[9000,0.6826042],[9200,0.591469],[9400,0.7323183],[9600,0.7009602],[9800,0.6653669],[10000,0.6817113],[10200,0.7021773],[10400,0.7959533],[10600,0.8942059],[10800,0.8481258],[11000,0.6808087],[11200,0.8367343],[11400,0.828746],[11600,0.7297497],[11800,0.7823495],[12000,0.8129674],[12200,0.7058158],[12400,0.7714981],[12600,0.8002841],[12800,0.6861833],[13000,0.7218937],[13200,0.7938313],[13400,0.6250954],[13600,0.6855115],[13800,0.78541],[14000,0.7116413],[14200,0.7725052],[14400,0.831341],[14600,0.7444972],[14800,0.763992],[15000,0.7858365],[15200,0.7457228],[15400,0.753722],[15600,0.8082848],[15800,0.7443728],[16000,0.7689723],[16200,0.8026711],[16400,0.736576],[16600,0.7320791],[16800,0.7400951],[17000,0.5438784],[17200,0.6274121],[17400,0.5179536],[17600,0.2689535],[17800,0.7455283],[18000,0.6263187],[18200,0.548377],[18400,0.5701733],[18600,0.5053821],[18800,0.4912938],[19000,0.6813485],[19200,0.5070208],[19400,0.6694759],[19600,0.7309887],[19800,0.7397314],[20000,0.626877],[20200,0.5752606],[20400,0.6838375],[20600,0.6732209],[20800,0.6191029],[21000,0.7213494],[21200,0.7217627],[21400,0.6229591],[21600,0.6930925],[21780,0.7006611],[21800,0.6821625],[22000,0.6344182],[22200,0.7240648],[22400,0.6685173],[22600,0.6040169],[22800,0.7342977],[23000,0.6744081],[23200,0.5960476],[23400,0.6968399],[23600,0.680326],[23800,0.5916742],[24000,0.6797784],[24200,0.6528514],[24400,0.611973],[24600,0.6258613],[24800,0.6310549],[25000,0.6205742],[25200,0.6835226],[25400,0.6387326],[25600,0.5942414],[25800,0.5912407],[26000,0.4855837],[26200,0.4772039],[26400,0.3570063],[26600,0.4723601],[26800,0.7712936],[27000,0.6990174],[27200,0.6318534],[27400,0.6617642],[27600,0.6533207],[27800,0.7361921],[28000,0.6252124],[28200,0.6866885],[28400,0.7006403],[28600,0.6711913],[28800,0.7094402],[29000,0.7225072],[29200,0.6789978],[29400,0.7146713],[29600,0.7000801],[29800,0.6661332],[29860,0.66343],[30000,0.6692427],[30200,0.7395513],[30400,0.6811556],[30600,0.6934801],[30800,0.7272593],[31000,0.6488626],[31200,0.6563072],[31400,0.6715727],[31600,0.6818252],[31800,0.6655499],[32000,0.6740088],[32200,0.7080673],[32400,0.6834981],[32600,0.6685868],[32800,0.7016996],[33000,0.6688494],[33200,0.6393299],[33400,0.6938472],[33600,0.6830596],[33800,0.6527736],[34000,0.6760233],[34200,0.6803718],[34400,0.7260348],[34600,0.7269893],[34800,0.7123706],[35000,0.7378045],[35200,0.6813439],[35400,0.6578205],[35600,0.7279257],[35800,0.7006151],[36000,0.7033662],[36200,0.6377264],[36400,0.6766129],[36600,0.6323072],[36800,0.6818649],[37000,0.6371542],[37200,0.5531291],[37400,0.6336681],[37600,0.6252695],[37800,0.2741596],[38000,0.5265656],[38200,0.4572398],[38400,0.1265],[38600,0.2530786],[38800,0.3929802],[39000,0.0015877],[39200,0.007106],[39400,0.1230135],[39600,0.0037841],[39800,0.1361739],[40000,0.4687212],[40200,0.0446772],[40400,0.1404132],[40600,0.5208988],[40800,0.1304845],[41000,0.2280264],[41200,0.5399055],[41400,0.8039055],[41600,0.5088001],[41800,0.516848],[42000,0.3301981],[42200,0.2747379],[42400,0.0685212],[42600,0.0439744],[42800,0.0421752],[43000,0.2193118],[43200,0.446551],[43400,0.7640196],[43600,0.6088725],[43800,0.3629242],[44000,0.4061179],[44200,0.38959],[44400,0.3479891],[44600,0.4951678],[44800,0.8135938],[45000,0.5433949],[45200,0.5039784],[45400,0.6483203],[45600,0.5806699],[45800,0.728401],[46000,0.6947521],[46200,0.4029295],[46400,0.65452],[46600,0.1825368],[46800,0.2570969],[47000,0.4800831],[47200,0.4307536],[47400,0.3419554],[47600,0.4804553],[47800,0.4333433],[48000,0.3992614],[48125,0.3754916],[48200,0.5213512],[48400,0.2980148],[48600,0.4621263],[48800,0.6392155],[49000,0.8855522],[49200,0.8492467],[49400,0.7210796],[49600,0.5433127],[49800,0.5568348],[50000,0.6086456],[50200,0.5716215],[50400,0.5469285],[50600,0.6222637],[50800,0.5209817],[51000,0.4860169],[51200,0.5489588],[51400,0.4440819],[51600,0.6222915],[51800,0.6572611],[52000,0.6445516],[52200,0.5898518],[52400,0.5472692],[52600,0.3712828],[52800,0.2879995],[53000,0.5873629],[53200,0.6445374],[53400,0.6580223],[53600,0.5282627],[53800,0.6961277],[54000,0.5989096],[54200,0.7040219],[54400,0.8051211],[54600,0.7842683],[54800,0.6908133],[55000,0.6380749],[55200,0.7659288],[55400,0.6475256],[55600,0.6270221],[55800,0.5292494],[56000,0.4688895],[56200,0.588433],[56400,0.4879606],[56600,0.5852207],[56800,0.7430471],[57000,0.623823],[57200,0.4508937],[57400,0.5497983],[57600,0.6142558],[57800,0.478925],[58000,0.6523591],[58200,0.7267606],[58400,0.6729903],[58600,0.6581766],[58800,0.8214356],[59000,0.8896897],[59200,0.845659],[59400,0.8569958],[59600,0.8533292],[59800,0.8393354],[60000,0.881837],[60200,0.8527598],[60400,0.8476332],[60600,0.8504322],[60800,0.6680584],[61000,0.4001373],[61200,0.5095777],[61400,0.6979622],[61600,0.5778531],[61800,0.3501729],[62000,0.5882457],[62200,0.3297383],[62400,0.2798843],[62600,0.2546217],[62800,0.5055119],[63000,0.4159018],[63200,0.5698012],[63400,0.4968119],[63600,0.5019943],[63800,0.5113313],[64000,0.488448],[64200,0.5499619],[64400,0.503485],[64600,0.5042909],[64800,0.6320382],[65000,0.4753278],[65200,0.4773422],[65400,0.6490434],[65600,0.5670788],[65800,0.5468879],[66000,0.7265475],[66200,0.5358512],[66400,0.6680547],[66600,0.7271643],[66800,0.6368654],[67000,0.569313],[67200,0.6996092],[67400,0.624429],[67600,0.5846494],[67800,0.6799897],[68000,0.6337839],[68200,0.5868098],[68400,0.6805912],[68600,0.7089961],[68800,0.6110392],[69000,0.6855382],[69200,0.7359999],[69400,0.737581],[69600,0.7327126],[69800,0.7337416],[70000,0.7510819],[70200,0.7388754],[70400,0.6770139],[70600,0.6958067],[70800,0.6687016],[71000,0.7248045],[71200,0.7550344],[71400,0.6600571],[71600,0.6037934],[71800,0.6488734],[72000,0.6343992],[72200,0.3691687],[72400,0.2246834],[72600,0.2034899],[72800,0.273439],[73000,0.2208742],[73200,0.2486971],[73400,0.4011554],[73600,0.5231908],[73800,0.4295832],[74000,0.2861274],[74200,0.4190951],[74400,0.3655045],[74600,0.3843402],[74800,0.3738424],[75000,0.3824555],[75200,0.294322],[75400,0.1013714],[75600,0.1871898],[75800,0.2537394],[76000,0.1106631],[76200,0.3076403],[76400,0.2843949],[76600,0.1366699],[76672,0.1356463],[76800,0.3319257],[77000,0.2460236],[77200,0.1331564],[77400,0.0964391],[77600,0.0161882],[77800,0.5929056],[78000,0.7051206],[78200,0.6064699],[78400,0.515643],[78600,0.2732659],[78800,0.0705031],[79000,0.1830254],[79200,0.1787158],[79400,0.2659435],[79600,0.605333],[79800,0.2189865],[80000,0.2205746],[80200,0.3239655],[80400,0.2813751],[80600,0.2665145],[80800,0.3850657],[81000,0.4127535],[81200,0.3855859],[81400,0.340971],[81600,0.3929981],[81800,0.3213171],[82000,0.4307353],[82200,0.5318168],[82400,0.5131776],[82600,0.4689304],[82800,0.603472],[83000,0.2835218],[83200,0.2828057],[83400,0.5219962],[83600,0.3709981],[83800,0.3309115],[84000,0.5331294],[84200,0.3701931],[84400,0.379019],[84600,0.5304236],[84800,0.4560757],[85000,0.4962198],[85200,0.6203974],[85400,0.7884029],[85600,0.7925639],[85800,0.7513865],[86000,0.845903],[86200,0.7439554],[86400,0.8030547],[86600,0.8121089],[86800,0.659826],[87000,0.3362326],[87200,0.4522335],[87400,0.2867556],[87600,0.4807613],[87800,0.3532479],[88000,0.2098191],[88200,0.7072001],[88400,0.903816],[88482,0.9423799],[88600,0.8998838],[88800,0.9481915],[89000,0.9262826],[89200,0.9207526],[89400,0.9363479],[89600,0.9331752],[89800,0.9342266],[90000,0.9343868],[90200,0.9389665],[90400,0.9343364],[90600,0.938194],[90800,0.9413312],[91000,0.9253713],[91200,0.9360213],[91400,0.9369714],[91600,0.8894561],[91800,0.9193924],[92000,0.9071024],[92200,0.8723215],[92400,0.9072634],[92600,0.8811852],[92800,0.8536597],[93000,0.8326469],[93200,0.8364612],[93400,0.8606519],[93600,0.8455553],[93800,0.9503784],[94000,0.9615791],[94200,0.9151545],[94400,0.9586047],[94600,0.9711351],[94800,0.7293826],[95000,0.9441658],[95200,0.8576227],[95400,0.8900265],[95600,0.9372406],[95800,0.8361854],[96000,0.8028092],[96200,0.7149861],[96400,0.7072985],[96600,0.7321792],[96756,0.7488396]],"checkpoints":[[21780,0.7006611],[29860,0.66343],[48125,0.3754916],[64000,0.488448],[76672,0.1356463],[88482,0.9423799]]},{"call_id":"40ae686c-8196-4d7b-b7ad-3e12a427ebb6","audio_path":"韩泰机器人抢话/音频/40ae686c-8196-4d7b-b7ad-3e12a427ebb6.mp3","audio_sha256":"130be37286d48f7badca711a068fab19a2686bd83248a71c73c11ce77650d39d","duration_ms":86596.0,"points":[[200,0.0158544],[400,0.0006259],[600,0.0001983],[800,7.07e-05],[1000,0.0001856],[1200,0.000645],[1400,0.0002959],[1600,0.0002432],[1800,0.0008543],[2000,0.0014652],[2200,0.004172],[2400,0.0108062],[2600,0.009804],[2800,0.0080102],[3000,0.0117506],[3200,0.0374362],[3400,0.03795],[3600,0.1227463],[3800,0.1426978],[4000,0.107581],[4200,0.2416616],[4400,0.265665],[4600,0.3252636],[4800,0.4627149],[5000,0.6003878],[5200,0.5686206],[5400,0.5816981],[5600,0.6335878],[5800,0.5324668],[6000,0.6558332],[6200,0.6444138],[6400,0.6621927],[6600,0.6656086],[6800,0.6990898],[7000,0.6997004],[7200,0.6634633],[7400,0.7058861],[7600,0.7285465],[7800,0.6960661],[8000,0.7299036],[8200,0.7687185],[8400,0.7668507],[8600,0.7475227],[8800,0.726849],[9000,0.744368],[9200,0.6957663],[9400,0.7479381],[9600,0.7382418],[9800,0.7227789],[10000,0.762829],[10200,0.7519438],[10400,0.7641417],[10600,0.7891389],[10800,0.7904708],[11000,0.6032224],[11200,0.7466046],[11400,0.6100205],[11600,0.5778429],[11800,0.5993344],[12000,0.4846309],[12200,0.5059258],[12400,0.5814234],[12600,0.5543948],[12800,0.577058],[13000,0.5493624],[13200,0.5724595],[13400,0.5928336],[13600,0.578764],[13800,0.6218741],[14000,0.5849128],[14200,0.6272462],[14400,0.6420469],[14600,0.6153545],[14800,0.6808828],[15000,0.653716],[15200,0.5861766],[15400,0.6475847],[15600,0.6416438],[15800,0.5692136],[16000,0.6355045],[16200,0.5958667],[16400,0.5708517],[16600,0.617045],[16800,0.5834292],[17000,0.5627204],[17200,0.615352],[17400,0.6321641],[17600,0.5789761],[17800,0.6223022],[18000,0.5755627],[18200,0.5400786],[18400,0.5664807],[18600,0.5670381],[18800,0.5754253],[19000,0.6118082],[19200,0.7442451],[19400,0.6794922],[19600,0.5908671],[19800,0.3927195],[20000,0.4054333],[20200,0.4250413],[20400,0.2322668],[20600,0.3780255],[20800,0.4738147],[21000,0.315652],[21200,0.4279287],[21400,0.4723357],[21600,0.3076235],[21800,0.4218125],[22000,0.4644883],[22007,0.3481479],[22200,0.3620748],[22400,0.4487017],[22600,0.4873675],[22800,0.3752047],[23000,0.4445082],[23200,0.4620415],[23400,0.3639632],[23600,0.405621],[23800,0.3763467],[24000,0.3338355],[24200,0.335022],[24400,0.3832725],[24600,0.2851222],[24800,0.3240825],[25000,0.3872725],[25200,0.2691735],[25400,0.3591911],[25600,0.3936217],[25800,0.2415422],[26000,0.3407183],[26200,0.4051333],[26400,0.1887884],[26600,0.3419679],[26800,0.3864658],[27000,0.2978923],[27200,0.5129382],[27400,0.6531202],[27600,0.6726454],[27800,0.7075245],[28000,0.7478883],[28200,0.7166525],[28400,0.7357354],[28600,0.769426],[28800,0.7432813],[29000,0.7498185],[29200,0.6727269],[29400,0.6309617],[29600,0.5066237],[29800,0.4827808],[30000,0.4274991],[30200,0.3876384],[30400,0.4007607],[30600,0.3666703],[30800,0.3722675],[31000,0.4083758],[31200,0.3655158],[31400,0.4070331],[31600,0.4326819],[31800,0.3769376],[31842,0.4427306],[32000,0.3936881],[32200,0.4302006],[32400,0.4211428],[32600,0.3932387],[32800,0.44412],[33000,0.4395715],[33200,0.4422877],[33400,0.4967147],[33600,0.4971887],[33800,0.4374788],[34000,0.5017949],[34200,0.4544439],[34400,0.4214789],[34600,0.4976695],[34800,0.4728966],[35000,0.4354311],[35200,0.479526],[35400,0.4857892],[35600,0.4213478],[35800,0.4616064],[36000,0.4783401],[36200,0.4010177],[36400,0.4006204],[36600,0.3868838],[36800,0.4171246],[37000,0.5523897],[37200,0.4241351],[37400,0.6379694],[37600,0.7508541],[37800,0.6942006],[38000,0.7131171],[38200,0.6793028],[38400,0.7178214],[38600,0.7346821],[38800,0.5929693],[39000,0.6875045],[39200,0.673041],[39400,0.2907073],[39600,0.614359],[39800,0.5639855],[40000,0.3549022],[40200,0.4275602],[40400,0.6999913],[40600,0.498291],[40800,0.6786445],[41000,0.6428722],[41200,0.2366418],[41400,0.5936254],[41600,0.3599067],[41800,0.025935],[42000,0.6509744],[42200,0.5455715],[42400,0.4787262],[42600,0.3073786],[42800,0.1854145],[43000,0.0774795],[43200,0.0367291],[43400,0.0395731],[43600,0.3466608],[43800,0.4899069],[44000,0.5061163],[44200,0.6108477],[44400,0.6891288],[44600,0.687937],[44800,0.6278847],[45000,0.5296428],[45200,0.5181313],[45400,0.4530575],[45600,0.4562481],[45800,0.2612465],[46000,0.3693316],[46200,0.274985],[46400,0.2063359],[46600,0.2828914],[46800,0.3257957],[47000,0.2961634],[47200,0.1162321],[47400,0.2977896],[47600,0.6689718],[47800,0.7548335],[48000,0.7761391],[48200,0.6894949],[48400,0.7316462],[48536,0.7467879],[48600,0.7844959],[48800,0.1155039],[49000,0.1628176],[49200,0.1926688],[49400,0.3736744],[49600,0.0517098],[49800,0.2004091],[50000,0.2427215],[50200,0.212203],[50400,0.4254462],[50600,0.9454902],[50800,0.9082015],[51000,0.9083819],[51200,0.9331752],[51400,0.892378],[51600,0.9303386],[51800,0.882643],[52000,0.898058],[52200,0.8907464],[52348,0.9037414],[52400,0.9178272],[52600,0.8797799],[52800,0.9161001],[53000,0.9219254],[53200,0.8810916],[53400,0.9025511],[53600,0.8758539],[53800,0.8204491],[54000,0.8924843],[54200,0.9053038],[54400,0.8589758],[54600,0.9225289],[54800,0.90365],[55000,0.8544683],[55200,0.9212288],[55400,0.8733141],[55600,0.8666372],[55800,0.9099215],[56000,0.863367],[56200,0.8424754],[56400,0.8887165],[56600,0.85809],[56800,0.7995408],[57000,0.8144323],[57200,0.7162518],[57400,0.7066559],[57600,0.6677995],[57800,0.5899087],[58000,0.6096818],[58200,0.5862767],[58400,0.6114036],[58600,0.7521802],[58800,0.7335959],[59000,0.7660593],[59200,0.77635],[59400,0.758989],[59600,0.77841],[59800,0.7887979],[60000,0.7735341],[60200,0.7648207],[60400,0.7703781],[60600,0.7343319],[60800,0.7232435],[61000,0.7208145],[61200,0.6885633],[61400,0.6994954],[61600,0.7421136],[61800,0.7047637],[62000,0.6801431],[62200,0.7250077],[62400,0.6656521],[62600,0.6653492],[62800,0.6497147],[63000,0.5152162],[63200,0.4913681],[63400,0.5078709],[63600,0.2951916],[63800,0.1994468],[64000,0.1268173],[64200,0.1591617],[64400,0.1762704],[64600,0.1352006],[64800,0.2015101],[65000,0.1729925],[65200,0.1686423],[65298,0.1658399],[65400,0.1697838],[65600,0.2085532],[65800,0.2053116],[66000,0.4559084],[66200,0.4294006],[66400,0.4867334],[66600,0.1961182],[66800,0.2562883],[67000,0.1735386],[67200,0.1072456],[67400,0.147176],[67600,0.1599757],[67800,0.1078875],[67943,0.1202217],[68000,0.1310299],[68200,0.1253604],[68400,0.3975505],[68600,0.220849],[68800,0.1906107],[69000,0.3646807],[69200,0.3420106],[69400,0.3321647],[69600,0.1189632],[69800,0.0169928],[70000,0.0046809],[70200,0.0032925],[70400,0.0021697],[70430,0.0029644],[70600,0.0027819],[70800,0.3098444],[71000,0.0542404],[71200,0.1064691],[71400,0.0798242],[71600,0.0588033],[71800,0.0614255],[72000,0.0914205],[72200,0.0885697],[72400,0.0984873],[72600,0.1387219],[72800,0.1129412],[73000,0.1220363],[73200,0.1758],[73400,0.1660408],[73600,0.210421],[73800,0.2788947],[74000,0.1444249],[74200,0.1829808],[74400,0.252565],[74600,0.1663715],[74800,0.2131428],[75000,0.2568795],[75200,0.1658345],[75400,0.196739],[75600,0.1892827],[75800,0.1650828],[76000,0.1925619],[76200,0.2748834],[76400,0.250067],[76600,0.2739233],[76800,0.2869371],[77000,0.3000362],[77200,0.3672611],[77400,0.372006],[77600,0.3648434],[77800,0.5361197],[78000,0.4946926],[78200,0.4887716],[78400,0.5926192],[78600,0.6144015],[78800,0.6998357],[79000,0.7253319],[79200,0.7350116],[79400,0.7515336],[79600,0.7357187],[79800,0.7495155],[80000,0.6969111],[80200,0.6813058],[80400,0.7118361],[80600,0.6958807],[80800,0.7542651],[81000,0.6387891],[81200,0.5971279],[81400,0.4324649],[81600,0.5753645],[81800,0.5423182],[82000,0.6411543],[82200,0.6912092],[82400,0.5768376],[82600,0.5998161],[82800,0.6549036],[82941,0.5291795],[83000,0.5188336],[83200,0.5650292],[83400,0.6142855],[83600,0.4890018],[83800,0.551664],[84000,0.5913139],[84200,0.4687909],[84400,0.5569265],[84600,0.5767868],[84800,0.4987827],[85000,0.5610018],[85200,0.5960081],[85400,0.4743822],[85600,0.5933869],[85800,0.5954644],[86000,0.496305],[86200,0.5863997],[86400,0.5353552],[86596,0.4867431]],"checkpoints":[[22007,0.3481479],[31842,0.4427306],[48536,0.7467879],[52348,0.9037414],[65298,0.1658399],[67943,0.1202217],[70430,0.0029644],[82941,0.5291795]]},{"call_id":"872a1e67-873a-4c49-a598-b38a670afcad","audio_path":"韩泰机器人抢话/音频/872a1e67-873a-4c49-a598-b38a670afcad.mp3","audio_sha256":"54c5672ea491cc3daedd75e80f97e82cc061ccbf14e521bc22ca55f15fa062a5","duration_ms":73816.0,"points":[[200,0.0033791],[400,0.0002261],[600,0.000122],[800,4.3e-05],[1000,3.81e-05],[1200,6.88e-05],[1400,0.0001381],[1600,6.28e-05],[1800,5.28e-05],[2000,5.97e-05],[2200,8.24e-05],[2400,0.0001182],[2600,0.000109],[2800,0.0002114],[3000,0.0007747],[3200,0.0007943],[3400,0.0023927],[3600,0.0025673],[3800,0.0060572],[4000,0.0146268],[4200,0.0817695],[4400,0.0738332],[4600,0.0836932],[4800,0.3438329],[5000,0.3370945],[5200,0.4666018],[5400,0.5247559],[5600,0.5597222],[5800,0.5469276],[6000,0.5202537],[6200,0.5099849],[6400,0.5844812],[6600,0.6171787],[6800,0.6432045],[7000,0.6650801],[7200,0.6780927],[7400,0.6905351],[7600,0.7061469],[7800,0.7147415],[8000,0.7198629],[8200,0.7420005],[8400,0.7278695],[8600,0.6998101],[8800,0.7331884],[9000,0.7523676],[9200,0.7063488],[9400,0.7511119],[9600,0.5627987],[9800,0.4897384],[10000,0.5662148],[10200,0.6000841],[10400,0.4809916],[10600,0.6041544],[10800,0.5910027],[11000,0.3914385],[11200,0.5376753],[11400,0.5629023],[11600,0.4109802],[11800,0.4928064],[12000,0.5798289],[12200,0.5658864],[12400,0.610892],[12600,0.3880865],[12800,0.2959433],[13000,0.5048261],[13200,0.3100054],[13400,0.2112063],[13600,0.5089055],[13800,0.2414671],[14000,0.1632574],[14200,0.3381903],[14400,0.3376725],[14600,0.220708],[14800,0.6274698],[15000,0.7846389],[15200,0.6956046],[15400,0.6859403],[15600,0.7283002],[15800,0.6032619],[16000,0.5571142],[16200,0.7387459],[16400,0.6179249],[16600,0.5277606],[16800,0.6740814],[17000,0.6252881],[17153,0.6752945],[17200,0.633391],[17400,0.6437355],[17600,0.5204557],[17800,0.5230066],[18000,0.5983331],[18200,0.6496903],[18400,0.5445243],[18600,0.666105],[18800,0.6634781],[19000,0.5982439],[19200,0.6735375],[19400,0.5795805],[19600,0.5157452],[19800,0.6703975],[20000,0.4874255],[20200,0.5196767],[20400,0.5127974],[20600,0.3479169],[20800,0.2768947],[21000,0.2795079],[21200,0.2681201],[21400,0.1868013],[21600,0.3349971],[21800,0.2775743],[22000,0.2092826],[22200,0.2777531],[22400,0.3382487],[22600,0.4365502],[22800,0.3309266],[23000,0.3450581],[23200,0.2843053],[23400,0.2182909],[23600,0.1427812],[23800,0.1572316],[24000,0.1396434],[24200,0.1889158],[24400,0.2006803],[24600,0.2058341],[24800,0.2136236],[24846,0.1922666],[25000,0.2266014],[25200,0.2030134],[25400,0.2318383],[25600,0.2653048],[25800,0.1774209],[26000,0.1938094],[26200,0.2508411],[26400,0.1795152],[26600,0.1770041],[26800,0.1935896],[27000,0.1596944],[27200,0.1534804],[27400,0.2190839],[27600,0.185236],[27800,0.1592095],[28000,0.1763908],[28200,0.1715463],[28400,0.428133],[28600,0.1770693],[28800,0.0870903],[29000,0.1064342],[29200,0.090507],[29400,0.0745745],[29600,0.1068276],[29800,0.0871617],[30000,0.3074364],[30200,0.3576543],[30400,0.6159662],[30600,0.6584159],[30800,0.5502748],[31000,0.5738114],[31200,0.5191064],[31400,0.7699398],[31600,0.7933439],[31800,0.7269958],[32000,0.7198048],[32200,0.7580668],[32400,0.6878768],[32600,0.6740292],[32800,0.7376055],[33000,0.67173],[33200,0.6397923],[33400,0.7144072],[33471,0.6702106],[33600,0.6941382],[33800,0.6497222],[34000,0.7324393],[34200,0.7039263],[34400,0.7144142],[34600,0.7618455],[34800,0.7341399],[35000,0.7177098],[35200,0.7727208],[35400,0.7465053],[35600,0.711264],[35800,0.7519231],[36000,0.7316032],[36200,0.6835067],[36400,0.7480447],[36600,0.7414251],[36800,0.6933559],[37000,0.776246],[37200,0.8136182],[37400,0.7656167],[37600,0.7674722],[37800,0.8100591],[38000,0.7875197],[38200,0.815879],[38400,0.8032295],[38600,0.8161669],[38800,0.7867822],[39000,0.7254015],[39200,0.6355464],[39400,0.740949],[39600,0.7349469],[39800,0.5864729],[40000,0.5642694],[40200,0.6457848],[40400,0.3907574],[40600,0.5838658],[40800,0.577038],[41000,0.0185036],[41200,0.1804843],[41400,0.0862666],[41600,0.000641],[41800,0.1196184],[42000,0.5079564],[42200,0.0032278],[42400,0.7935728],[42600,0.684425],[42800,0.5917545],[43000,0.5312616],[43200,0.4312343],[43400,0.446197],[43600,0.4824035],[43800,0.3353632],[44000,0.7199671],[44200,0.7082008],[44400,0.6124839],[44600,0.5450684],[44800,0.7011492],[44810,0.6136469],[45000,0.5916409],[45200,0.6635172],[45400,0.6332964],[45581,0.5043333],[45600,0.4596691],[45800,0.6533676],[46000,0.603667],[46200,0.5503854],[46400,0.4265742],[46600,0.400977],[46800,0.328114],[47000,0.3671032],[47187,0.3344066],[47200,0.406103],[47400,0.2417633],[47600,0.407713],[47800,0.1068319],[48000,0.0585772],[48200,0.202276],[48400,0.265809],[48600,0.1396476],[48800,0.2555815],[49000,0.2167032],[49200,0.2880707],[49400,0.4898951],[49500,0.4649328],[49600,0.5510975],[49800,0.5167096],[50000,0.428114],[50200,0.601864],[50400,0.520079],[50600,0.3922418],[50800,0.5206479],[51000,0.3386595],[51200,0.4114546],[51400,0.2441743],[51600,0.4485628],[51800,0.2933954],[52000,0.2058734],[52200,0.3087217],[52326,0.3129492],[52400,0.2100928],[52600,0.2167485],[52800,0.3106916],[53000,0.2482727],[53200,0.2486704],[53400,0.49472],[53600,0.4071247],[53800,0.7083943],[54000,0.8169069],[54200,0.715979],[54318,0.7077078],[54400,0.6268285],[54600,0.7356788],[54800,0.6241149],[55000,0.4905981],[55200,0.6458889],[55400,0.5355309],[55600,0.5950609],[55800,0.7311073],[56000,0.6220095],[56200,0.7346217],[56400,0.7964097],[56600,0.7123369],[56800,0.5819908],[57000,0.6489487],[57200,0.6202387],[57400,0.4832627],[57600,0.3001057],[57800,0.2084478],[58000,0.3117942],[58200,0.2733541],[58400,0.3120857],[58600,0.3079346],[58800,0.3209216],[59000,0.3744084],[59200,0.4623103],[59400,0.2280493],[59600,0.2869956],[59800,0.3661234],[60000,0.3654874],[60200,0.2540621],[60400,0.5449546],[60600,0.6284118],[60800,0.6610589],[61000,0.2463106],[61200,0.2928459],[61400,0.255508],[61600,0.4581678],[61800,0.2393506],[62000,0.3507456],[62200,0.3185391],[62400,0.2773627],[62600,0.338791],[62800,0.3555504],[63000,0.1870967],[63200,0.2943337],[63400,0.3165103],[63600,0.1631647],[63800,0.2572554],[64000,0.2350197],[64200,0.1686822],[64400,0.3071525],[64600,0.5071398],[64800,0.5505485],[65000,0.6113766],[65200,0.653002],[65400,0.6915515],[65600,0.6784873],[65800,0.6687164],[66000,0.6609963],[66200,0.6566858],[66400,0.6175666],[66600,0.6099231],[66800,0.5870903],[67000,0.6529355],[67200,0.6778289],[67400,0.663349],[67600,0.7664011],[67800,0.7242835],[68000,0.4992492],[68200,0.3440487],[68400,0.4600497],[68600,0.6904093],[68800,0.6804647],[69000,0.5801699],[69200,0.5595111],[69400,0.638898],[69600,0.5445707],[69800,0.5337085],[70000,0.589057],[70200,0.5456282],[70400,0.5276634],[70600,0.4805191],[70800,0.4670062],[71000,0.52926],[71200,0.4714493],[71400,0.4575498],[71600,0.5649167],[71800,0.4901372],[72000,0.4836599],[72200,0.5423297],[72400,0.5104929],[72600,0.5137295],[72800,0.5524069],[73000,0.5442817],[73200,0.5350726],[73400,0.5169823],[73600,0.4886601],[73800,0.5125455],[73816,0.5580186]],"checkpoints":[[17153,0.6752945],[24846,0.1922666],[33471,0.6702106],[44810,0.6136469],[45581,0.5043333],[47187,0.3344066],[49500,0.4649328],[52326,0.3129492],[54318,0.7077078]]},{"call_id":"a266b9ef-5e47-4434-a04c-ce4eacd52c19","audio_path":"韩泰机器人抢话/音频/a266b9ef-5e47-4434-a04c-ce4eacd52c19.mp3","audio_sha256":"9a7ebe093e66aaaa08ac462f975b7d428df79a38ed5b418265b82c77d8b91f46","duration_ms":83016.0,"points":[[200,0.0064349],[400,5.01e-05],[600,3.85e-05],[800,2.82e-05],[1000,3.01e-05],[1200,1.84e-05],[1400,2.99e-05],[1600,3.32e-05],[1800,3.04e-05],[2000,2.6e-05],[2200,4.59e-05],[2400,3.49e-05],[2600,3.28e-05],[2800,3.48e-05],[3000,4.11e-05],[3200,4.34e-05],[3400,3.85e-05],[3600,3.24e-05],[3800,3.02e-05],[4000,3.85e-05],[4200,4.21e-05],[4400,8.43e-05],[4600,0.0001614],[4800,0.0004182],[5000,0.0005708],[5200,0.0010116],[5400,0.0016115],[5600,0.001674],[5800,0.0042944],[6000,0.0058116],[6200,0.0062703],[6400,0.0107834],[6600,0.0137931],[6800,0.0174016],[7000,0.1082509],[7200,0.1220452],[7400,0.2238494],[7600,0.1468683],[7800,0.2193923],[8000,0.3581634],[8200,0.4619749],[8400,0.6096452],[8600,0.5651736],[8800,0.5635069],[9000,0.6037651],[9200,0.1715634],[9400,0.0058076],[9600,0.7155424],[9800,0.7911751],[10000,0.6717935],[10200,0.6077862],[10400,0.6739198],[10600,0.6703287],[10800,0.6183337],[11000,0.6693226],[11200,0.6355006],[11400,0.5888361],[11600,0.6297256],[11800,0.6489714],[12000,0.6210827],[12200,0.6563861],[12400,0.6757481],[12600,0.6301333],[12800,0.6314595],[13000,0.6436269],[13200,0.61445],[13400,0.6113924],[13600,0.6147576],[13800,0.5979931],[14000,0.5865055],[14200,0.6105767],[14400,0.5915429],[14600,0.5904176],[14800,0.6016085],[15000,0.5809716],[15200,0.6052021],[15400,0.7036445],[15600,0.6592268],[15800,0.3487744],[16000,0.2012074],[16200,0.0749065],[16400,0.1136],[16600,0.1138958],[16800,0.0983959],[17000,0.1428338],[17200,0.1934052],[17400,0.2770846],[17600,0.1919136],[17800,0.1436482],[18000,0.1135254],[18027,0.1985071],[18200,0.201555],[18400,0.1692793],[18600,0.1623367],[18800,0.2088287],[19000,0.2079041],[19200,0.1746175],[19400,0.2101874],[19600,0.184548],[19800,0.2018835],[20000,0.2053391],[20200,0.1452956],[20400,0.2315973],[20600,0.188764],[20800,0.1578009],[21000,0.2553204],[21200,0.2643717],[21400,0.2112769],[21600,0.3240658],[21800,0.4021374],[22000,0.1712195],[22200,0.3489835],[22400,0.3405583],[22600,0.2935451],[22800,0.2842321],[23000,0.1516546],[23200,0.14241],[23400,0.2240211],[23600,0.2051062],[23800,0.2944391],[24000,0.3128535],[24200,0.266919],[24400,0.3775802],[24600,0.3815636],[24768,0.454389],[24800,0.3104653],[25000,0.4608564],[25200,0.4743176],[25400,0.4422129],[25600,0.5323418],[25800,0.4989749],[26000,0.3954728],[26200,0.5328235],[26400,0.4821548],[26600,0.3969634],[26800,0.5161971],[27000,0.48079],[27200,0.5175017],[27400,0.5510923],[27600,0.4621789],[27800,0.4499955],[28000,0.5700383],[28200,0.5400041],[28400,0.461036],[28600,0.5902236],[28800,0.5879348],[29000,0.5580394],[29200,0.5568067],[29400,0.5867472],[29600,0.3556867],[29800,0.393656],[30000,0.3564239],[30200,0.2970267],[30400,0.4162904],[30600,0.4284514],[30800,0.5048117],[31000,0.0112047],[31200,0.0153725],[31400,0.0041132],[31600,0.0325831],[31800,0.021552],[32000,0.0088737],[32200,0.0776348],[32400,0.0163413],[32600,0.0122002],[32800,0.0924277],[33000,0.0713327],[33200,0.0712329],[33400,0.0643013],[33600,0.0436915],[33800,0.0409806],[34000,0.0298012],[34200,0.0265437],[34400,0.0169324],[34600,0.2346502],[34800,0.3885295],[35000,0.4050261],[35200,0.4674839],[35400,0.3533392],[35600,0.2751342],[35800,0.3032048],[36000,0.2467648],[36200,0.195619],[36400,0.2334017],[36600,0.3641896],[36800,0.4170878],[37000,0.3041668],[37200,0.4722199],[37400,0.3855559],[37600,0.2301927],[37800,0.1272585],[38000,0.3407751],[38200,0.19165],[38400,0.1233574],[38600,0.2355014],[38800,0.2355213],[39000,0.249697],[39200,0.2564355],[39400,0.2432852],[39600,0.2246794],[39800,0.2526788],[40000,0.2461],[40200,0.2302003],[40400,0.2329944],[40600,0.2442536],[40800,0.1878035],[41000,0.2165647],[41200,0.1962179],[41219,0.2002989],[41400,0.1527184],[41600,0.0678904],[41800,0.0354082],[42000,0.0383558],[42200,0.1122502],[42400,0.0319853],[42600,0.0385172],[42800,0.0242658],[43000,0.0292106],[43200,0.0242214],[43400,0.0387959],[43600,0.0241234],[43800,0.0342363],[44000,0.0605771],[44200,0.0379311],[44400,0.0532408],[44600,0.0445925],[44800,0.0435407],[45000,0.1000964],[45200,0.203473],[45400,0.0680293],[45600,0.0442062],[45800,0.2548238],[46000,0.1058918],[46200,0.0298634],[46400,0.1331371],[46600,0.1637793],[46800,0.122957],[47000,0.1662192],[47200,0.0543028],[47400,0.068822],[47600,0.1995571],[47800,0.1934882],[48000,0.1624395],[48200,0.1248839],[48400,0.135492],[48600,0.1641551],[48800,0.1144125],[49000,0.0424055],[49200,0.0488966],[49400,0.0592496],[49600,0.0096577],[49800,0.0096858],[50000,0.0569204],[50200,0.1026077],[50400,0.2723227],[50600,0.1640324],[50800,0.2916433],[51000,0.3899607],[51080,0.6161021],[51200,0.8921825],[51400,0.8804185],[51600,0.8671005],[51800,0.8409059],[52000,0.8446555],[52200,0.8349784],[52400,0.7547383],[52600,0.7992597],[52800,0.8674181],[53000,0.8599505],[53200,0.8537942],[53400,0.9111615],[53600,0.8403214],[53800,0.8257341],[54000,0.9406433],[54200,0.943027],[54400,0.935236],[54600,0.9515054],[54800,0.9323245],[55000,0.9054856],[55200,0.9173536],[55400,0.8914484],[55600,0.8463386],[55800,0.863722],[56000,0.8561359],[56200,0.8452401],[56400,0.8509721],[56600,0.8468372],[56800,0.8906137],[57000,0.8158048],[57200,0.7917444],[57400,0.6492872],[57600,0.6475927],[57800,0.708846],[58000,0.6090687],[58200,0.6128221],[58400,0.6336432],[58600,0.6563887],[58800,0.67668],[59000,0.5428688],[59200,0.0012898],[59400,0.0009969],[59600,0.0039081],[59800,0.0021011],[60000,0.0016617],[60200,0.0030511],[60400,0.0048426],[60600,0.0024659],[60800,0.0033177],[61000,0.3587427],[61200,0.6226898],[61400,0.5068212],[61600,0.3397152],[61800,0.411236],[62000,0.5565184],[62200,0.4846604],[62400,0.3855629],[62600,0.2964402],[62800,0.4080199],[63000,0.242285],[63200,0.4447932],[63400,0.3137251],[63600,0.2908633],[63800,0.1693738],[64000,0.1955236],[64200,0.2130333],[64400,0.2170105],[64600,0.2463371],[64800,0.2650115],[65000,0.3485136],[65200,0.3353895],[65400,0.5923997],[65600,0.3348729],[65800,0.0843334],[66000,0.1283344],[66200,0.1489712],[66400,0.2284414],[66600,0.2262103],[66800,0.7149872],[67000,0.8506206],[67200,0.8207864],[67400,0.7827692],[67600,0.8448531],[67800,0.7906434],[68000,0.7889221],[68200,0.8671294],[68313,0.8574622],[68400,0.7865959],[68600,0.7301263],[68800,0.5824727],[69000,0.2922293],[69200,0.2710955],[69400,0.1439345],[69600,0.0180815],[69800,0.6455609],[70000,0.9176025],[70200,0.8590128],[70400,0.8874468],[70600,0.9047508],[70800,0.8320698],[71000,0.8609012],[71200,0.8493036],[71400,0.8783111],[71600,0.8752064],[71800,0.901194],[72000,0.9000556],[72200,0.8861301],[72400,0.9050866],[72600,0.8632034],[72800,0.861533],[73000,0.7815557],[73200,0.7726415],[73400,0.8050411],[73600,0.8225245],[73800,0.7782797],[74000,0.8012017],[74200,0.7484463],[74400,0.6634694],[74600,0.6872938],[74800,0.6706311],[75000,0.6026379],[75200,0.6566098],[75400,0.7216826],[75600,0.5995818],[75800,0.6948771],[76000,0.6840062],[76200,0.5706156],[76400,0.7173883],[76600,0.7621096],[76800,0.6666912],[77000,0.7190794],[77200,0.7185888],[77400,0.6147524],[77600,0.5473718],[77800,0.6335292],[78000,0.5131635],[78200,0.4927767],[78400,0.4185682],[78600,0.4033189],[78800,0.4775491],[79000,0.3752429],[79200,0.4072419],[79400,0.4467655],[79600,0.294034],[79800,0.4285707],[80000,0.4493274],[80200,0.3992317],[80400,0.3340436],[80600,0.34577],[80800,0.2952587],[81000,0.3160758],[81200,0.34241],[81400,0.266787],[81600,0.3261682],[81800,0.31418],[82000,0.2348337],[82200,0.3390478],[82400,0.3186998],[82600,0.2850558],[82800,0.3656091],[83000,0.396369],[83016,0.4085114]],"checkpoints":[[18027,0.1985071],[24768,0.454389],[41219,0.2002989],[51080,0.6161021],[68313,0.8574622]]},{"call_id":"cb3238dc-3946-42a5-aad8-9b9a54226363","audio_path":"韩泰机器人抢话/音频/cb3238dc-3946-42a5-aad8-9b9a54226363.mp3","audio_sha256":"7a74dbf3dd742d3d14317d069c28b703dd1398d5eb3dc1dba3d7a7c568a18d60","duration_ms":93756.0,"points":[[200,0.0034908],[400,0.0001456],[600,4.08e-05],[800,9.19e-05],[1000,3.96e-05],[1200,8.69e-05],[1400,3.49e-05],[1600,4.9e-05],[1800,5.59e-05],[2000,0.0015717],[2200,0.0052173],[2400,0.0013918],[2600,0.0025913],[2800,0.0037109],[3000,0.0292098],[3200,0.0672838],[3400,0.0246516],[3600,0.0399075],[3800,0.0468268],[4000,0.0565225],[4200,0.1072645],[4400,0.10159],[4600,0.1601188],[4800,0.2112298],[5000,0.2690695],[5200,0.3704333],[5400,0.3963256],[5600,0.4493372],[5800,0.4231916],[6000,0.4665175],[6200,0.4734694],[6400,0.5580451],[6600,0.5778446],[6800,0.630867],[7000,0.6489857],[7200,0.6647267],[7400,0.6543424],[7600,0.6512903],[7800,0.6920382],[8000,0.7167596],[8200,0.7324251],[8400,0.7692456],[8600,0.7185598],[8800,0.7471051],[9000,0.7778693],[9200,0.7204283],[9400,0.739446],[9600,0.685308],[9800,0.7090518],[10000,0.6758463],[10200,0.5703588],[10400,0.7179122],[10600,0.6583244],[10800,0.7586119],[11000,0.6789553],[11200,0.6174377],[11400,0.6148996],[11600,0.5312049],[11800,0.5237308],[12000,0.6308341],[12200,0.6145224],[12400,0.587444],[12600,0.6519307],[12800,0.6428739],[13000,0.6177929],[13200,0.6534186],[13400,0.627368],[13540,0.6023414],[13600,0.6117783],[13800,0.6482661],[14000,0.6335263],[14200,0.6199639],[14400,0.6379482],[14600,0.6279259],[14800,0.6422586],[15000,0.6377308],[15200,0.6170974],[15400,0.6114722],[15600,0.6548471],[15800,0.6205476],[16000,0.6176738],[16200,0.6366434],[16400,0.5812919],[16600,0.6023045],[16800,0.6148088],[17000,0.5090009],[17200,0.5756004],[17400,0.6955931],[17600,0.647839],[17800,0.5933889],[18000,0.5968444],[18200,0.5629051],[18400,0.6282471],[18600,0.6773624],[18800,0.5806341],[19000,0.4331188],[19200,0.3734059],[19400,0.3776383],[19600,0.3972616],[19620,0.3794628],[19800,0.3950716],[20000,0.4040544],[20200,0.4362262],[20400,0.4343984],[20600,0.4087486],[20800,0.4606652],[21000,0.4724729],[21200,0.4409467],[21400,0.4540945],[21600,0.4545048],[21800,0.4269637],[22000,0.4504696],[22200,0.4569266],[22400,0.4443817],[22600,0.47077],[22800,0.4796342],[23000,0.4808932],[23200,0.5225864],[23400,0.5208467],[23600,0.4786581],[23800,0.4787186],[24000,0.44032],[24200,0.3342752],[24400,0.4128606],[24600,0.6378626],[24800,0.6524992],[25000,0.537854],[25200,0.6414662],[25400,0.569425],[25600,0.5492265],[25800,0.5432276],[26000,0.5801885],[26200,0.6157669],[26400,0.6055315],[26600,0.5970873],[26800,0.6067044],[27000,0.6182617],[27200,0.604635],[27400,0.6004972],[27520,0.5865507],[27600,0.6166298],[27800,0.6183715],[28000,0.6145049],[28200,0.6181655],[28400,0.5709431],[28600,0.5856082],[28800,0.6070988],[29000,0.5639191],[29200,0.5958146],[29400,0.5942274],[29600,0.549895],[29800,0.5977157],[30000,0.5766257],[30200,0.5489829],[30400,0.5780634],[30600,0.6019801],[30800,0.555418],[31000,0.554971],[31200,0.5870175],[31400,0.5696996],[31600,0.5899999],[31800,0.4784614],[32000,0.4467701],[32200,0.5489067],[32400,0.4180555],[32600,0.4943715],[32800,0.3500218],[33000,0.5220158],[33200,0.7129772],[33400,0.6133222],[33600,0.6373702],[33800,0.3861344],[34000,0.4624813],[34200,0.624229],[34400,0.5328289],[34600,0.5793226],[34800,0.6624998],[35000,0.7224445],[35200,0.6935153],[35400,0.6977948],[35600,0.7253741],[35800,0.6779621],[36000,0.6958161],[36200,0.7117319],[36400,0.636931],[36600,0.4427501],[36800,0.2657609],[37000,0.0131654],[37200,0.1094896],[37400,0.486036],[37600,0.0014336],[37800,0.0796274],[38000,0.0179601],[38200,0.0042867],[38400,0.0099389],[38600,0.0038806],[38800,0.5170046],[39000,0.2837759],[39200,0.4422762],[39400,0.3093342],[39600,0.4200807],[39800,0.5637923],[40000,0.6010741],[40200,0.5662238],[40400,0.5648735],[40600,0.4975785],[40800,0.4872424],[41000,0.4907835],[41200,0.4590465],[41207,0.4431754],[41400,0.4721739],[41600,0.3710882],[41800,0.1667897],[42000,0.3315341],[42200,0.2001259],[42400,0.1499045],[42600,0.5037552],[42800,0.4603355],[43000,0.3782498],[43200,0.3256925],[43400,0.2390431],[43600,0.2759313],[43800,0.3133495],[44000,0.2997648],[44200,0.3398795],[44400,0.2460228],[44600,0.5000212],[44800,0.6366404],[45000,0.6393027],[45200,0.1116464],[45400,0.3741162],[45600,0.706587],[45800,0.584148],[46000,0.5501472],[46200,0.667239],[46400,0.1898125],[46600,0.266948],[46800,0.1696104],[47000,0.0794676],[47200,0.101412],[47400,0.1002982],[47600,0.3381503],[47800,0.3275416],[48000,0.2758091],[48200,0.4946249],[48400,0.5589315],[48600,0.5161523],[48800,0.5026414],[49000,0.5546278],[49200,0.5174065],[49204,0.4868903],[49400,0.3217759],[49600,0.0253592],[49800,0.0097874],[50000,0.0334643],[50200,0.0178067],[50400,0.0109991],[50600,0.0253768],[50800,0.0236732],[51000,0.0710281],[51200,0.2301515],[51400,0.3515556],[51600,0.1306203],[51800,0.7283286],[52000,0.7098027],[52200,0.6589447],[52400,0.4606725],[52600,0.5118782],[52800,0.4622787],[53000,0.5418802],[53200,0.5583574],[53400,0.3703667],[53600,0.4782406],[53800,0.4539316],[54000,0.372425],[54200,0.5418341],[54400,0.5744349],[54600,0.4637386],[54800,0.5630968],[55000,0.5345337],[55200,0.4707286],[55400,0.391335],[55600,0.4604818],[55800,0.4592558],[56000,0.3606658],[56200,0.5338643],[56400,0.510155],[56600,0.3217814],[56800,0.3552472],[57000,0.2637109],[57200,0.1281343],[57400,0.1221866],[57600,0.2113577],[57800,0.0507282],[58000,0.1939877],[58200,0.0819852],[58400,0.1275835],[58424,0.1313385],[58600,0.1331445],[58800,0.220545],[59000,0.5875832],[59200,0.3295878],[59400,0.093304],[59600,0.1009673],[59800,0.1778859],[60000,0.118261],[60200,0.103369],[60400,0.086168],[60600,0.083756],[60790,0.116683],[60800,0.1476346],[61000,0.0918908],[61200,0.4533132],[61400,0.3007113],[61600,0.2629389],[61800,0.2846813],[62000,0.1415663],[62200,0.1732276],[62400,0.1774565],[62600,0.1380634],[62800,0.2097167],[63000,0.2861883],[63200,0.1861659],[63400,0.2296887],[63600,0.2964204],[63800,0.2537564],[64000,0.2389024],[64200,0.2738895],[64400,0.4202252],[64600,0.4693593],[64800,0.4905549],[65000,0.4653988],[65200,0.47296],[65400,0.4734408],[65600,0.4545479],[65800,0.4853901],[66000,0.4644753],[66200,0.3617801],[66400,0.356658],[66600,0.3711919],[66800,0.5223473],[67000,0.573813],[67200,0.6685406],[67400,0.4387321],[67600,0.566889],[67800,0.645729],[68000,0.7468931],[68200,0.6871263],[68400,0.7493525],[68600,0.6799401],[68800,0.7317923],[69000,0.7553384],[69200,0.5604409],[69400,0.5137803],[69600,0.2834725],[69800,0.664518],[70000,0.7915619],[70200,0.7552063],[70400,0.6586502],[70600,0.5451615],[70745,0.2243098],[70800,0.4547079],[71000,0.3525934],[71200,0.4930379],[71400,0.631331],[71600,0.5660881],[71800,0.7501211],[72000,0.7940577],[72200,0.8330126],[72400,0.5359525],[72600,0.6586499],[72800,0.534777],[73000,0.7834398],[73200,0.5471467],[73400,0.4078937],[73600,0.6531469],[73640,0.4602328],[73800,0.520313],[74000,0.1089818],[74200,0.1885993],[74400,0.2882221],[74600,0.6691766],[74800,0.0304018],[75000,0.4338426],[75200,0.8313388],[75400,0.938948],[75600,0.8978631],[75800,0.8899716],[76000,0.9294558],[76200,0.9009863],[76400,0.8858681],[76600,0.0901731],[76800,0.0410747],[77000,0.0471026],[77200,0.0636667],[77400,0.0815918],[77600,0.0735931],[77800,0.075747],[78000,0.0826605],[78200,0.1129924],[78400,0.0933691],[78600,0.1457288],[78800,0.1415351],[79000,0.1051643],[79200,0.1050497],[79400,0.1546547],[79600,0.1778675],[79800,0.1380012],[80000,0.3347102],[80200,0.2533569],[80400,0.1688614],[80600,0.3343005],[80800,0.3199149],[81000,0.1614945],[81200,0.388504],[81400,0.2956009],[81600,0.2567887],[81800,0.5950425],[82000,0.5346338],[82200,0.4859253],[82400,0.6606372],[82600,0.3853028],[82800,0.3679242],[83000,0.6817358],[83200,0.6656507],[83400,0.5957633],[83600,0.7498082],[83800,0.5478322],[84000,0.4524576],[84200,0.2321031],[84400,0.5511752],[84600,0.738035],[84800,0.6571485],[85000,0.6999648],[85200,0.884593],[85400,0.9067773],[85600,0.8880939],[85800,0.8838481],[86000,0.8745351],[86200,0.8656603],[86400,0.8466536],[86600,0.8453675],[86800,0.8355916],[87000,0.8363196],[87200,0.8156372],[87400,0.8131308],[87600,0.7838234],[87800,0.8297766],[88000,0.8107956],[88200,0.8370793],[88400,0.8176346],[88600,0.7243595],[88800,0.7525322],[89000,0.8447495],[89200,0.8017043],[89400,0.8003237],[89600,0.8240905],[89800,0.7929441],[90000,0.8019428],[90200,0.7769001],[90400,0.7916334],[90600,0.8018153],[90800,0.7805314],[91000,0.7812123],[91200,0.798803],[91400,0.7758368],[91600,0.803909],[91800,0.8192173],[92000,0.8008789],[92200,0.798052],[92400,0.7407874],[92600,0.7362739],[92800,0.7478514],[93000,0.7203355],[93200,0.6322921],[93400,0.6455983],[93600,0.6625623],[93756,0.6209732]],"checkpoints":[[13540,0.6023414],[19620,0.3794628],[27520,0.5865507],[41207,0.4431754],[49204,0.4868903],[58424,0.1313385],[60790,0.116683],[70745,0.2243098],[73640,0.4602328]]},{"call_id":"e304f740-85d4-427e-9fd6-c5474e9cd737","audio_path":"韩泰机器人抢话/音频/e304f740-85d4-427e-9fd6-c5474e9cd737.mp3","audio_sha256":"44672603d0cf9feac41275e99d59baa4cafbdcdbb172da23de52aa0a2a4961d2","duration_ms":71616.0,"points":[[200,0.004753],[400,0.0001786],[600,0.000116],[800,9.2e-05],[1000,0.000123],[1200,0.0003577],[1400,0.0006757],[1600,0.0003926],[1800,0.0014382],[2000,0.0010238],[2200,0.0030435],[2400,0.0097796],[2600,0.0056857],[2800,0.0076334],[3000,0.0267954],[3200,0.0527028],[3400,0.0917502],[3600,0.0916174],[3800,0.1312089],[4000,0.0802719],[4200,0.1759669],[4400,0.2072446],[4600,0.4481945],[4800,0.3734107],[5000,0.4040845],[5200,0.1954383],[5400,0.3268644],[5600,0.2704424],[5800,0.1974217],[6000,0.4933382],[6200,0.6608315],[6400,0.6559463],[6600,0.7142494],[6800,0.7306619],[7000,0.7052568],[7200,0.6898285],[7400,0.6966477],[7600,0.6530947],[7800,0.7191516],[8000,0.7144901],[8200,0.6718232],[8400,0.7244998],[8600,0.7462701],[8800,0.6506583],[9000,0.7220759],[9200,0.7150288],[9400,0.5420507],[9600,0.4296762],[9800,0.4158366],[10000,0.3684122],[10200,0.3485243],[10400,0.4087241],[10600,0.3673123],[10800,0.3095804],[11000,0.3802717],[11200,0.3468016],[11400,0.2647247],[11531,0.440568],[11600,0.3700294],[11800,0.3979062],[12000,0.359524],[12200,0.3827973],[12400,0.4009311],[12600,0.3654854],[12800,0.3925247],[13000,0.4105897],[13200,0.3687349],[13400,0.3818548],[13600,0.4055956],[13800,0.4011725],[14000,0.3897497],[14200,0.432195],[14400,0.38501],[14600,0.3801234],[14800,0.4255335],[15000,0.3878449],[15200,0.3821815],[15400,0.4126178],[15600,0.4785971],[15800,0.5368229],[16000,0.5370672],[16200,0.4161776],[16400,0.4978791],[16600,0.5601779],[16800,0.6188283],[17000,0.7763085],[17200,0.7083906],[17400,0.5468601],[17600,0.6391349],[17800,0.6888672],[18000,0.6818356],[18200,0.6459909],[18400,0.6369576],[18600,0.5881386],[18800,0.6381499],[18842,0.6414245],[19000,0.6190853],[19200,0.6445105],[19400,0.6545848],[19600,0.5703664],[19800,0.5598907],[20000,0.6132383],[20200,0.6508111],[20400,0.6158949],[20600,0.5982132],[20800,0.6751799],[21000,0.5847156],[21200,0.5977521],[21400,0.6558088],[21600,0.5643526],[21800,0.6408479],[22000,0.64664],[22200,0.5792835],[22400,0.6642893],[22600,0.5219997],[22800,0.5427508],[23000,0.6578326],[23200,0.6465968],[23400,0.6556574],[23600,0.7176658],[23800,0.7487611],[24000,0.6732653],[24200,0.7403263],[24400,0.6015012],[24600,0.7408093],[24800,0.7311112],[25000,0.6926885],[25200,0.6230818],[25400,0.6529557],[25600,0.6580752],[25800,0.5973973],[26000,0.669825],[26200,0.6829658],[26400,0.5112261],[26600,0.6839135],[26800,0.7062469],[27000,0.4510189],[27200,0.4618778],[27400,0.4441687],[27600,0.4253154],[27800,0.4032543],[28000,0.3199299],[28200,0.3636329],[28400,0.3424899],[28600,0.4193632],[28800,0.4602099],[29000,0.4813218],[29200,0.4410431],[29400,0.6173557],[29600,0.5731286],[29619,0.5816889],[29800,0.5782555],[30000,0.5733962],[30200,0.5721722],[30400,0.5908256],[30600,0.5725082],[30800,0.5539556],[31000,0.5852517],[31200,0.576983],[31400,0.5643678],[31600,0.5665714],[31800,0.5373165],[32000,0.5671112],[32200,0.5669677],[32400,0.5880516],[32600,0.5741118],[32800,0.5767856],[33000,0.6052268],[33200,0.5667377],[33400,0.5953456],[33600,0.5771516],[33800,0.5745811],[34000,0.5814051],[34200,0.5490527],[34400,0.5363445],[34600,0.5751392],[34800,0.7287366],[35000,0.5406349],[35200,0.6503901],[35400,0.7071934],[35600,0.709115],[35800,0.6772892],[36000,0.7123888],[36200,0.6802213],[36400,0.6891795],[36600,0.686565],[36800,0.6485646],[37000,0.6874877],[37200,0.6120256],[37400,0.5626533],[37600,0.565421],[37800,0.4260548],[38000,0.2603808],[38200,0.5257229],[38400,0.4547919],[38600,0.2625633],[38800,0.6962176],[39000,0.7288705],[39200,0.6735711],[39400,0.5840902],[39600,0.4970677],[39800,0.4230889],[40000,0.4161269],[40200,0.4179725],[40400,0.3523389],[40600,0.344551],[40701,0.3338589],[40800,0.3756331],[41000,0.360045],[41200,0.5258051],[41400,0.6077927],[41600,0.5085508],[41800,0.4630772],[42000,0.401947],[42200,0.4215807],[42400,0.4073714],[42600,0.6569062],[42800,0.5766786],[43000,0.585712],[43200,0.4590755],[43400,0.5641067],[43600,0.6106145],[43800,0.5341908],[44000,0.5691267],[44200,0.624542],[44400,0.5490678],[44600,0.5779821],[44800,0.5773934],[45000,0.5484793],[45200,0.5034453],[45400,0.5789521],[45600,0.2283787],[45800,0.1030548],[46000,0.048477],[46200,0.0589048],[46400,0.0443519],[46600,0.1571458],[46800,0.2609851],[47000,0.1446848],[47200,0.0854756],[47400,0.064489],[47600,0.0398348],[47800,0.0271276],[48000,0.0199553],[48200,0.014625],[48400,0.0184573],[48600,0.0180404],[48800,0.0185093],[49000,0.1310552],[49200,0.0482548],[49400,0.0416824],[49600,0.182357],[49800,0.1711082],[50000,0.0942452],[50200,0.1453353],[50400,0.3579588],[50600,0.2459217],[50800,0.3791119],[51000,0.3914801],[51200,0.3191831],[51400,0.0541241],[51600,0.0659895],[51800,0.0855506],[52000,0.1024011],[52200,0.2835987],[52400,0.3455918],[52600,0.6326526],[52800,0.9293904],[53000,0.9235835],[53200,0.9129729],[53400,0.9171471],[53600,0.8662748],[53800,0.8515213],[54000,0.7898658],[54200,0.7788243],[54400,0.8454551],[54600,0.8655245],[54800,0.861423],[55000,0.9182124],[55200,0.8738413],[55400,0.8639269],[55600,0.7594701],[55800,0.7983314],[56000,0.8449616],[56200,0.8081206],[56400,0.8654269],[56600,0.8555709],[56800,0.8512719],[57000,0.8133761],[57200,0.7648259],[57400,0.8132641],[57600,0.8221902],[57800,0.7968093],[58000,0.7793968],[58200,0.7642987],[58400,0.6487506],[58600,0.6067299],[58800,0.6316165],[59000,0.4878617],[59200,0.513251],[59400,0.48344],[59600,0.4260272],[59800,0.6213025],[60000,0.6433926],[60200,0.5660325],[60400,0.493851],[60600,0.547216],[60800,0.7631159],[61000,0.7540849],[61200,0.6183639],[61400,0.5746336],[61600,0.5191353],[61800,0.5409518],[62000,0.5270697],[62200,0.4287388],[62400,0.4385651],[62600,0.468516],[62800,0.4657816],[62828,0.4587579],[63000,0.4489577],[63200,0.4637088],[63400,0.4698256],[63600,0.1691013],[63800,0.1065276],[64000,0.0556611],[64200,0.1103662],[64400,0.1651677],[64600,0.0149086],[64800,0.4209408],[65000,0.2325432],[65200,0.0140511],[65400,0.4189366],[65600,0.0237614],[65800,0.0083503],[65819,0.0830709],[66000,0.1154701],[66200,0.0152244],[66400,0.3962308],[66600,0.3543617],[66800,0.3549109],[67000,0.2270679],[67200,0.0922696],[67400,0.1713724],[67600,0.0472109],[67800,0.0135836],[68000,0.0628394],[68200,0.3484796],[68400,0.6828445],[68600,0.6191581],[68800,0.6869828],[69000,0.5055178],[69200,0.5431103],[69400,0.5850664],[69600,0.3950713],[69800,0.4331191],[70000,0.527041],[70200,0.3958546],[70400,0.4069633],[70600,0.4845959],[70800,0.3773468],[71000,0.3501482],[71200,0.4723623],[71400,0.5899727],[71600,0.4163496],[71616,0.4838689]],"checkpoints":[[11531,0.440568],[18842,0.6414245],[29619,0.5816889],[40701,0.3338589],[54600,0.8655245],[62828,0.4587579],[65819,0.0830709]]}]} diff --git a/experiments/turnsense-1.0/results/smoke.log b/experiments/turnsense-1.0/results/smoke.log new file mode 100644 index 0000000..d51eb57 --- /dev/null +++ b/experiments/turnsense-1.0/results/smoke.log @@ -0,0 +1,2 @@ +WITNESS CPU seed=42 [2.4581515390309505e-05, 7.737393025308847e-05, 0.9998980760574341] repeat identical +{"load_ms": 576.1605408042669, "provenance": {"machine": "macOS-26.4.1-arm64-arm-64bit", "hardware": "Apple M4 Mac mini CPU / 16 GB", "python": "3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]", "dependencies": {"numpy": "2.2.6", "onnxruntime": "1.24.4", "librosa": "0.11.0", "kaldi-native-fbank": "1.22.3", "soundfile": "0.13.1"}, "providers": ["CPUExecutionProvider"], "intra_op_threads": 1, "inter_op_threads": 1, "model_manifest": {"repo": "brgroup/TurnSense", "revision": "341dd68c9df87d74d35b9cee63a1dcf0fff24966", "version": "TurnSense1.0 FP32", "code_repo": "Bairong-Xdynamics/TurnSense", "code_revision": "c6d83e5b0d1355125b05eaf1b4b5c6c1acabb338", "files": {"model_fp32.onnx": "82256247dd38f0d9f2f213beec7ede1507347f84422fa48f29d565b613d89976", "am.mvn": "29b3c740a2c0cfc6b308126d31d7f265fa2be74f3bb095cd2f143ea970896ae5"}, "verified_against": "Hugging Face fixed revision LFS SHA256 / Git blob SHA1"}, "script_sha256": "23215a6db3c39f6819761adf1e6cd46a8f7c0c7767d1a3640bc928ecd548b2fb", "annotation_sha256": "780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e", "frontend_sha256": "22808c254ea2150e290e6bdcf115322a723b67fc4e53b1ef02b8f3f42697187d", "official_infer_sha256": "40295fb42a36ae4ecca30093d6bc37acbca9c75304b1a722dba73fd3b30498df"}} diff --git a/experiments/turnsense-1.0/results/summary.json b/experiments/turnsense-1.0/results/summary.json new file mode 100644 index 0000000..0f49dd4 --- /dev/null +++ b/experiments/turnsense-1.0/results/summary.json @@ -0,0 +1,76 @@ +{ + "model": "TurnSense 1.0 FP32", + "native_argmax": { + "n": 44, + "tn": 17, + "fp": 5, + "fn": 9, + "tp": 13, + "accuracy": 0.6818181818181818, + "false_reply_rate": 0.22727272727272727, + "false_hold_rate": 0.4090909090909091 + }, + "threshold_05": { + "n": 44, + "tn": 17, + "fp": 5, + "fn": 9, + "tp": 13, + "accuracy": 0.6818181818181818, + "false_reply_rate": 0.22727272727272727, + "false_hold_rate": 0.4090909090909091 + }, + "class_counts": { + "complete": 18, + "incomplete": 26 + }, + "load_ms": 657.7007500454783, + "method": "TurnSense1.0 FP32, official code/frontend/CMVN and 3-class postprocessing. CPU one intra/inter-op thread. User channel 0 int16/32768, crop received prefix BEFORE librosa resample to 16kHz, last 8s, no future ASR/audio or silence/timeout gates. Score=P(complete), native argmax complete=>1 else0; separately report threshold0.5. Full-prefix resampling is offline causal-window evaluation, not an incremental frontend benchmark.", + "provenance": { + "machine": "macOS-26.4.1-arm64-arm-64bit", + "hardware": "Apple M4 Mac mini CPU / 16 GB", + "python": "3.11.15 (main, Mar 25 2026, 02:58:47) [Clang 22.1.1 ]", + "dependencies": { + "numpy": "2.2.6", + "onnxruntime": "1.24.4", + "librosa": "0.11.0", + "kaldi-native-fbank": "1.22.3", + "soundfile": "0.13.1" + }, + "providers": [ + "CPUExecutionProvider" + ], + "intra_op_threads": 1, + "inter_op_threads": 1, + "model_manifest": { + "repo": "brgroup/TurnSense", + "revision": "341dd68c9df87d74d35b9cee63a1dcf0fff24966", + "version": "TurnSense1.0 FP32", + "code_repo": "Bairong-Xdynamics/TurnSense", + "code_revision": "c6d83e5b0d1355125b05eaf1b4b5c6c1acabb338", + "files": { + "model_fp32.onnx": "82256247dd38f0d9f2f213beec7ede1507347f84422fa48f29d565b613d89976", + "am.mvn": "29b3c740a2c0cfc6b308126d31d7f265fa2be74f3bb095cd2f143ea970896ae5" + }, + "verified_against": "Hugging Face fixed revision LFS SHA256 / Git blob SHA1" + }, + "script_sha256": "23215a6db3c39f6819761adf1e6cd46a8f7c0c7767d1a3640bc928ecd548b2fb", + "annotation_sha256": "780e50f976daf039ab976ea155bdb5d1ca5fffc792f9db7adf8063ec3048ff8e", + "frontend_sha256": "22808c254ea2150e290e6bdcf115322a723b67fc4e53b1ef02b8f3f42697187d", + "official_infer_sha256": "40295fb42a36ae4ecca30093d6bc37acbca9c75304b1a722dba73fd3b30498df" + }, + "latency_ms": { + "preparation_ms": { + "p50": 1.7886869609355927, + "p95": 3.0542627442628145 + }, + "frontend_ms": { + "p50": 4.848978947848082, + "p95": 5.63460667617619 + }, + "inference_ms": { + "p50": 31.06177132576704, + "p95": 35.107012651860714 + } + } +} diff --git a/experiments/turnsense-1.0/results/评估说明.md b/experiments/turnsense-1.0/results/评估说明.md new file mode 100644 index 0000000..c6f2ce2 --- /dev/null +++ b/experiments/turnsense-1.0/results/评估说明.md @@ -0,0 +1,36 @@ +# TurnSense 1.0 FP32 韩泰评估 + +本机 Apple M4 Mac mini、CPU;六通录音,当前 44 个判断点,正负各 22。只使用判断时已收到的用户左声道音频、末尾最多 8 秒,使用官方特征前端与 CMVN,未输入标注转写。 + +| 判断规则 | 正确 / 总数 | 准确率 | 误接话(应等待却接话) | 漏接话(应接话却等待) | +| --- | --- | --- | --- | --- | +| 原生 argmax:complete=>1,其余=>0 | 30 / 44 | 68.18% | 5 / 22(22.73%) | 9 / 22(40.91%) | +| P(complete) ≥ 0.5 | 30 / 44 | 68.18% | 5 / 22(22.73%) | 9 / 22(40.91%) | + +本批两种规则得到相同二分类结果,但它们在一般情况下并不等价。原生类别:complete 18 点、incomplete 26 点、invalid 0 点。invalid 输出仍保留,不能据此评估噪声识别能力,因为本批没有独立 invalid 真值。 + +## 计算耗时 + +| 阶段 | p50 | p95 | +| --- | --- | --- | +| 裁取/前缀重采样 | 1.79 ms | 3.05 ms | +| 官方特征前端 | 4.85 ms | 5.63 ms | +| ONNX 模型推理 | 31.06 ms | 35.11 ms | + +模型构造 657.70 ms,不含 Python 启动/import,不能称为完整冷启动。CPU intra/inter-op 各 1 线程,已预热;前缀重采样和特征重算不等于在线增量开销。阶段分位数不应相加成总耗时分位数。 + +## 解读与比较边界 + +同一当前标注哈希的 LiveKit v1-mini 在 0.5 下为 29/44,误接话 11、漏接话 4;TurnSense 在 0.5 下为 30/44,误接话 5、漏接话 9。可见这批点上更倾向等待:少误接话,但更多应接话时未接话。样本小、上下文长度不同(8 秒 vs 1.2 秒),不能把这 1 点正确率差异当成稳定优势,更不能宣布已解决抢话。 + +当前标注第二通一个点已由旧 VAP / Smart Turn 快照的 48348 ms 改为 48536 ms,不能直接用其旧 44 点汇总严格排名。原曲线空心点保留各自评分时刻。 + +## 可核验性 + +- 全部判断点重复模型推理结果完全一致。 +- 将判断点之后的音频置零,准备出的模型输入不变。 +- 权重 SHA256 与固定 Hugging Face 修订的 LFS SHA256 一致;CMVN 用 Git blob SHA1 核对,并另记 SHA256。 +- 模型、CMVN、脚本、前端、标注、录音哈希与环境版本均写入结果,独立环境文档已由另一代理按说明复现 smoke。 +- 连续曲线为每 200 ms 实际推理及每个判断点的精确分数,共 2573 个采样点,非插值生成。 + +44 个手选判断点仅为探索性评估;点级误接话率不等于整段对话抢话率,用户声道可能有机器人回声。不加 VAD 门槛、静音延迟或超时策略。模型为 1.0 FP32,本次没有测试 INT8 或 1.1。 diff --git a/experiments/turnsense-1.0/run_experiment.py b/experiments/turnsense-1.0/run_experiment.py new file mode 100644 index 0000000..00530d1 --- /dev/null +++ b/experiments/turnsense-1.0/run_experiment.py @@ -0,0 +1,105 @@ +"""TurnSense 1.0 FP32: real causal-prefix inference with the official frontend.""" +import os +for k in ('OMP_NUM_THREADS','MKL_NUM_THREADS','OPENBLAS_NUM_THREADS'): os.environ[k]='1' +os.environ['NUMBA_CACHE_DIR']=str(__import__('pathlib').Path(__file__).resolve().parent/'cache/numba') +import argparse,csv,hashlib,json,platform,sys,time +import importlib.metadata as md +from pathlib import Path +from collections import Counter +import numpy as np +import soundfile as sf +import librosa +import onnxruntime as ort +HERE=Path(__file__).resolve().parent +ROOT=HERE.parents[1] +OUT=HERE/'results' +LABEL_PATH=ROOT/'labels/EOT标注/工作数据/eot_labels.csv' +sys.path.insert(0,str(HERE/'vendor')) +from frontend import AudioFrontend +from infer import DEFAULT_FRONTEND_CONF,process_predictions,LABELS + +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() +def prepare(user,sr,ms): + end=min(len(user),ms*sr//1000) + if end<=0: raise ValueError('No audio available') + prefix=user[:end].astype(np.float32)/32768. + if sr!=16000: prefix=librosa.resample(prefix,orig_sr=sr,target_sr=16000) + return np.ascontiguousarray(prefix[-128000:]) +class Model: + def __init__(self): + manifest=json.loads((HERE/'model-manifest.json').read_text()) + for name,digest in manifest['files'].items(): + if sha(HERE/'models'/name)!=digest: raise ValueError('Weight/CMVN checksum mismatch') + opts=ort.SessionOptions();opts.intra_op_num_threads=1;opts.inter_op_num_threads=1 + opts.graph_optimization_level=ort.GraphOptimizationLevel.ORT_ENABLE_ALL + self.session=ort.InferenceSession(str(HERE/'models/model_fp32.onnx'),sess_options=opts,providers=['CPUExecutionProvider']) + self.frontend=AudioFrontend(**{**DEFAULT_FRONTEND_CONF,'cmvn_file':str(HERE/'models/am.mvn')}) + assert LABELS==['complete','incomplete','invalid'] + def predict(self,audio): + t=time.perf_counter();feats,n=self.frontend.extract_features(audio) + inputs={'feats':np.asarray(feats,dtype=np.float32)[None,...],'feat_lengths':np.asarray([int(n)],dtype=np.int64)} + frontend_ms=(time.perf_counter()-t)*1000 + t=time.perf_counter();raw=self.session.run(None,inputs)[0];inference_ms=(time.perf_counter()-t)*1000 + probs,pred=process_predictions(raw) + if probs.shape!=(1,3) or not np.isfinite(probs).all() or not np.isclose(probs.sum(),1): raise ValueError('Invalid 3-class output') + return probs[0],int(pred[0]),frontend_ms,inference_ms + +def metrics(rows,rule): + c=Counter((int(r['can_reply_now']),int(r[rule])) for r in rows if r['can_reply_now'] in ('0','1')) + tn,fp,fn,tp=c[0,0],c[0,1],c[1,0],c[1,1];n=tn+fp+fn+tp + return dict(n=n,tn=tn,fp=fp,fn=fn,tp=tp,accuracy=(tn+tp)/n,false_reply_rate=fp/(tn+fp),false_hold_rate=fn/(tp+fn)) +def prov(): + return dict(machine=platform.platform(),hardware='Apple M4 Mac mini CPU / 16 GB',python=sys.version, + dependencies={p:md.version(p) for p in ['numpy','onnxruntime','librosa','kaldi-native-fbank','soundfile']}, + providers=['CPUExecutionProvider'],intra_op_threads=1,inter_op_threads=1, + model_manifest=json.loads((HERE/'model-manifest.json').read_text()),script_sha256=sha(Path(__file__)), + annotation_sha256=sha(LABEL_PATH),frontend_sha256=sha(HERE/'vendor/frontend/audio_frontend.py'), + official_infer_sha256=sha(HERE/'vendor/infer.py')) +def main(mode): + OUT.mkdir(exist_ok=True) + t=time.perf_counter();model=Model();load_ms=(time.perf_counter()-t)*1000 + rng=np.random.default_rng(42);test=rng.normal(0,.005,16000).astype(np.float32) + a=model.predict(test)[0];b=model.predict(test)[0];assert np.array_equal(a,b) + print('WITNESS CPU seed=42',a.tolist(),'repeat identical',flush=True) + if mode=='smoke': + print(json.dumps(dict(load_ms=load_ms,provenance=prov()),ensure_ascii=False));return + with LABEL_PATH.open(encoding='utf-8-sig',newline='') as f: labels=list(csv.DictReader(f)) + rows,calls=[],[] + for call in sorted({r['call_id'] for r in labels}): + path=ROOT/'data/韩泰机器人抢话/音频'/f'{call}.mp3' + pcm,sr=sf.read(path,dtype='int16',always_2d=True);user=pcm[:,0];duration=round(len(user)*1000/sr,3) + exact={int(r['decision_ms']):r for r in labels if r['call_id']==call} + if any(t>duration for t in exact): raise ValueError('Label beyond recording') + times=sorted(set(range(200,int(duration)+1,200))|set(exact)|{int(duration)}) if mode=='all' else sorted(exact) + points=[];checkpoints=[] + for i,ms in enumerate(times): + t=time.perf_counter();audio=prepare(user,sr,ms);prep=(time.perf_counter()-t)*1000 + probs,pred,front,inf=model.predict(audio);points.append([ms,round(float(probs[0]),7)]) + if ms in exact: + assert np.array_equal(probs,model.predict(audio)[0]) + modified=user.copy();modified[ms*sr//1000:]=0 + assert np.array_equal(audio,prepare(modified,sr,ms)) + checkpoints.append([ms,round(float(probs[0]),7)]) + rows.append(dict(call_id=call,decision_ms=ms,can_reply_now=exact[ms]['can_reply_now'], + p_complete=float(probs[0]),p_incomplete=float(probs[1]),p_invalid=float(probs[2]), + native_class=LABELS[pred],native_can_reply=int(pred==0),prediction_05=int(probs[0]>=.5), + input_samples=len(audio),available_end_ms=(ms*sr//1000)*1000/sr, + preparation_ms=prep,frontend_ms=front,inference_ms=inf)) + if (i+1)%100==0: print(f'{call[:8]}: {i+1}/{len(times)} scores',flush=True) + calls.append(dict(call_id=call,audio_path=f'韩泰机器人抢话/音频/{call}.mp3',audio_sha256=sha(path), + duration_ms=duration,points=points,checkpoints=checkpoints)) + print(f'{call[:8]} DONE: {len(points)} scores, {len(checkpoints)} checkpoints; repeat/future-suffix checks passed',flush=True) + with (OUT/'predictions.csv').open('w',encoding='utf-8',newline='') as f: + w=csv.DictWriter(f,fieldnames=list(rows[0]));w.writeheader();w.writerows(rows) + method='TurnSense1.0 FP32, official code/frontend/CMVN and 3-class postprocessing. CPU one intra/inter-op thread. User channel 0 int16/32768, crop received prefix BEFORE librosa resample to 16kHz, last 8s, no future ASR/audio or silence/timeout gates. Score=P(complete), native argmax complete=>1 else0; separately report threshold0.5. Full-prefix resampling is offline causal-window evaluation, not an incremental frontend benchmark.' + summary=dict(model='TurnSense 1.0 FP32',native_argmax=metrics(rows,'native_can_reply'),threshold_05=metrics(rows,'prediction_05'), + class_counts=dict(Counter(r['native_class'] for r in rows)),load_ms=load_ms,method=method,provenance=prov(), + latency_ms={key:{name:float(np.percentile([r[key] for r in rows],q)) for name,q in [('p50',50),('p95',95)]} for key in ['preparation_ms','frontend_ms','inference_ms']}) + (OUT/'summary.json').write_text(json.dumps(summary,ensure_ascii=False,indent=2)+'\n') + if mode=='all': + output=dict(schema_version=1,model='turnsense',name='TurnSense 1.0',score='P(complete), 3-class output',sample_interval_ms=200, + method=method,provenance=prov(),calls=calls) + (OUT/'score-timeline.json').write_text(json.dumps(output,ensure_ascii=False,separators=(',',':'))+'\n') + print(json.dumps({k:summary[k] for k in ['native_argmax','threshold_05','class_counts']}),flush=True) +if __name__=='__main__': + p=argparse.ArgumentParser();p.add_argument('mode',choices=['smoke','evaluate','all']);main(p.parse_args().mode) diff --git a/experiments/turnsense-1.0/setup_assets.py b/experiments/turnsense-1.0/setup_assets.py new file mode 100644 index 0000000..b271bbd --- /dev/null +++ b/experiments/turnsense-1.0/setup_assets.py @@ -0,0 +1,28 @@ +"""Restore fixed official assets; no speech or labels are transmitted.""" +import hashlib,json,tarfile,urllib.request,io +from pathlib import Path +HERE=Path(__file__).resolve().parent +m=json.loads((HERE/'model-manifest.json').read_text()) + +def download(url): + with urllib.request.urlopen(url,timeout=120) as r: return r.read() + +def main(): + vendor=HERE/'vendor';vendor.mkdir(exist_ok=True) + revision=m['code_revision'];archive=download(f'https://codeload.github.com/{m["code_repo"]}/tar.gz/{revision}') + # Extract only the official inference code, frontend sources and license. + with tarfile.open(fileobj=io.BytesIO(archive),mode='r:gz') as tar: + for member in tar.getmembers(): + rel=Path(*Path(member.name).parts[1:]) + if not member.isfile() or rel.is_absolute() or '..' in rel.parts: continue + if str(rel) not in ('infer.py','LICENSE') and not (str(rel).startswith('frontend/') and rel.suffix=='.py'): continue + target=vendor/rel;target.parent.mkdir(parents=True,exist_ok=True);target.write_bytes(tar.extractfile(member).read()) + models=HERE/'models';models.mkdir(exist_ok=True) + for name,sha in m['files'].items(): + target=models/name + if target.exists() and hashlib.sha256(target.read_bytes()).hexdigest()==sha: continue + data=download(f'https://huggingface.co/{m["repo"]}/resolve/{m["revision"]}/TurnSense1.0/{name}') + if hashlib.sha256(data).hexdigest()!=sha: raise ValueError('Checksum mismatch') + target.write_bytes(data) + print('Official code and weight checksums restored') +if __name__=='__main__': main() diff --git a/experiments/turnsense-1.0/uv.lock b/experiments/turnsense-1.0/uv.lock new file mode 100644 index 0000000..cd6bce3 --- /dev/null +++ b/experiments/turnsense-1.0/uv.lock @@ -0,0 +1,498 @@ +version = 1 +revision = 3 +requires-python = "==3.11.*" + +[[package]] +name = "audioread" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/4a/874ecf9b472f998130c2b5e145dcdb9f6131e84786111489103b66772143/audioread-3.1.0.tar.gz", hash = "sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190", size = 20082, upload-time = "2025-10-26T19:44:13.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/16/fbe8e1e185a45042f7cd3a282def5bb8d95bb69ab9e9ef6a5368aa17e426/audioread-3.1.0-py3-none-any.whl", hash = "sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4", size = 23143, upload-time = "2025-10-26T19:44:12.016Z" }, +] + +[[package]] +name = "certifi" +version = "2026.10.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/1c/f41d4e74c28ab327ff3acd36053f7ea506c55872d7a90b0fa71aa3ab0c89/charset_normalizer-3.5.2.tar.gz", hash = "sha256:39de2a259fc954455c57274dc94c79d5842774e1247a016aff30bc0efed0f4ef", size = 172659, upload-time = "2026-09-30T04:39:23.398Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/67/6a0b94a7960d5e1b5eacd2fb529f3fccc47db4644f7f0a7cfdcfc3be578a/charset_normalizer-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d21b8b13c7592db2ac5e544a6d83187b995257472b0c9e8351b6d507ae37ed6", size = 370642, upload-time = "2026-09-30T04:35:06.91Z" }, + { url = "https://files.pythonhosted.org/packages/fb/94/01009e13b94041599004edf32e56e382c24e570f60f79bab8efe45cfe1eb/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d760fe2a4d7c3b226cb9026d6a842868d52a7901bd98420e1baf14e80da85cf5", size = 259280, upload-time = "2026-09-30T04:35:08.448Z" }, + { url = "https://files.pythonhosted.org/packages/66/85/3b5358f60a13210f0b67d3755c168ef758701b021e655d88d4da28554467/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9790464842f85f437dbbb54417eda1e0e6bfc52dd8d22d6fd1c994b73b2dc74", size = 245335, upload-time = "2026-09-30T04:35:10.104Z" }, + { url = "https://files.pythonhosted.org/packages/74/75/77c1c479b09ecd751d1e767b251ea5c14d4d50ff757bf404afab2692f600/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4685902cf26edf013ed7a3da0f426ebba7a00ebb9541386d835afbf002c11cab", size = 291707, upload-time = "2026-09-30T04:35:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0d/363f78cacb70f58f15f4b083961bbd9d292f335d3f5c66fc4f1cfe69cb90/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4495c5002a7b28557e7e222e77e0b661183e432b7d6d2e788101e3f240e05b8c", size = 286747, upload-time = "2026-09-30T04:35:13.022Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ed/cf505d3011ffceb12c2067a7a5d3cfe92b875d4d44bb0ff0d69375e2c184/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:211d5a3eb6af8f513b8d4ca19a8c1b7accab1b5f0d3175f9826b03c1a920dc1f", size = 269972, upload-time = "2026-09-30T04:35:14.606Z" }, + { url = "https://files.pythonhosted.org/packages/15/d8/f0a93a431d170e7ca681d4f6650fee3de934d18560e474e7267eb4b0f987/charset_normalizer-3.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef4fcbf3327382cd4c9f540babd61248208af7b93eec4de397b4d5f58a09e288", size = 269339, upload-time = "2026-09-30T04:35:16.087Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/9b2bd1c5b7af02462c9752d33994834ff972a96b4c483eefde9e594488e2/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd16aabe4a02a297c23417aa17ac6299dbd8c49f673bcd645b4929b11f5a4400", size = 261683, upload-time = "2026-09-30T04:35:17.488Z" }, + { url = "https://files.pythonhosted.org/packages/76/a5/cac540ab0fd61f3fec88ad3dbb64509e71424593d73cfdfff5ab3e4db279/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fb9e68df06293761f9fe66ade60a9bc6d0f5e42b8acf2939a9158af86ab0e5bd", size = 248143, upload-time = "2026-09-30T04:35:18.849Z" }, + { url = "https://files.pythonhosted.org/packages/71/7a/ff467301deef2089fad87f72df9e000a26a78fec7acbb18e1999371b8369/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:59f63901b0031c3136cf64704dcb21de0bbae62ce2c9529bc39d27665463de37", size = 292358, upload-time = "2026-09-30T04:35:20.326Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/22d7e785d1e210afc2e2f58600dd1799d17a35665faf84383f002826c5f8/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:304d5463e65a35d7bb0850550e0780395395f6fcf452f04db7d5ca7cecc425ac", size = 268766, upload-time = "2026-09-30T04:35:21.72Z" }, + { url = "https://files.pythonhosted.org/packages/ae/91/e8e946267f1c2d9e2bd651726e2fbd2addf02c4d36cea5069e32ca9d7bb5/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9cf9b1a857e25c4baceeb3624e92a56df3668f398c4acba74e174d81fb4d1d3a", size = 287432, upload-time = "2026-09-30T04:35:23.273Z" }, + { url = "https://files.pythonhosted.org/packages/4e/88/7561d8a88d555e7df6623abe7c0070b4baf47549b9408783a2ae0a1a6cf7/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:114e4d0c92d618409ed82a99e22b5c5e768fe995f2973f78265f4524f49d4640", size = 272470, upload-time = "2026-09-30T04:35:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/35/7e/578c702301ec036f01455f30744a08d2b42f6ab35b9b2d4bf8cae0ef2a80/charset_normalizer-3.5.2-cp311-cp311-win32.whl", hash = "sha256:2625388c6c754520c37abaf3b41eb34d1cc4a373f457898f08606c8e362b891d", size = 186688, upload-time = "2026-09-30T04:35:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/e8/fc/fdf8cf52ff21cd5bf158f20978991cf985325842f74283eb6df26c8a39d8/charset_normalizer-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:87e50a3e7cb90af586b6c5faf23e302a970415ac73bd7bd90a515a04b427ef96", size = 214932, upload-time = "2026-09-30T04:35:27.796Z" }, + { url = "https://files.pythonhosted.org/packages/97/66/3e45a506d8110b632541faf9a9470185aa9878f1ed44020f31346c1c5e5b/charset_normalizer-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:254eb48b9fa5ee9898a3c445825a1f340fe53712a098904b39b0bddba8ea3cb1", size = 202828, upload-time = "2026-09-30T04:35:29.259Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ab/176fbfd5b64939c55d652366aa5b9ef1d767af207a3aa6ebeb0d226c484d/charset_normalizer-3.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4275811936e2f06feff5e598fb42a1b7ae852da8e39605211892b56b81a34efd", size = 331815, upload-time = "2026-09-30T04:38:26.216Z" }, + { url = "https://files.pythonhosted.org/packages/7e/84/371eac6b30bdbcbf2d632a1a01809103459216fcaae61b8b8d922c1bfb8a/charset_normalizer-3.5.2-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1c50fe28bbc2ced33386f298650d91218076c05420e6cbd790b913adc41659e7", size = 253276, upload-time = "2026-09-30T04:38:28.032Z" }, + { url = "https://files.pythonhosted.org/packages/43/6f/c4fbae58febff71709c51bc7e18fdfa55341dc382704740f9f0cbf03817b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19fbd981a488e22cd04883659ca6b08f50b5974f9fd7c95655ef6a043e5893f", size = 241239, upload-time = "2026-09-30T04:38:29.732Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/458c3f42164a07d0c5210798e9e704b39e540a6793b05aba67f3a35243a9/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0fed1d06615f022ee3b13caf5e8b180cfea32bb2c5aded8a9d44277afc040f93", size = 231121, upload-time = "2026-09-30T04:38:31.462Z" }, + { url = "https://files.pythonhosted.org/packages/09/54/ab9e89367076f6331bb6c65c4bf14a5361fa5191cb6561bf534f18504e1b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:838dcc90063569a0448120554591a1d6c4a4ffe11babf048908793154ab86ade", size = 260350, upload-time = "2026-09-30T04:38:33.239Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/061431ecc688d9d76602502cb57cc01e691e682c18f1beb45f9673b5bbd2/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ce45c6627b22c47e390bc91a41c3d13032192e699fa0bea96e9671b373d69b0", size = 255430, upload-time = "2026-09-30T04:38:34.865Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1f/20c8949f0676f7ab811abdeb7f4d7f1cbc6e61ff20bef08b44edeb092bc8/charset_normalizer-3.5.2-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0774bf9bf620249fee3e0b8b9fd3065de213be30f3aa94ce2494b3b638949e26", size = 250612, upload-time = "2026-09-30T04:38:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9e/46f2fa4c431fc98c4ae76a8cb5bdca54e0341e3cfc3fcfd8e82740250818/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1db38f4c5496827c1a501846d64d14c3b80c7e6714e406cd7dc36a9899fa1011", size = 242083, upload-time = "2026-09-30T04:38:38.26Z" }, + { url = "https://files.pythonhosted.org/packages/bd/39/559be29a0c0f086e0bba6922babd38916cc5e0b58ced4de13ee01ea05508/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:304d8e4d493af723536393eee0c689eb7813f4a474c8b479dee63f1fdd98f621", size = 232738, upload-time = "2026-09-30T04:38:39.81Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6c/387b0e4f756a282831c1d9fc6aeb6c51ca4507ca202767c8de15ce9b12e2/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:9b7f416ff0978e2f2249330527f0ad6fa02f4932e6199692d3b52da2048c19e4", size = 260703, upload-time = "2026-09-30T04:38:41.346Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/1fdf015f09ef449f50d3ac4b67c90887c9c318b727daa95cc4f866e6521d/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:01077390b03f7988f11d700a2194e69b119741a86b1a638b1db88891e3eced8e", size = 247622, upload-time = "2026-09-30T04:38:42.937Z" }, + { url = "https://files.pythonhosted.org/packages/dc/3c/8e7b8a5671ad5d433669fb2a76f1a0164df2d9b1718b0206bc2a16d840cc/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:7e841fb9010836c992c9f12fcbd43a831de93a5f726fc1ccd8ca1d0268c5014c", size = 257500, upload-time = "2026-09-30T04:38:44.604Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f0/45b579df5cabc1d5d53ea1cc35e8437d3ca768c0acccc7041517cb6fbb32/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9cae88599c7219005d879f98e5ed53341e9a122af585e1091200358a3003d2a0", size = 255100, upload-time = "2026-09-30T04:38:46.289Z" }, + { url = "https://files.pythonhosted.org/packages/31/68/fdec18a343f5fb3f310588dd478b09ac4799e0b187dbade3a8cd776f03ef/charset_normalizer-3.5.2-cp37-abi3-win32.whl", hash = "sha256:01b0c0d2262a9e28e8484a278c7e1b5d650e3ac8cf2683d2967e25899f208bdf", size = 174499, upload-time = "2026-09-30T04:38:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8a/b618149cc5207943a0242068d7a27897f56a62947b5a039085f2a22029f8/charset_normalizer-3.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:9f56f72050826f63dcee7a7f55b0a77168cb3bfc553fd405e7f8f9ece75a4036", size = 200092, upload-time = "2026-09-30T04:38:49.707Z" }, + { url = "https://files.pythonhosted.org/packages/03/cf/4c66866fa9e2b1c78e3c911516d1de497a677b7ac60f1eceda74ce777ca3/charset_normalizer-3.5.2-cp37-abi3-win_arm64.whl", hash = "sha256:40ab6bffa02ae10a0581e6c198be7d2d8ca5c2a0c64e4ed3465d766df457573e", size = 294363, upload-time = "2026-09-30T04:38:51.312Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/d07d7862a62ffa6d79d68074d14823243dd235a77c45262acbf6adeb28bf/charset_normalizer-3.5.2-py3-none-any.whl", hash = "sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685", size = 68872, upload-time = "2026-09-30T04:39:21.828Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, +] + +[[package]] +name = "joblib" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/1d/537ab090f302b838943a1b56497dd53059b9a9b46a074936470173a2e207/joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03", size = 327903, upload-time = "2026-08-31T09:39:04.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/53/84099323c2ec4be98d935f63c033ac4151ee83836ca1050ede3b3aadf155/joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba", size = 306115, upload-time = "2026-08-31T09:39:02.298Z" }, +] + +[[package]] +name = "kaldi-native-fbank" +version = "1.22.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/2c/84076b352107ce12d56f28c313f1aca1be332d953dd96aec7b84976e6d53/kaldi-native-fbank-1.22.3.tar.gz", hash = "sha256:387bf87225c6b83c93ae652eeaef1b4d531994b6e398e7a77189de340674f9af", size = 71013, upload-time = "2025-10-09T02:31:21.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/d0/07ab65d7c8389f56f8c772a55f8846a81c24d973abecfc0275c2c833f63e/kaldi_native_fbank-1.22.3-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6b9ef5b6302ee45628a51a4484cb4f41006af02141508939c09ce36899fb3f41", size = 245879, upload-time = "2025-10-09T02:28:04.7Z" }, + { url = "https://files.pythonhosted.org/packages/64/2b/3132083b930fa6411f14469f36c465b7d2fba29a8a3e121d8fd6baffc8ea/kaldi_native_fbank-1.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:29452f2900e771086e9022dde17a92d191217ab3e34ca7dc361bd9be53e94fb4", size = 229180, upload-time = "2025-10-09T02:29:35.356Z" }, + { url = "https://files.pythonhosted.org/packages/e3/53/720ffbe8b30de203570f397866334eb4c6364c9214699010f2086de911ff/kaldi_native_fbank-1.22.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48e5dd8e897bf4509be2c6eeb4bbab728eaaef1f214ae0510c96219c4253d17", size = 299054, upload-time = "2025-10-09T02:28:42.011Z" }, + { url = "https://files.pythonhosted.org/packages/52/3f/beb161e4fdf6710938ccf18418c147d87ba8f102903d6c6e4eda25588e22/kaldi_native_fbank-1.22.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ce84c65779c9eed6ec02699797a4ba1859451977537a993be3ea8167a210ec3e", size = 321921, upload-time = "2025-10-09T02:31:21.646Z" }, + { url = "https://files.pythonhosted.org/packages/3b/bb/ee42418b77dbfc5ff619857b8eb372af98a88d47c8ca8b9a2d3ca2936c96/kaldi_native_fbank-1.22.3-cp311-cp311-win32.whl", hash = "sha256:516bce595eb5e5899a91dfec1142bea56a2fa232e53425e9966785aee8cd024e", size = 273018, upload-time = "2025-10-09T02:30:31.979Z" }, + { url = "https://files.pythonhosted.org/packages/40/68/da630b035cd343311168e5fe02c39fe7b192638717e3202de92ccf8ae18e/kaldi_native_fbank-1.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:bd225d0624d45b533c1780094b3c59666276a6e9f20222943441212cdf301c9e", size = 303342, upload-time = "2025-10-09T02:28:17.429Z" }, +] + +[[package]] +name = "lazy-loader" +version = "0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/8c/0f2ff2a8b7513e68871a74740c17a504b0488c679b379e6445ebb7bd78dc/lazy_loader-0.6.tar.gz", hash = "sha256:2f4b7824d6401958639008a0cae20c776b61dff619accd6890693e2de8260167", size = 18438, upload-time = "2026-09-21T21:31:32.982Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/93/4e45e37f26c820216704b36b8e67cc55c490a7abd287a78a26a2c0e21386/lazy_loader-0.6-py3-none-any.whl", hash = "sha256:77253be3391b06124a0e16105bd663b6c54470af1a9ca8e1cf026f38d58ed056", size = 8791, upload-time = "2026-09-21T21:31:31.632Z" }, +] + +[[package]] +name = "librosa" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "audioread" }, + { name = "decorator" }, + { name = "joblib" }, + { name = "lazy-loader" }, + { name = "msgpack" }, + { name = "numba" }, + { name = "numpy" }, + { name = "pooch" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "soundfile" }, + { name = "soxr" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/36/360b5aafa0238e29758729e9486c6ed92a6f37fa403b7875e06c115cdf4a/librosa-0.11.0.tar.gz", hash = "sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908", size = 327001, upload-time = "2025-03-11T15:09:54.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749, upload-time = "2025-03-11T15:09:52.982Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.50.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/c5/907cec40688a34eb489cded74d555e1ee4af8cf49d83e03dba2c2d4cfe27/llvmlite-0.50.0.tar.gz", hash = "sha256:f2a2cd6ec9ffcc1b7147dea0d7a49efebf17a2b434e0c2844fe175999d571eb4", size = 194522, upload-time = "2026-09-29T18:44:46.782Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/ae/9c41313563a860a69d5c67fb4098ce9b40a09c00b68a177407b7c10950fb/llvmlite-0.50.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:818b3d4845ac8e126e23cb500867570d0602a42a43e67b14acec31f046e03130", size = 40534276, upload-time = "2026-09-29T18:42:40.983Z" }, + { url = "https://files.pythonhosted.org/packages/f5/60/99c692a447cb6e148d4ecc30067d5f4ba8a980f1081472103ed0c79b4890/llvmlite-0.50.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0225351ad77ea30501fc5b4c09ff6868169fde50c5a576cdfda1645091157616", size = 58344485, upload-time = "2026-09-29T18:42:44.679Z" }, + { url = "https://files.pythonhosted.org/packages/59/b2/a5234f59ccf69cc90d29c62e01cacd1d60403fc5dfac77b38e019237d301/llvmlite-0.50.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6ffde00d4be8772a24e3e8b3af6bf86a79e7cf066d944ef56136b3957d707dc", size = 59696588, upload-time = "2026-09-29T18:42:48.871Z" }, + { url = "https://files.pythonhosted.org/packages/6b/15/db28c1cb84314bdc416f7dbe7688aa9565d36d76c8244a1c8fbf6adf37bf/llvmlite-0.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:ffe46ef508df226e54b5fe1f7bf11122e5297bcdbb3902cc5b670a429d56ff47", size = 41865266, upload-time = "2026-09-29T18:42:52.699Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "msgpack" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/e7/bb605a7bab2d8425a64b3fa762b39dc1bf1c7e3f11ba6fb5413d6db0ff8c/msgpack-1.2.3.tar.gz", hash = "sha256:32edb81a2b5eb7cd7c9d941b2bfbbb082fd2cd09e0e725930316af6b708db186", size = 196517, upload-time = "2026-09-29T02:33:52.276Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/95/b9c651ccb9d720b2e2c8d537954dff528ab869a03bf89598145716db823c/msgpack-1.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec90a9ae3e1169fa1171147340f0e97d941aa19fcd3b34e8339a55933ed042af", size = 90404, upload-time = "2026-09-29T02:31:44.826Z" }, + { url = "https://files.pythonhosted.org/packages/50/cd/fc9e2e367e80f1493e2ec5f610dda558b344eeede296f88976db133e8f2c/msgpack-1.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9d7e9cbb0998bbfd363fd9a09c330520d5e9cb323c05b5a1a05865d23ccf2226", size = 89683, upload-time = "2026-09-29T02:31:46.413Z" }, + { url = "https://files.pythonhosted.org/packages/19/9e/1028485c6886c1c117f777cc9b053e541eff0fedb3292dfb1da95040edb5/msgpack-1.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6707d2fa2aa1bb5424ea0b05f44ffc989b15ab41a73ff5855bff4944fec7c8ac", size = 465347, upload-time = "2026-09-29T02:31:47.934Z" }, + { url = "https://files.pythonhosted.org/packages/aa/83/800570e6a22376eb8d599920f70aead4779a63611696f567477c4e85a70f/msgpack-1.2.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:382b219de3d436de3baba0f4b0c6d4336e8f5858d0eb047918b13b69a71c6c55", size = 477820, upload-time = "2026-09-29T02:31:49.479Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ff/817e4a2052f848d3fb67726908d6e4e7c19f68ee7c19553a82ce7b0ed415/msgpack-1.2.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:186e6c602b8a9968b8e864c67d622a69279f7d1e55ae25f40e3bff7e815b2b62", size = 436656, upload-time = "2026-09-29T02:31:51.18Z" }, + { url = "https://files.pythonhosted.org/packages/3d/42/040cc55dde6a7d92057baac8d1fc9cfb9f4fd4162900e2ec16dc33917a7d/msgpack-1.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9276ba88891338f2617044429dfd080ae008c9868a25f6f1a7d004a35dc9ac0a", size = 460939, upload-time = "2026-09-29T02:31:53.026Z" }, + { url = "https://files.pythonhosted.org/packages/09/93/4dc007bdef930eed247346773bc0189b710078961d3218d5ee7ba59f322c/msgpack-1.2.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c942c21a93f36b3a69e828c8945bb72c94dc2ffe488a2086950c812f3edf046c", size = 433608, upload-time = "2026-09-29T02:31:54.981Z" }, + { url = "https://files.pythonhosted.org/packages/c0/97/a1b944046f283ec89445cb2a982c42233b5b07cc630f9be739f4f1d469a3/msgpack-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18a6ed513023001b28dcd3ba54966f6bb90a38274ba8d2640464bcab3a1b81d4", size = 477373, upload-time = "2026-09-29T02:31:56.713Z" }, + { url = "https://files.pythonhosted.org/packages/59/79/ab411d0d172743732ab2503f4c32a22dd1a7d1436a6feecbb160e4b6376a/msgpack-1.2.3-cp311-cp311-win32.whl", hash = "sha256:d0238cd05dec9ffbe0de1071df685ba63e30a36ac155285b1a094e727c38cbe9", size = 67514, upload-time = "2026-09-29T02:31:58.267Z" }, + { url = "https://files.pythonhosted.org/packages/63/8d/6f0cb2b84e484e96278455c26870196d025bb0cec312b226a663f1fa9000/msgpack-1.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:30e1522e4173230dca4d9ad896f038f73c0da6c1edd42f4dbad88ac583cf5d46", size = 75850, upload-time = "2026-09-29T02:31:59.449Z" }, + { url = "https://files.pythonhosted.org/packages/aa/25/f99e13a2c1d3f5a1dcaa5aab27f474e8c4358188bbc68ad79fecb0d1aefe/msgpack-1.2.3-cp311-cp311-win_arm64.whl", hash = "sha256:8ca67f77938ea6a3663aa9bd22b3e031f6da84d665be850abab910ee90728dfd", size = 72338, upload-time = "2026-09-29T02:32:00.885Z" }, +] + +[[package]] +name = "narwhals" +version = "2.27.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/21/f64d6b2dbea7bf3f8c38cdc786dcc6ef012ca3d173ad208c782c9a7bedf6/narwhals-2.27.1.tar.gz", hash = "sha256:aed93076a3ea42d9c32c88e4eb5ea422a21937011cbe1f480f9572a523c82094", size = 735013, upload-time = "2026-10-10T06:52:18.113Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/89/5d4c86da1130d9059681e5b6cd7645df5c10279a6a079c5c37dcb2cc6f3f/narwhals-2.27.1-py3-none-any.whl", hash = "sha256:d057df13f5852b8e157596e82eb5e955fad267425df5e420e0ee9863da483b31", size = 483211, upload-time = "2026-10-10T06:52:16.32Z" }, +] + +[[package]] +name = "numba" +version = "0.68.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/cd/e8280f9ffa30fea9fabc5341223701231fcc5d53a31f51419d42d4bec3a6/numba-0.68.0.tar.gz", hash = "sha256:8a781de54b980b98f43bff7f1093701b5f07c80d031c7cfa8a87493d8bf73f2d", size = 2855363, upload-time = "2026-09-30T15:05:44.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/fc/57b1ce7b92cadbb4084a2ca30d9cfc8937a45ece9a64bc6050e527cbc14b/numba-0.68.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:50399af9d3799a4677044294861169c614bd7e1d8bbfc9479f78a67ab28ff427", size = 2759814, upload-time = "2026-09-30T15:04:44.039Z" }, + { url = "https://files.pythonhosted.org/packages/42/14/2ecbe9a046c611077b7b9ac267e9829aec473cf4f4314d181bd043c76fcf/numba-0.68.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:954e2684bca3ea11235272df28e8ef40f18a682c1c635a2398032b404675d8fa", size = 3547920, upload-time = "2026-09-30T15:04:46.364Z" }, + { url = "https://files.pythonhosted.org/packages/33/dc/ba4eaf844972bf9647314079f3a4cad79f63614b388b667103a2e7f521df/numba-0.68.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:68f92839637a2aaca8ae124c3abf91f648d2fade50953ea8e81ec604ac05a771", size = 3834537, upload-time = "2026-09-30T15:04:48.61Z" }, + { url = "https://files.pythonhosted.org/packages/41/0e/369fc577564e07820d5f8ddddf9648cf3e31415313c323cbd611f7905101/numba-0.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:d36f7c6a07c27fa175f5a4683083c6a830f7791fbda592a8676ce47a444965f7", size = 2830973, upload-time = "2026-09-30T15:04:50.863Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.24.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flatbuffers" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "sympy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/69/6c40720201012c6af9aa7d4ecdd620e521bd806dc6269d636fdd5c5aeebe/onnxruntime-1.24.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0bdfce8e9a6497cec584aab407b71bf697dac5e1b7b7974adc50bf7533bdb3a2", size = 17332131, upload-time = "2026-03-17T22:05:49.005Z" }, + { url = "https://files.pythonhosted.org/packages/38/e9/8c901c150ce0c368da38638f44152fb411059c0c7364b497c9e5c957321a/onnxruntime-1.24.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:046ff290045a387676941a02a8ae5c3ebec6b4f551ae228711968c4a69d8f6b7", size = 15152472, upload-time = "2026-03-17T22:03:26.176Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b6/7a4df417cdd01e8f067a509e123ac8b31af450a719fa7ed81787dd6057ec/onnxruntime-1.24.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e54ad52e61d2d4618dcff8fa1480ac66b24ee2eab73331322db1049f11ccf330", size = 17222993, upload-time = "2026-03-17T22:04:34.485Z" }, + { url = "https://files.pythonhosted.org/packages/dd/59/8febe015f391aa1757fa5ba82c759ea4b6c14ef970132efb5e316665ba61/onnxruntime-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b43b63eb24a2bc8fc77a09be67587a570967a412cccb837b6245ccb546691153", size = 12594863, upload-time = "2026-03-17T22:05:38.749Z" }, + { url = "https://files.pythonhosted.org/packages/32/84/4155fcd362e8873eb6ce305acfeeadacd9e0e59415adac474bea3d9281bb/onnxruntime-1.24.4-cp311-cp311-win_arm64.whl", hash = "sha256:e26478356dba25631fb3f20112e345f8e8bf62c499bb497e8a559f7d69cf7e7b", size = 12259895, upload-time = "2026-03-17T22:05:28.812Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/e6/d0abbb256b44e6a05748c6942511ff67db8dbb068de0c35b24bf1b395b09/platformdirs-4.13.5.tar.gz", hash = "sha256:05831adf87d392760f4b5c3a0a95579ab5a10b18b9b9bd43680dcb47544788a0", size = 62362, upload-time = "2026-10-19T01:02:11.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/8a/1d8cb3842909dc193a73835adedf412e32e18f8ffd59f43983949622fe6f/platformdirs-4.13.5-py3-none-any.whl", hash = "sha256:53d3ec4280b815c1e0b02edad7f9ee8fda1ba9c0865dd9c2e6e63849ce82fc1e", size = 32779, upload-time = "2026-10-19T01:02:10.17Z" }, +] + +[[package]] +name = "pooch" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed", size = 61788, upload-time = "2026-01-30T19:15:09.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b", size = 67175, upload-time = "2026-01-30T19:15:08.36Z" }, +] + +[[package]] +name = "protobuf" +version = "7.36.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" }, + { url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" }, + { url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" }, +] + +[[package]] +name = "pycparser" +version = "3.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/27/eeb9f307bf07060f3d9f9aa0fb8c15b01bdfded0a941e4b2719c7f94cacd/pycparser-3.12.tar.gz", hash = "sha256:f03387877eab82ce01bbdfd0ba7252ee55a90b1c708d5129e2ce915475cf1db6", size = 158785, upload-time = "2026-10-22T13:40:03.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/ae/315bbeee126a769cbde43cf4908acb4b40408d8bf8bbf334dd7368d8dadf/pycparser-3.12-py3-none-any.whl", hash = "sha256:a076f3f489b39b43ed13563a1dafe42447445bec2e294154ec5c57fcdda4c85e", size = 62600, upload-time = "2026-10-22T13:40:02.021Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/eb/eaf5e07fcc0da7149b0e084f24e54edd7441b9a89ce7e034032ae97fe3a0/scikit_learn-1.9.1.tar.gz", hash = "sha256:629cada3e33e2b9bf376cdc7614a47a4140b8aedc1d836579e359736fbd82977", size = 7786908, upload-time = "2026-09-10T18:34:04.679Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/67/1904bf57ab9ea77b5ba3899178bcb35ff8d814fc38ef6d1283bcddeaf04a/scikit_learn-1.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:326c188f92084bf58664229f4578eeab6176313b37cd5dfc85abd92b94130c58", size = 8823771, upload-time = "2026-09-10T18:32:29.891Z" }, + { url = "https://files.pythonhosted.org/packages/23/31/dc50d8780ac647bed9417f10a8b15ae3cf990ad7edb4f4b468f35030f8c5/scikit_learn-1.9.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b48b2b5b41d9c5fbafef5f37b042f61110df3318ad2a45baf57287ea5b9ba5a2", size = 8290892, upload-time = "2026-09-10T18:32:32.441Z" }, + { url = "https://files.pythonhosted.org/packages/a1/aa/a7a61517eaaa8acbf6061d255a625034e4afa277caff47e829574cc21d1c/scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4298fcc01b3d8fa9768d36894e99cce0747b3b2dd73bfd80779e393769d0afab", size = 9026402, upload-time = "2026-09-10T18:32:34.482Z" }, + { url = "https://files.pythonhosted.org/packages/69/46/f8b95a7a16fd13b458401d5e85a63d88ecb3679f3649812d5fdbea4c8357/scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52a0703bbc07ad27f560fa63fa68e4c54dd735bfbbf65b4dd3c225dc7547b6df", size = 9315422, upload-time = "2026-09-10T18:32:36.581Z" }, + { url = "https://files.pythonhosted.org/packages/29/8a/8d1e888fe3d0dd4e2a1f3356dad703eed569aaf673e222b6f647005ad30f/scikit_learn-1.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:220fa18152852a5ce29c49e1eaba9d44ec44631cd2e5cf65f5a40eafa5ab3412", size = 8329877, upload-time = "2026-09-10T18:32:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/97/44/8f43f8de3e025c505efbd88b9264008f39490fbaf15a5ca8dbd8dae0cb74/scikit_learn-1.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:8218cb8938d3031e0d23842838425490c229ecf3e99f666776e09d12ed902352", size = 7954229, upload-time = "2026-09-10T18:32:40.661Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, +] + +[[package]] +name = "soundfile" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b", size = 46156, upload-time = "2025-01-25T09:17:04.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/28/e2a36573ccbcf3d57c00626a21fe51989380636e821b341d36ccca0c1c3a/soundfile-0.13.1-py2.py3-none-any.whl", hash = "sha256:a23c717560da2cf4c7b5ae1142514e0fd82d6bbd9dfc93a50423447142f2c445", size = 25751, upload-time = "2025-01-25T09:16:44.235Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ab/73e97a5b3cc46bba7ff8650a1504348fa1863a6f9d57d7001c6b67c5f20e/soundfile-0.13.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:82dc664d19831933fe59adad199bf3945ad06d84bc111a5b4c0d3089a5b9ec33", size = 1142250, upload-time = "2025-01-25T09:16:47.583Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e5/58fd1a8d7b26fc113af244f966ee3aecf03cb9293cb935daaddc1e455e18/soundfile-0.13.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:743f12c12c4054921e15736c6be09ac26b3b3d603aef6fd69f9dde68748f2593", size = 1101406, upload-time = "2025-01-25T09:16:49.662Z" }, + { url = "https://files.pythonhosted.org/packages/58/ae/c0e4a53d77cf6e9a04179535766b3321b0b9ced5f70522e4caf9329f0046/soundfile-0.13.1-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9c9e855f5a4d06ce4213f31918653ab7de0c5a8d8107cd2427e44b42df547deb", size = 1235729, upload-time = "2025-01-25T09:16:53.018Z" }, + { url = "https://files.pythonhosted.org/packages/57/5e/70bdd9579b35003a489fc850b5047beeda26328053ebadc1fb60f320f7db/soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618", size = 1313646, upload-time = "2025-01-25T09:16:54.872Z" }, + { url = "https://files.pythonhosted.org/packages/fe/df/8c11dc4dfceda14e3003bb81a0d0edcaaf0796dd7b4f826ea3e532146bba/soundfile-0.13.1-py2.py3-none-win32.whl", hash = "sha256:c734564fab7c5ddf8e9be5bf70bab68042cd17e9c214c06e365e20d64f9a69d5", size = 899881, upload-time = "2025-01-25T09:16:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/14/e9/6b761de83277f2f02ded7e7ea6f07828ec78e4b229b80e4ca55dd205b9dc/soundfile-0.13.1-py2.py3-none-win_amd64.whl", hash = "sha256:1e70a05a0626524a69e9f0f4dd2ec174b4e9567f4d8b6c11d38b5c289be36ee9", size = 1019162, upload-time = "2025-01-25T09:16:59.573Z" }, +] + +[[package]] +name = "soxr" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/11/27cebce4a108f77afea7c80545115536b45e3f11ebfb914f638fdd9ba847/soxr-1.1.0.tar.gz", hash = "sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44", size = 173067, upload-time = "2026-05-03T00:15:18.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/49/3e6bc84f87439f222f40b616e9a29a170f41fb564710ea510df19dc26907/soxr-1.1.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d", size = 205699, upload-time = "2026-05-03T00:14:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/2f/94/216f46096a85b07d1e6ba7fd44491402e912a3d688cd4f36f0a600ca155f/soxr-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11", size = 167381, upload-time = "2026-05-03T00:14:48.012Z" }, + { url = "https://files.pythonhosted.org/packages/94/cb/06caa463b8181ec1981bd6376d4a873748b7008193188b8cfb60391eb131/soxr-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464", size = 210938, upload-time = "2026-05-03T00:14:49.768Z" }, + { url = "https://files.pythonhosted.org/packages/86/47/d5964551ca818b7f0c7ef7f3899056263b60ef098a801066350a9672ca8f/soxr-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9", size = 245268, upload-time = "2026-05-03T00:14:51.422Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/371467eb86c7ba6810df0bfe9409bcd9c52ec5615b111190fafe23e4d2e1/soxr-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86", size = 176779, upload-time = "2026-05-03T00:14:53.09Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/f3da7973b5f1b05d2d7e94d5376b881dcbc05297900cae6c3d33d95b209b/soxr-1.1.0-cp312-abi3-macosx_10_14_x86_64.whl", hash = "sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da", size = 204124, upload-time = "2026-05-03T00:14:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/03/dc/200013a74641f8774664bbcd2346c695c05c2e300ea792adcb40a293eed0/soxr-1.1.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4", size = 165457, upload-time = "2026-05-03T00:14:56.007Z" }, + { url = "https://files.pythonhosted.org/packages/88/2b/2e5eba817a762a2ec589ff165b8bc5955b25a0ad140045f7cd8e45410543/soxr-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06", size = 206529, upload-time = "2026-05-03T00:14:57.646Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f1/0e55195893228609c9a08c3b13b7a83a46c3a992cd00d3304f0f320cfb07/soxr-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1", size = 240413, upload-time = "2026-05-03T00:14:59.363Z" }, + { url = "https://files.pythonhosted.org/packages/b0/4d/621e4150e4815246ad552d215a8a294a90143fedd19ee442cf82d3b3abc8/soxr-1.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4", size = 174357, upload-time = "2026-05-03T00:15:00.724Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dc/6c58154c1c65f758ea979e7139cb76993a9cfc662d14e9be3c4a667cfb77/threadpoolctl-3.7.0.tar.gz", hash = "sha256:61348cfb77d53b9242e0017029244b559b810c142ced65b4e21eeca1843959a7", size = 31961, upload-time = "2026-09-15T15:46:20.263Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/3f/f88a53f60a472b46f4023f56d204dd7de33d34c5d2acbfa0d70a674e639e/threadpoolctl-3.7.0-py3-none-any.whl", hash = "sha256:cd8b60b5641b45c67bbf73c64c843235fc2d8a480c87389f52f5dbee893b86be", size = 26362, upload-time = "2026-09-15T15:46:19.168Z" }, +] + +[[package]] +name = "turnsense-1-0-evaluation" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "kaldi-native-fbank" }, + { name = "librosa" }, + { name = "numpy" }, + { name = "onnxruntime" }, + { name = "soundfile" }, +] + +[package.metadata] +requires-dist = [ + { name = "kaldi-native-fbank", specifier = "==1.22.3" }, + { name = "librosa", specifier = "==0.11.0" }, + { name = "numpy", specifier = "==2.2.6" }, + { name = "onnxruntime", specifier = "==1.24.4" }, + { name = "soundfile", specifier = "==0.13.1" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "urllib3" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, +] diff --git a/labels/eot-studio/README.md b/labels/eot-studio/README.md index bd8ff73..2ef4285 100644 --- a/labels/eot-studio/README.md +++ b/labels/eot-studio/README.md @@ -26,14 +26,14 @@ npm run dev ## 模型分数对比 -点击时间轴上方的“模型分数对比”展开对比,默认收起。VAP / MaAI(紫色)、Smart Turn(青色)和 Silero VAD(橙色)共用录音的时间刻度、缩放、播放头及判断点参考线。点击或拖动曲线区域定位播放,悬停查看当时已产生的分数;点击空心评分点定位到原标注时刻。顶部显示播放位置最近的有效评分,暂无评分时显示“—”,不将缺失数据当作 0。 +点击时间轴上方的“模型分数对比”展开对比,默认收起。VAP / MaAI(紫色)、Smart Turn(青色)、Silero VAD(橙色)、LiveKit v1-mini(蓝色)和 TurnSense 1.0(玫红色)共用录音的时间刻度、缩放、播放头及判断点参考线。点击或拖动曲线区域定位播放,悬停查看当时已产生的分数;点击空心评分点定位到原标注时刻。顶部显示播放位置最近的有效评分,暂无评分时显示“—”,不将缺失数据当作 0。 - 实线阶梯曲线来自对六通完整录音的真实推理,不是用44个点插值。MaAI每100ms输入一块音频,因流式重采样缓冲,部分评分间隔为200ms;Smart Turn每200ms计算一次,并包含原标注的精确时刻。 - MaAI使用双声道连续回放、20秒KV缓存,分数为 `1 - p_now[user]`,是接话候选分数,不是校准的EOT概率。Smart Turn沿用原回测的用户声道、过去ASR定位、500ms前置音频、3秒内续说及最多8秒窗口;没有额外的结束信号、VAD停止门槛或超时放行。 - 空心点保留原44点的独立窗口回测分数。尤其MaAI的连续状态与独立窗口不同,空心点可能不落在连续曲线上。原始44点指标不会被这次时间序列覆盖。 - Silero VAD 为用户声道逐个完整 32 ms 帧的真实 ONNX 推理,使用 `1 - speech_probability`,仅为非发声基线,不是语义 EOT 概率。时间戳为帧末;空心点取原判断时刻最后可用帧,不读取未来音频。独立环境和复现方法见 [Silero 实验说明](../../experiments/silero-vad/README.md)。 - 参考阈值只改变虚线位置,不修改人工标签。MaAI可选0.11、0.5、0.8,Smart Turn和Silero可选0.5、0.8。保存的分数不会随标注或转写编辑而重新计算。 -- 三个模型名称旁各有独立显示开关,默认都打开。关闭后隐藏该模型的曲线、原标注点评分、参考线及分数读数;重新打开保留原阈值。全部关闭时显示提示,切换通话或收起再展开会保留当前显示选择。 +- “选择模型”打开可搜索、按类型分组的多选面板,支持全选可用 / 清空;无评分模型保留在列表并说明状态。首次显示 VAP、Smart Turn、TurnSense 三条,之后记住显示选择和参考阈值,切换通话、收起和刷新均保留。紧凑图例只显示已选模型与当前分数,悬停或键盘聚焦会突出对应曲线。点击图例打开阈值和模型说明,可单独查看一个模型并恢复原选择。 - 仅在展开时读取当前项目录音的评分,并核对音频SHA256。更换为本地新录音、音频变化或没有对应推理数据时,不显示旧曲线。切换通话会取消旧请求,避免前一段数据覆盖当前段。 评分数据位于各模型实验目录的 `results/score-timeline.json`。更新数据时,在两个各自的本机uv环境中运行: @@ -76,3 +76,11 @@ demo,5200,我明天下午,0,high,mid_turn_pause,A - `GET /api/audio?path=...`:仅提供 `data` 内的 MP3、WAV、M4A、OGG、FLAC 和 WebM 录音,支持 Range 请求和 HEAD,便于跳转播放。路径相对 `data` 目录,不能通过 `..` 或符号链接访问目录之外的文件。 录音 `call_id` 默认取文件名去除扩展名后的部分;同一通话有多个项目录音时,默认使用发现的第一条,可点击“更换录音”重新关联本地文件。 + +### LiveKit v1-mini + +新增蓝色 LiveKit v1-mini 曲线,默认显示、每 200 ms 更新,并包含 44 个判断点的精确分数。只接收判断前的用户声道,16 kHz 最近 1.2 秒音频。参考阈值默认采用锁定 SDK 的中文阈值 0.355,可切换 0.5 / 0.8。它通过 LiveKit Agents 本地推理入口运行,不加服务层 VAD 门槛、静音等待或超时;不将这些曲线称为完整在线策略表现。模型许可与复现说明见 [实验说明](../../experiments/livekit-v1-mini/README.md)。 + +### TurnSense 1.0 FP32 + +玫红色曲线为真实 ONNX 推理的 P(complete),每 200 ms 及原判断点精确时刻更新。输入仅为判断前的用户左声道,重采样到 16 kHz 后取最近 8 秒;官方前端/CMVN不改动。支持独立开关和 0.5 / 0.8 参考线。原生输出为 complete/incomplete/invalid 三分类,完整三项概率保存在实验 predictions.csv,原生 argmax complete 映射为可接话;网页 0.5 参考线不是原生 argmax 的等价规则。复现和评估结果见 [TurnSense 实验说明](../../experiments/turnsense-1.0/README.md)。 diff --git a/labels/eot-studio/app/api/model-scores/route.ts b/labels/eot-studio/app/api/model-scores/route.ts index f3cfed2..47056f9 100644 --- a/labels/eot-studio/app/api/model-scores/route.ts +++ b/labels/eot-studio/app/api/model-scores/route.ts @@ -1,16 +1,14 @@ import { promises as fs } from "node:fs"; import { createHash } from "node:crypto"; import path from "node:path"; -import { parseScoreExport, type ModelId, type ScoreResponse } from "@/lib/model-scores"; +import { parseScoreExport, type ScoreResponse } from "@/lib/model-scores"; + +import { SCORE_MODELS, SCORE_MODEL_IDS } from "@/lib/score-models"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; const root = path.resolve(process.cwd(), "..", ".."); -const sources: { model: ModelId; directory: string; name: string }[] = [ - { model: "maai", directory: "maai-ch-kyoto", name: "MaAI" }, - { model: "smart_turn", directory: "smart-turn-v3.2", name: "Smart Turn" }, - { model: "silero_vad", directory: "silero-vad", name: "Silero VAD" }, -]; +const sources = SCORE_MODEL_IDS.map(model => ({ model, ...SCORE_MODELS[model] })); const json = (data: unknown, status = 200) => Response.json(data, { status, headers: { "Cache-Control": "no-store" } }); export async function GET(request: Request) { diff --git a/labels/eot-studio/components/model-score-track.tsx b/labels/eot-studio/components/model-score-track.tsx index a66989b..555f748 100644 --- a/labels/eot-studio/components/model-score-track.tsx +++ b/labels/eot-studio/components/model-score-track.tsx @@ -1,12 +1,14 @@ "use client"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState, useId } from "react"; import { scoreAt, scorePath, type ModelId, type ScoreResponse, type ScoreSeries } from "@/lib/model-scores"; +import { createPortal } from "react-dom"; +import { SCORE_MODELS, SCORE_MODEL_IDS, readScorePreferences } from "@/lib/score-models"; import type { TimelineAnnotation } from "./timeline"; import styles from "./timeline.module.css"; const EMPTY: ScoreSeries[] = []; -const COLORS: Record = { maai: "#8866b2", smart_turn: "#278d95", silero_vad: "#c47b32" }; +const COLORS = Object.fromEntries(SCORE_MODEL_IDS.map(id => [id, SCORE_MODELS[id].color])) as Record; export const SCORE_HEIGHT = 172; export type ScoreThresholds = Record; export type ScoreVisibility = Record; @@ -44,33 +46,125 @@ export function useModelScores(callId: string, recordingPath: string | null, exp }; } -export function ScoreControls({ series, currentMs, thresholds, onThreshold, visibility, onVisibility }: { +export function useScorePreferences() { + const [preferences, setPreferences] = useState(() => readScorePreferences(null)); + const [ready, setReady] = useState(false); + useEffect(() => { + try { setPreferences(readScorePreferences(JSON.parse(localStorage.getItem("eot-score-preferences-v1") || "null"))); } catch { /* Defaults survive unavailable or invalid browser storage. */ } + setReady(true); + }, []); + useEffect(() => { + if (!ready) return; + try { localStorage.setItem("eot-score-preferences-v1", JSON.stringify({ version: 1, ...preferences })); } catch { /* Preferences are optional. */ } + }, [ready, preferences]); + return { ...preferences, + setVisibility: (visibility: ScoreVisibility) => setPreferences(previous => ({ ...previous, visibility })), + setThreshold: (id: ModelId, value: number) => setPreferences(previous => ({ ...previous, thresholds: { ...previous.thresholds, [id]: value } })), + }; +} + +export function ScoreControls({ series, currentMs, thresholds, onThreshold, visibility, onVisibility, onFocus, focusedModel, loading }: { series: ScoreSeries[]; currentMs: number; thresholds: ScoreThresholds; onThreshold: (model: ModelId, value: number) => void; - visibility: ScoreVisibility; onVisibility: (model: ModelId, visible: boolean) => void; + visibility: ScoreVisibility; onVisibility: (visibility: ScoreVisibility) => void; + onFocus: (model: ModelId | null) => void; focusedModel: ModelId | null; loading: boolean; }) { + const [panel, setPanel] = useState(null); + const [query, setQuery] = useState(""); + const [position, setPosition] = useState({ top: 0, left: 0 }); + const [previousSelection, setPreviousSelection] = useState(null); + const anchor = useRef(null); + const popup = useRef(null); + const search = useRef(null); + const panelId = useId(); + const available = new Set(series.map(row => row.model)); + const selected = series.filter(row => visibility[row.model]); + function close() { setPanel(null); anchor.current?.focus({ preventScroll: true }); } + function open(kind: ModelId | "choose", button: HTMLButtonElement) { + anchor.current = button; + if (panel === kind) { close(); return; } + setQuery(""); setPanel(kind); + } + useEffect(() => { + if (!panel) return; + const place = () => { + const r = anchor.current?.getBoundingClientRect(); if (!r) return; + const width = Math.min(360, window.innerWidth - 24); + const height = Math.min(popup.current?.getBoundingClientRect().height || 460, window.innerHeight - 24); + setPosition({ left: Math.max(12, Math.min(r.left, window.innerWidth - width - 12)), + top: Math.max(12, Math.min(r.bottom + 8, window.innerHeight - height - 12)) }); + }; + place(); + (panel === "choose" ? search.current : popup.current?.querySelector("button,select"))?.focus({ preventScroll: true }); + const outside = (event: PointerEvent) => { + if (!popup.current?.contains(event.target as Node) && !anchor.current?.contains(event.target as Node)) setPanel(null); + }; + const escape = (event: KeyboardEvent) => { + if (event.key === "Escape") { event.preventDefault(); event.stopPropagation(); close(); } + // Keep workbench hotkeys from changing annotations while browsing settings. + else if (popup.current?.contains(event.target as Node)) event.stopPropagation(); + }; + document.addEventListener("pointerdown", outside); document.addEventListener("keydown", escape, true); + window.addEventListener("resize", place); window.addEventListener("scroll", place, true); + return () => { document.removeEventListener("pointerdown", outside); document.removeEventListener("keydown", escape, true); + window.removeEventListener("resize", place); window.removeEventListener("scroll", place, true); }; + }, [panel]); + const manualSelection = (next: ScoreVisibility) => { setPreviousSelection(null); onVisibility(next); }; + const metadata = panel && panel !== "choose" ? SCORE_MODELS[panel] : null; return
- {series.map(row => { - const visible = visibility[row.model]; - const point = visible ? scoreAt(row.points, currentMs, row.sample_interval_ms * 2) : null; - return
- - {point ? point[1].toFixed(3) : "—"} -
; - })} + + + } +
, document.body)} ; } -export default function ModelScoreTrack({ series, width, durationMs, currentMs, thresholds, annotations, onSeek, onSelectAnnotation }: { +export default function ModelScoreTrack({ series, width, durationMs, currentMs, thresholds, annotations, onSeek, onSelectAnnotation, focusedModel }: { series: ScoreSeries[]; width: number; durationMs: number; currentMs: number; - thresholds: ScoreThresholds; annotations: TimelineAnnotation[]; + thresholds: ScoreThresholds; annotations: TimelineAnnotation[]; focusedModel: ModelId | null; onSeek: (ms: number) => void; onSelectAnnotation: (id: string, seekToPoint?: boolean) => void; }) { const [hoverMs, setHoverMs] = useState(null); @@ -86,7 +180,7 @@ export default function ModelScoreTrack({ series, width, durationMs, currentMs, }; return
setHoverMs(null)}> { const bounds = event.currentTarget.getBoundingClientRect(); setHoverMs(Math.max(0, Math.min(durationMs, (event.clientX - bounds.left) / bounds.width * durationMs))); @@ -94,10 +188,10 @@ export default function ModelScoreTrack({ series, width, durationMs, currentMs, {[0, .25, .5, .75, 1].map(p => )} {annotations.map(row => )} - {paths.map(row => + {paths.map(row => - + {row.checkpoints.map(([ms, score]) => span:last-child { color: #929b89; font-size: 10px; } .chevron, .chevronOpen { display: inline-block; width: 12px; font-size: 23px; line-height: 16px; text-align: center; } .chevronOpen { transform: rotate(90deg); } -.scoreControls { display: flex; flex-wrap: wrap; align-items: center; gap: 9px; } -.modelControl { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border: 1px solid #e9e9e2; border-radius: 7px; background: #fafbf7; font-size: 10px; } -.modelControl strong { font-weight: 600; } -.modelControl output { width: 37px; font-family: monospace; font-variant-numeric: tabular-nums; text-align: center; } -.modelControl label { display: flex; align-items: center; gap: 4px; color: #88927e; padding-left: 4px; border-left: 1px solid #e2e5db; } -.modelControl select { padding: 1px 0; border: 0; background: transparent; font-size: 10px; color: #637258; cursor: pointer; } -.modelVisibility { display: inline-flex; align-items: center; gap: 6px; padding: 3px 0; border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; } -.modelSwitch { display: inline-block; position: relative; width: 26px; height: 15px; border-radius: 20px; background: currentColor; } -.modelSwitch::after { content: ""; position: absolute; top: 3px; left: 14px; width: 9px; height: 9px; border-radius: 50%; background: white; transition: left .15s ease; } -.modelVisibility[aria-checked="false"] { color: #92998c; } -.modelVisibility[aria-checked="false"] .modelSwitch { background: #c6cbbe; } -.modelVisibility[aria-checked="false"] .modelSwitch::after { left: 3px; } -.modelControl select:disabled { opacity: .45; cursor: default; } +.scoreControls { width: 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; } .scoreDescription { padding: 0 22px 10px; font-size: 10px; line-height: 1.7; color: #88927f; } .scoreDescription button { border: 0; background: none; color: #536f40; cursor: pointer; text-decoration: underline; font-size: inherit; } .trackNames > .scoreAxis { padding: 12px 8px; flex-direction: column; justify-content: space-between; font-size: 10px; color: #929a87; border-top: 1px solid #e7e9e0; } @@ -150,10 +138,51 @@ .scoreInspection b { font-weight: 500; } .scoreEmpty { position: sticky; left: 0; display: grid; place-items: center; color: #929b88; font-size: 11px; background: #fdfefb; border-top: 1px solid #e7e9e0; } .scoreFootnote { margin: 0; padding: 9px 22px 0; color: #8c9583; font-size: 10px; line-height: 1.7; } -.scoreToggle:focus-visible, .modelVisibility:focus-visible, .modelControl select:focus-visible { outline: 2px solid #758962; outline-offset: 3px; border-radius: 3px; } +.scoreToggle:focus-visible, .modelPickerButton:focus-visible, .legendName:focus-visible { outline: 2px solid #758962; outline-offset: 3px; border-radius: 3px; } @media (max-width: 640px) { .scorePanelHeader { padding-inline: 12px; gap: 5px; } .scoreDescription, .scoreFootnote { padding-inline: 12px; } .scoreControls { gap: 5px; } - .modelControl { padding: 4px 5px; } } + +.modelPickerBar { display: flex; align-items: center; gap: 9px; } +.modelPickerButton { display: inline-flex; align-items: center; gap: 7px; padding: 6px 9px; border: 1px solid #dfe5d7; background: #f8faf3; border-radius: 6px; font: inherit; font-size: 11px; color: #526448; cursor: pointer; white-space: nowrap; } +.modelPickerButton > span:first-child { padding: 1px 5px; border-radius: 4px; background: #e9efdf; color: #69775f; font: 10px monospace; } +.restoreSelection { border: 0; background: none; color: #647d50; font: inherit; font-size: 10px; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; } +.modelLegend { display: flex; align-items: center; flex-wrap: wrap; gap: 3px 10px; min-width: 0; } +.legendItem { transition: opacity .12s; } +.legendName { display: flex; align-items: center; gap: 5px; border: 0; border-radius: 5px; padding: 5px 2px; background: none; color: inherit; font-size: 10px; cursor: pointer; } +.legendName:hover, .legendName[aria-expanded="true"] { background: #f0f3e9; } +.legendName output { font: 10px monospace; font-variant-numeric: tabular-nums; min-width: 32px; } +.legendMore { color: #9aa18e; font-size: 15px; line-height: 10px; } +.modelColor { display: inline-block; width: 7px; height: 7px; flex-shrink: 0; background: currentColor; border-radius: 50%; } +.noModels { color: #929b88; font-size: 10px; } +.modelPopover { position: fixed; z-index: 100; width: min(360px, calc(100vw - 24px)); max-height: calc(100vh - 24px); overflow-y: auto; padding: 14px; border: 1px solid #dfe4d6; border-radius: 12px; background: #fffefb; box-shadow: 0 12px 40px #33402a26, 0 2px 8px #33402a0d; color: #46563e; font-family: inherit; font-size: 12px; } +.popoverHeading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; } +.popoverHeading strong { font-size: 13px; font-weight: 600; } +.popoverHeading button { display: grid; place-items: center; width: 26px; height: 26px; border: 0; border-radius: 5px; background: #f4f6ee; font-size: 19px; color: #7c8872; cursor: pointer; } +.modelSearch { box-sizing: border-box; width: 100%; padding: 8px 10px; border: 1px solid #dfe5d7; border-radius: 7px; color: #526448; background: #fbfcf7; font: inherit; font-size: 12px; } +.modelSearch:focus-visible { outline: 2px solid #9aac87; outline-offset: 1px; } +.pickerActions { display: flex; align-items: center; gap: 9px; padding: 11px 0 7px; font-size: 10px; color: #8b9580; } +.pickerActions > span { margin-right: auto; } +.pickerActions button { padding: 2px 0; border: 0; background: none; color: #637e4d; cursor: pointer; font: inherit; } +.pickerActions button:disabled { opacity: .4; cursor: default; } +.modelOptions { max-height: min(360px, 50vh); overflow-y: auto; scrollbar-width: thin; } +.modelOptions fieldset { border: 0; margin: 6px 0 0; padding: 0; min-width: 0; } +.modelOptions legend { padding: 5px 0; color: #8c9781; font-size: 10px; } +.modelOption { display: flex; align-items: center; gap: 9px; padding: 8px 6px; border-radius: 6px; cursor: pointer; } +.modelOption:hover { background: #f4f7ed; } +.modelOption:has(input:disabled) { opacity: .55; cursor: default; } +.modelOption input { accent-color: #748c5f; margin: 0; width: 14px; height: 14px; } +.modelOption > span { display: flex; flex-direction: column; gap: 3px; min-width: 0; } +.modelOption strong { font-size: 11px; font-weight: 550; } +.modelOption small { font-size: 10px; color: #8c9781; } +.pickerHint { margin: 12px 0 0; border-top: 1px solid #ecede5; padding-top: 10px; color: #929b88; font-size: 10px; } +.noSearchResults { padding: 18px 0; text-align: center; color: #929b88; } +.modelExplanation { margin: 0 0 14px; line-height: 1.8; color: #839175; font-size: 11px; } +.thresholdSetting { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 8px 0 14px; color: #66775a; font-size: 11px; } +.thresholdSetting select { border: 1px solid #dfe5d7; border-radius: 6px; padding: 6px 8px; background: #f9fbf4; color: #526448; font: inherit; } +.modelMenuAction { display: block; width: 100%; padding: 9px 6px; text-align: left; border: 0; border-top: 1px solid #eef0e6; color: #637a50; background: none; cursor: pointer; font: inherit; font-size: 11px; } +.modelMenuAction:hover { background: #f4f7ed; } +.modelPopover button:focus-visible, .modelPopover select:focus-visible { outline: 2px solid #91a67c; outline-offset: 2px; } +@media (prefers-reduced-motion: reduce) { .legendItem { transition: none; } } diff --git a/labels/eot-studio/components/timeline.tsx b/labels/eot-studio/components/timeline.tsx index eebb3ac..8d6c6b9 100644 --- a/labels/eot-studio/components/timeline.tsx +++ b/labels/eot-studio/components/timeline.tsx @@ -11,8 +11,9 @@ import { type PointerEvent, } from "react"; import styles from "./timeline.module.css"; +import type { ModelId } from "@/lib/model-scores"; import { resizeTranscriptRange, snapTimelineTime, type SnapPoint } from "@/lib/timeline-edit"; -import ModelScoreTrack, { ScoreControls, SCORE_HEIGHT, useModelScores, type ScoreThresholds, type ScoreVisibility } from "./model-score-track"; +import ModelScoreTrack, { ScoreControls, SCORE_HEIGHT, useModelScores, useScorePreferences } from "./model-score-track"; export interface TimelineTranscript { index: number; @@ -90,8 +91,8 @@ export default function Timeline({ const helpId = useId(); const scoreRegionId = useId(); const [scoresOpen, setScoresOpen] = useState(false); - const [thresholds, setThresholds] = useState({ maai: .5, smart_turn: .5, silero_vad: .5 }); - const [scoreVisibility, setScoreVisibility] = useState({ maai: true, smart_turn: true, silero_vad: true }); + const { thresholds, visibility: scoreVisibility, setVisibility, setThreshold } = useScorePreferences(); + const [focusedModel, setFocusedModel] = useState(null); const scores = useModelScores(callId, recordingPath, scoresOpen); const visibleScores = useMemo(() => scores.series.filter(row => scoreVisibility[row.model]), [scores.series, scoreVisibility]); const viewportRef = useRef(null); @@ -336,15 +337,15 @@ export default function Timeline({ - 模型分数对比{scoresOpen ? "收起" : "展开 VAP / Smart Turn / Silero VAD 对比"} + 模型分数对比{scoresOpen ? "收起" : "展开评分曲线"} {scoresOpen && setScoreVisibility(previous => ({ ...previous, [model]: visible }))} - thresholds={thresholds} onThreshold={(model, value) => setThresholds(previous => ({ ...previous, [model]: value }))} />} + visibility={scoreVisibility} onVisibility={setVisibility} + thresholds={thresholds} onThreshold={setThreshold} focusedModel={focusedModel} onFocus={setFocusedModel} loading={scores.status === "loading"} />}
{scoresOpen &&
{scores.status === "loading" ? "正在读取模型分数…" : scores.status === "error" ? <>{scores.messages.join(" ")} - : <>实线:连续回放评分 · 空心点:原标注点评分 · 虚线:参考阈值。Smart Turn 表示完成倾向;VAP 使用 1 − 用户近期发声分数,Silero 使用 1 − 当前发声分数,仅为非发声基线,不是语义 EOT 概率。{scores.messages.join(" ")}} + : <>实线:连续回放评分 · 空心点:原标注点评分 · 虚线:参考阈值。Smart Turn、LiveKit 表示完成倾向,TurnSense 为 P(complete);VAP 使用 1 − 用户近期发声分数,Silero 使用 1 − 当前发声分数,仅为非发声基线,不是语义 EOT 概率。{scores.messages.join(" ")}}
}
@@ -452,9 +453,9 @@ export default function Timeline({
{scoresOpen &&
- {visibleScores.length ? row.model === focusedModel) ? focusedModel : null} series={visibleScores} width={canvasWidth} durationMs={duration} currentMs={current} thresholds={thresholds} annotations={annotations} onSeek={onSeek} onSelectAnnotation={onSelectAnnotation} /> - :
{scores.status === "loading" ? "正在载入评分曲线…" : scores.series.length ? "已隐藏全部模型分数,请打开上方开关查看" : "当前录音暂无可显示的模型分数"}
} + :
{scores.status === "loading" ? "正在载入评分曲线…" : scores.series.length ? "已隐藏全部模型分数,请在「选择模型」中添加" : "当前录音暂无可显示的模型分数"}
}
} {activeSnap && - {scoresOpen && scores.series.length > 0 &&

点击曲线定位录音;悬停查看分数。VAP 约每 100 ms、Smart Turn 每 200 ms、Silero 每 32 ms 更新。Silero 空心点取判断前最后完整帧;其他模型原标注点评分使用独立历史窗口,与连续曲线可能不同;编辑标注或转写不会重算已有分数。

} + {scoresOpen && scores.series.length > 0 &&

点击曲线定位录音;悬停查看分数。VAP 约每 100 ms、Smart Turn 每 200 ms、Silero 每 32 ms、LiveKit、TurnSense 每 200 ms 更新。TurnSense 使用过去 8 秒用户音频;LiveKit 使用过去 1.2 秒用户音频,中文参考阈值 0.355;Silero 空心点取判断前最后完整帧;VAP 和 Smart Turn 原标注点评分使用独立历史窗口,与连续曲线可能不同;TurnSense 的 0.5 参考线不等同于原生三分类取最大值规则;编辑标注或转写不会重算已有分数。

}
播放 {timeLabel(current, true)}
diff --git a/labels/eot-studio/lib/model-scores.ts b/labels/eot-studio/lib/model-scores.ts index 3225814..4a05897 100644 --- a/labels/eot-studio/lib/model-scores.ts +++ b/labels/eot-studio/lib/model-scores.ts @@ -1,4 +1,4 @@ -export type ModelId = "maai" | "smart_turn" | "silero_vad"; +export type ModelId = "maai" | "smart_turn" | "silero_vad" | "livekit_mini" | "turnsense"; export type ScorePoint = [timeMs: number, score: number]; export interface ScoreCall { diff --git a/labels/eot-studio/lib/score-models.ts b/labels/eot-studio/lib/score-models.ts new file mode 100644 index 0000000..727c44a --- /dev/null +++ b/labels/eot-studio/lib/score-models.ts @@ -0,0 +1,22 @@ +import type { ModelId } from "./model-scores"; + +export const SCORE_MODELS: Record = { + maai: { name: "VAP / MaAI", family: "活动预测", color: "#8866b2", directory: "maai-ch-kyoto", thresholds: [.11, .5, .8], defaultThreshold: .5, defaultVisible: true, description: "1 − 用户近期发声分数;约每 100 ms 更新,不是校准的 EOT 概率。" }, + smart_turn: { name: "Smart Turn", family: "话轮检测", color: "#278d95", directory: "smart-turn-v3.2", thresholds: [.5, .8], defaultThreshold: .5, defaultVisible: true, description: "完成倾向;最近最多 8 秒用户音频,每 200 ms 更新。" }, + silero_vad: { name: "Silero VAD", family: "活动预测", color: "#c47b32", directory: "silero-vad", thresholds: [.5, .8], defaultThreshold: .5, defaultVisible: false, description: "1 − 发声概率;每 32 ms 更新,仅为非发声基线,不是语义 EOT 概率。" }, + livekit_mini: { name: "LiveKit v1-mini", family: "话轮检测", color: "#5378c4", directory: "livekit-v1-mini", thresholds: [.355, .5, .8], defaultThreshold: .355, defaultVisible: false, description: "P(turn ended);最近 1.2 秒用户音频,每 200 ms 更新。0.355 为中文参考阈值。" }, + turnsense: { name: "TurnSense 1.0", family: "话轮检测", color: "#b65378", directory: "turnsense-1.0", thresholds: [.5, .8], defaultThreshold: .5, defaultVisible: true, description: "FP32 · P(complete);最近 8 秒用户音频,每 200 ms 更新。参考线不等同原生三分类 argmax。" }, +}; +export const SCORE_MODEL_IDS = Object.keys(SCORE_MODELS) as ModelId[]; +export interface ScorePreferences { visibility: Record; thresholds: Record } +export function readScorePreferences(value: unknown): ScorePreferences { + const saved = value && typeof value === "object" && "version" in value && value.version === 1 + ? value as { visibility?: Record; thresholds?: Record } : {}; + return { + visibility: Object.fromEntries(SCORE_MODEL_IDS.map(id => [id, typeof saved.visibility?.[id] === "boolean" ? saved.visibility[id] : SCORE_MODELS[id].defaultVisible])) as Record, + thresholds: Object.fromEntries(SCORE_MODEL_IDS.map(id => [id, SCORE_MODELS[id].thresholds.includes(saved.thresholds?.[id] as number) ? saved.thresholds![id] : SCORE_MODELS[id].defaultThreshold])) as Record, + }; +} diff --git a/labels/eot-studio/tests/model-scores.test.ts b/labels/eot-studio/tests/model-scores.test.ts index b25ca8c..af0dbeb 100644 --- a/labels/eot-studio/tests/model-scores.test.ts +++ b/labels/eot-studio/tests/model-scores.test.ts @@ -38,13 +38,15 @@ test("curve gaps are not connected and steps remain on the audio clock", () => { test("recorded inference exports agree on audio identity and retain all 44 checkpoints", async () => { const files = [ - ["maai", "maai-ch-kyoto"], ["smart_turn", "smart-turn-v3.2"], ["silero_vad", "silero-vad"], + ["maai", "maai-ch-kyoto"], ["smart_turn", "smart-turn-v3.2"], ["silero_vad", "silero-vad"], ["livekit_mini", "livekit-v1-mini"], ["turnsense", "turnsense-1.0"], ] as const; const exports = await Promise.all(files.map(async ([model, directory]) => parseScoreExport( JSON.parse(await readFile(new URL(`../../../experiments/${directory}/results/score-timeline.json`, import.meta.url), "utf8")), model))); const identity = (data: typeof exports[number]) => data.calls.map(call => [call.call_id, call.audio_path, call.audio_sha256, call.duration_ms]); assert.deepEqual(identity(exports[0]), identity(exports[1])); assert.deepEqual(identity(exports[0]), identity(exports[2])); + assert.deepEqual(identity(exports[0]), identity(exports[3])); + assert.deepEqual(identity(exports[0]), identity(exports[4])); for (const data of exports) { assert.equal(data.calls.reduce((n, call) => n + call.checkpoints.length, 0), 44); for (const call of data.calls) { @@ -69,3 +71,25 @@ test("Silero checkpoints use only the last available frame, and speech is invert } } }); + + +test("LiveKit original checkpoints are real exact-time curve scores", async () => { + const data = parseScoreExport(JSON.parse(await readFile(new URL( + "../../../experiments/livekit-v1-mini/results/score-timeline.json", import.meta.url), "utf8")), "livekit_mini"); + assert.equal(data.sample_interval_ms, 200); + for (const call of data.calls) { + for (const [ms, score] of call.checkpoints) { + assert.deepEqual(call.points.find(point => point[0] === ms), [ms, score]); + } + } +}); + + +test("TurnSense curve checkpoints retain the complete probability at the exact decision", async () => { + const data = parseScoreExport(JSON.parse(await readFile(new URL( + "../../../experiments/turnsense-1.0/results/score-timeline.json", import.meta.url), "utf8")), "turnsense"); + assert.equal(data.sample_interval_ms, 200); + for (const call of data.calls) { + for (const point of call.checkpoints) assert.deepEqual(call.points.find(p => p[0] === point[0]), point); + } +}); diff --git a/labels/eot-studio/tests/score-preferences.test.ts b/labels/eot-studio/tests/score-preferences.test.ts new file mode 100644 index 0000000..7eac19a --- /dev/null +++ b/labels/eot-studio/tests/score-preferences.test.ts @@ -0,0 +1,28 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +// @ts-expect-error Node's native TypeScript runner requires explicit extensions. +import { readScorePreferences } from "../lib/score-models.ts"; + +test("first visit starts with three comparison curves and each model's reference threshold", () => { + const defaults = readScorePreferences(null); + assert.deepEqual(Object.entries(defaults.visibility).filter(([, value]) => value).map(([id]) => id), ["maai", "smart_turn", "turnsense"]); + assert.equal(defaults.thresholds.livekit_mini, .355); +}); + +test("saved choices preserve clear-all and accept only supported reference thresholds", () => { + const saved = readScorePreferences({ version: 1, visibility: { maai: false, smart_turn: false, silero_vad: false, livekit_mini: false, turnsense: false }, + thresholds: { maai: .11, livekit_mini: .355, smart_turn: 99, turnsense: "0.8" } }); + assert.equal(Object.values(saved.visibility).some(Boolean), false); + assert.equal(saved.thresholds.maai, .11); + assert.equal(saved.thresholds.smart_turn, .5); + assert.equal(saved.thresholds.turnsense, .5); +}); + +test("partial and invalid preferences leave future models on their defaults", () => { + const saved = readScorePreferences({ version: 1, visibility: { maai: true, smart_turn: "false", unknown: true }, thresholds: { turnsense: .8 } }); + assert.equal(saved.visibility.smart_turn, true); + assert.equal(saved.visibility.turnsense, true); + assert.equal(saved.thresholds.turnsense, .8); + assert.equal("unknown" in saved.visibility, false); + assert.deepEqual(readScorePreferences({ version: 999, visibility: { maai: false } }), readScorePreferences(null)); +});