eggpool 0.7.1__tar.gz → 0.7.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. {eggpool-0.7.1 → eggpool-0.7.2}/PKG-INFO +1 -1
  2. {eggpool-0.7.1 → eggpool-0.7.2}/config.example.toml +7 -1
  3. {eggpool-0.7.1 → eggpool-0.7.2}/docs/thinking.md +12 -8
  4. {eggpool-0.7.1 → eggpool-0.7.2}/docs/transcoding.md +2 -2
  5. {eggpool-0.7.1 → eggpool-0.7.2}/pyproject.toml +1 -1
  6. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/_share/config.example.toml +7 -2
  7. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/models_dev.py +28 -0
  8. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/models/config.py +47 -14
  9. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/provider_bound_request.py +22 -0
  10. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/builtin_contracts.py +44 -0
  11. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/policy.py +13 -10
  12. {eggpool-0.7.1 → eggpool-0.7.2}/uv.lock +1 -1
  13. {eggpool-0.7.1 → eggpool-0.7.2}/.env.example +0 -0
  14. {eggpool-0.7.1 → eggpool-0.7.2}/.github/workflows/ci.yml +0 -0
  15. {eggpool-0.7.1 → eggpool-0.7.2}/.gitignore +0 -0
  16. {eggpool-0.7.1 → eggpool-0.7.2}/AGENTS.md +0 -0
  17. {eggpool-0.7.1 → eggpool-0.7.2}/CHANGELOG.md +0 -0
  18. {eggpool-0.7.1 → eggpool-0.7.2}/LICENSE +0 -0
  19. {eggpool-0.7.1 → eggpool-0.7.2}/README.md +0 -0
  20. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/README.md +0 -0
  21. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-background.md +0 -0
  22. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-catalog.md +0 -0
  23. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-control.md +0 -0
  24. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-core.md +0 -0
  25. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-dashboard.md +0 -0
  26. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-database.md +0 -0
  27. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-deployment.md +0 -0
  28. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-health.md +0 -0
  29. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-integrations.md +0 -0
  30. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-lifecycle.md +0 -0
  31. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-metrics.md +0 -0
  32. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-model-info.md +0 -0
  33. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-models.md +0 -0
  34. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-observability.md +0 -0
  35. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-providers.md +0 -0
  36. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-request-lifecycle.md +0 -0
  37. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-retry.md +0 -0
  38. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-routing.md +0 -0
  39. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-runtime.md +0 -0
  40. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-security.md +0 -0
  41. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/deep-dive-transcoder.md +0 -0
  42. {eggpool-0.7.1 → eggpool-0.7.2}/architecture/overview.md +0 -0
  43. {eggpool-0.7.1 → eggpool-0.7.2}/artifacts/plan-019-evidence.md +0 -0
  44. {eggpool-0.7.1 → eggpool-0.7.2}/artifacts/plan-020-evidence.md +0 -0
  45. {eggpool-0.7.1 → eggpool-0.7.2}/artifacts/plan-021-evidence.md +0 -0
  46. {eggpool-0.7.1 → eggpool-0.7.2}/artifacts/plan-023-baseline.md +0 -0
  47. {eggpool-0.7.1 → eggpool-0.7.2}/artifacts/plan-030-exact-head-evidence.md +0 -0
  48. {eggpool-0.7.1 → eggpool-0.7.2}/config-examples/claude-code.env +0 -0
  49. {eggpool-0.7.1 → eggpool-0.7.2}/config-examples/opencode.jsonc +0 -0
  50. {eggpool-0.7.1 → eggpool-0.7.2}/config.sbc.example.toml +0 -0
  51. {eggpool-0.7.1 → eggpool-0.7.2}/deploy/eggpool-logrotate.conf +0 -0
  52. {eggpool-0.7.1 → eggpool-0.7.2}/deploy/eggpool.service +0 -0
  53. {eggpool-0.7.1 → eggpool-0.7.2}/deploy/env.example +0 -0
  54. {eggpool-0.7.1 → eggpool-0.7.2}/docs/agent-configuration.md +0 -0
  55. {eggpool-0.7.1 → eggpool-0.7.2}/docs/api-reference.md +0 -0
  56. {eggpool-0.7.1 → eggpool-0.7.2}/docs/backup-restore.md +0 -0
  57. {eggpool-0.7.1 → eggpool-0.7.2}/docs/config-profiles.md +0 -0
  58. {eggpool-0.7.1 → eggpool-0.7.2}/docs/deployment.md +0 -0
  59. {eggpool-0.7.1 → eggpool-0.7.2}/docs/filesystem-layout.md +0 -0
  60. {eggpool-0.7.1 → eggpool-0.7.2}/docs/firewall.md +0 -0
  61. {eggpool-0.7.1 → eggpool-0.7.2}/docs/live-config-rehash.md +0 -0
  62. {eggpool-0.7.1 → eggpool-0.7.2}/docs/model-info-openrouter-debug.md +0 -0
  63. {eggpool-0.7.1 → eggpool-0.7.2}/docs/model-limits.md +0 -0
  64. {eggpool-0.7.1 → eggpool-0.7.2}/docs/network-diagnostics.md +0 -0
  65. {eggpool-0.7.1 → eggpool-0.7.2}/docs/opencode-stream-stability.md +0 -0
  66. {eggpool-0.7.1 → eggpool-0.7.2}/docs/operations/dispatch-stability.md +0 -0
  67. {eggpool-0.7.1 → eggpool-0.7.2}/docs/providers.md +0 -0
  68. {eggpool-0.7.1 → eggpool-0.7.2}/docs/proxy.md +0 -0
  69. {eggpool-0.7.1 → eggpool-0.7.2}/docs/raspberry-pi.md +0 -0
  70. {eggpool-0.7.1 → eggpool-0.7.2}/docs/releasing.md +0 -0
  71. {eggpool-0.7.1 → eggpool-0.7.2}/docs/runbooks/database-recovery.md +0 -0
  72. {eggpool-0.7.1 → eggpool-0.7.2}/docs/stateless-responses.md +0 -0
  73. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/__init__.py +0 -0
  74. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/admission_race_stress.py +0 -0
  75. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/bench_sqlite_writepath.py +0 -0
  76. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/check_database.py +0 -0
  77. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/debug_model_info_openrouter.sh +0 -0
  78. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/install.sh +0 -0
  79. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/install_prompt.py +0 -0
  80. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/repro_high_concurrency_streams.py +0 -0
  81. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/run_tests_with_timeout.py +0 -0
  82. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/smoke_test.py +0 -0
  83. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/test_model_info_identity.sh +0 -0
  84. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/validate_routing.py +0 -0
  85. {eggpool-0.7.1 → eggpool-0.7.2}/scripts/verify_upstream_auth.py +0 -0
  86. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/__init__.py +0 -0
  87. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/__main__.py +0 -0
  88. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/_share/.env.example +0 -0
  89. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/_share/config.sbc.example.toml +0 -0
  90. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/accounts/__init__.py +0 -0
  91. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/accounts/registry.py +0 -0
  92. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/accounts/state.py +0 -0
  93. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/__init__.py +0 -0
  94. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/backoff.py +0 -0
  95. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/chat_completions.py +0 -0
  96. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/errors.py +0 -0
  97. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/messages.py +0 -0
  98. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/model_info.py +0 -0
  99. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/models.py +0 -0
  100. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/network.py +0 -0
  101. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/proxy_request.py +0 -0
  102. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/responses.py +0 -0
  103. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/runtime.py +0 -0
  104. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/stats.py +0 -0
  105. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/api/update.py +0 -0
  106. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/app.py +0 -0
  107. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/auth.py +0 -0
  108. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/background/__init__.py +0 -0
  109. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/background/backup.py +0 -0
  110. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/background/cleanup.py +0 -0
  111. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/background/maintenance.py +0 -0
  112. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/__init__.py +0 -0
  113. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/_time.py +0 -0
  114. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/cache.py +0 -0
  115. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/capabilities.py +0 -0
  116. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/catalog_resolvers.py +0 -0
  117. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/fetcher.py +0 -0
  118. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/limits.py +0 -0
  119. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/normalizer.py +0 -0
  120. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/pricing.py +0 -0
  121. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/pricing_aliases.py +0 -0
  122. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/pricing_resolver.py +0 -0
  123. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/protocols.py +0 -0
  124. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/catalog/service.py +0 -0
  125. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cli.py +0 -0
  126. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cli_exit_codes.py +0 -0
  127. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cli_full.py +0 -0
  128. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cli_rehash_format.py +0 -0
  129. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cli_rehash_helper.py +0 -0
  130. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/config.py +0 -0
  131. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/config_reload_policy.py +0 -0
  132. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/config_utils.py +0 -0
  133. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/config_validation.py +0 -0
  134. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/constants.py +0 -0
  135. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/control/__init__.py +0 -0
  136. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/control/accepted_finalization.py +0 -0
  137. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/control/client.py +0 -0
  138. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/control/reload_manager.py +0 -0
  139. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/control/server.py +0 -0
  140. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cost_recompute.py +0 -0
  141. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/cost_repair.py +0 -0
  142. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/__init__.py +0 -0
  143. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/_resources.py +0 -0
  144. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/escape.py +0 -0
  145. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/render.py +0 -0
  146. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/routes.py +0 -0
  147. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/static/chart.umd.min.js +0 -0
  148. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/static/dashboard.css +0 -0
  149. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/static/dashboard.js +0 -0
  150. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/static/favicon.svg +0 -0
  151. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/telemetry.py +0 -0
  152. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/theme.py +0 -0
  153. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Booberry.toml +0 -0
  154. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Catppuccin Latte.toml +0 -0
  155. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Catppuccin Macchiato.toml +0 -0
  156. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Catppuccin Mocha.toml +0 -0
  157. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Cyber Red.toml +0 -0
  158. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Cyberpunk.toml +0 -0
  159. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Dark Green.toml +0 -0
  160. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Discord (80_ Saturation).toml +0 -0
  161. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Discord.toml +0 -0
  162. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Dracula.toml +0 -0
  163. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Ferra Light.toml +0 -0
  164. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Flexor Dark.toml +0 -0
  165. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Gruvbox.toml +0 -0
  166. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Halcyon Dark.toml +0 -0
  167. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/IntelliJ Light.toml +0 -0
  168. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Kanagawa.toml +0 -0
  169. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Macaw Dark.toml +0 -0
  170. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Macaw Light.toml +0 -0
  171. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Matrix.toml +0 -0
  172. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Noctis Lilac.toml +0 -0
  173. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Nord.toml +0 -0
  174. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Nostromo Terminal.toml +0 -0
  175. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/One Dark.toml +0 -0
  176. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Oxocarbon.toml +0 -0
  177. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Rose Pine Dawn.toml +0 -0
  178. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Rose Pine Moon.toml +0 -0
  179. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Rose Pine.toml +0 -0
  180. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Solarized Dark.toml +0 -0
  181. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Sonokai.toml +0 -0
  182. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Tokyo Night Storm.toml +0 -0
  183. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/VESPER.toml +0 -0
  184. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/Zenburn.toml +0 -0
  185. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/acton.toml +0 -0
  186. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/bam.toml +0 -0
  187. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/base16-atelier-forest-light.toml +0 -0
  188. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/berlin.toml +0 -0
  189. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/black but with important highlights.toml +0 -0
  190. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/broc.toml +0 -0
  191. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/cork.toml +0 -0
  192. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/ferra.toml +0 -0
  193. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/forest.toml +0 -0
  194. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/lisbon.toml +0 -0
  195. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/midnight.toml +0 -0
  196. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/oslo.toml +0 -0
  197. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/plum.toml +0 -0
  198. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/portland.toml +0 -0
  199. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/sunset.toml +0 -0
  200. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/tofino.toml +0 -0
  201. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/vanimo.toml +0 -0
  202. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/themes/vik.toml +0 -0
  203. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/dashboard/timeseries_buckets.py +0 -0
  204. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/__init__.py +0 -0
  205. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/connection.py +0 -0
  206. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/migrations.py +0 -0
  207. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/repositories.py +0 -0
  208. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/rollup_repository.py +0 -0
  209. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0001_initial.sql +0 -0
  210. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0002_indexes.sql +0 -0
  211. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0003_request_attempts.sql +0 -0
  212. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0004_integration_hardening.sql +0 -0
  213. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0005_price_microdollars.sql +0 -0
  214. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0006_correct_price_microdollars.sql +0 -0
  215. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0007_price_cache_rates.sql +0 -0
  216. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0008_proxy_request_identity.sql +0 -0
  217. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0009_model_protocol_source.sql +0 -0
  218. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0010_health_probe.sql +0 -0
  219. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0011_model_resolution_status.sql +0 -0
  220. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0012_drop_reservations_estimated_microdollars.sql +0 -0
  221. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0013_request_attempts_account_id_index.sql +0 -0
  222. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0014_bandwidth_tracking.sql +0 -0
  223. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0015_multi_provider.sql +0 -0
  224. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0016_requests_provider_id.sql +0 -0
  225. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0017_price_snapshots_provider_id.sql +0 -0
  226. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0018_provider_pings.sql +0 -0
  227. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0019_client_ip.sql +0 -0
  228. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0020_performance_indexes.sql +0 -0
  229. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0021_provider_model_metadata.sql +0 -0
  230. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0022_dashboard_indexes.sql +0 -0
  231. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0023_deprecated_model_placeholder.sql +0 -0
  232. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0024_account_backoffs.sql +0 -0
  233. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0025_stale_request_index.sql +0 -0
  234. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0026_attempt_observability.sql +0 -0
  235. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0027_routing_decisions.sql +0 -0
  236. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0028_operational_events.sql +0 -0
  237. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0029_latency_phases.sql +0 -0
  238. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0030_model_pricing_aliases.sql +0 -0
  239. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0031_price_snapshot_provenance.sql +0 -0
  240. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0032_usage_rollups.sql +0 -0
  241. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0033_request_provider_local_cost.sql +0 -0
  242. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0034_transcoding_daily.sql +0 -0
  243. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0035_routing_decision_score_components.sql +0 -0
  244. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0036_model_info.sql +0 -0
  245. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0037_model_info_failure_count.sql +0 -0
  246. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0038_model_info_phase5.sql +0 -0
  247. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0039_thinking_observability.sql +0 -0
  248. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0040_cache_token_observability.sql +0 -0
  249. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0041_canonical_request_segmentation.sql +0 -0
  250. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0042_observe_mode_compression_accounting.sql +0 -0
  251. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0043_safe_suffix_compression.sql +0 -0
  252. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0044_compression_policy_resolver.sql +0 -0
  253. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0045_synthetic_cache_controls.sql +0 -0
  254. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0046_closed_loop_threshold_tuning.sql +0 -0
  255. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0047_normalize_rollup_bucket_start.sql +0 -0
  256. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0048_request_cost_repairs.sql +0 -0
  257. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0049_model_info_match_evidence.sql +0 -0
  258. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0050_routing_decisions_retention_index.sql +0 -0
  259. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0051_model_quarantine.sql +0 -0
  260. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0052_catalog_refresh_state.sql +0 -0
  261. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0053_remove_attempt_status_analytics_index.sql +0 -0
  262. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/0054_model_quarantine_null_identity.sql +0 -0
  263. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/db/schema/checksums.json +0 -0
  264. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/deploy/__init__.py +0 -0
  265. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/deploy_user.py +0 -0
  266. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/errors.py +0 -0
  267. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/event_loop_lag.py +0 -0
  268. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/__init__.py +0 -0
  269. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/applier.py +0 -0
  270. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/classifier.py +0 -0
  271. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/effects.py +0 -0
  272. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/observation.py +0 -0
  273. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/quarantine.py +0 -0
  274. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/signal.py +0 -0
  275. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/failure/signal_extract.py +0 -0
  276. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/fastcli.py +0 -0
  277. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/generation_factory.py +0 -0
  278. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/health/__init__.py +0 -0
  279. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/health/backoff.py +0 -0
  280. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/health/circuit_breaker.py +0 -0
  281. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/health/health_manager.py +0 -0
  282. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/health/writable_probe.py +0 -0
  283. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/__init__.py +0 -0
  284. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/aider.py +0 -0
  285. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/cline.py +0 -0
  286. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/codex.py +0 -0
  287. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/common.py +0 -0
  288. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/continue_dev.py +0 -0
  289. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/goose.py +0 -0
  290. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/kilo.py +0 -0
  291. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/opencode.py +0 -0
  292. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/openhands.py +0 -0
  293. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/qwen_code.py +0 -0
  294. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/integrations/roo_code.py +0 -0
  295. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/jsonx.py +0 -0
  296. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/lifecycle/__init__.py +0 -0
  297. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/lifecycle/backup.py +0 -0
  298. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/lifecycle/uninstall.py +0 -0
  299. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/logging.py +0 -0
  300. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/metrics/__init__.py +0 -0
  301. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/metrics/buffer.py +0 -0
  302. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/metrics/failure_effects.py +0 -0
  303. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/metrics/thinking.py +0 -0
  304. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/__init__.py +0 -0
  305. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/dedup.py +0 -0
  306. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/identity.py +0 -0
  307. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/matching.py +0 -0
  308. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/normalization.py +0 -0
  309. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/presentation.py +0 -0
  310. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/repository.py +0 -0
  311. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/scheduler.py +0 -0
  312. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/service.py +0 -0
  313. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/__init__.py +0 -0
  314. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/artificial_analysis.py +0 -0
  315. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/base.py +0 -0
  316. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/huggingface.py +0 -0
  317. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/openrouter.py +0 -0
  318. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/sources/provider_catalog.py +0 -0
  319. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/model_info/types.py +0 -0
  320. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/models/__init__.py +0 -0
  321. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/models/api.py +0 -0
  322. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/models/database.py +0 -0
  323. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/models/domain.py +0 -0
  324. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/observability/__init__.py +0 -0
  325. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/observability/routing_trace_writer.py +0 -0
  326. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/onboard.py +0 -0
  327. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/__init__.py +0 -0
  328. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/_templates.toml +0 -0
  329. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/auth.py +0 -0
  330. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/client_pool.py +0 -0
  331. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/connect.py +0 -0
  332. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/contract.py +0 -0
  333. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/outbound.py +0 -0
  334. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/providers/pproxy_transport.py +0 -0
  335. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/__init__.py +0 -0
  336. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/client.py +0 -0
  337. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/cost_reporting.py +0 -0
  338. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/normalized_usage.py +0 -0
  339. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/sse.py +0 -0
  340. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/sse_observer.py +0 -0
  341. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/proxy/usage.py +0 -0
  342. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/py.typed +0 -0
  343. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/quota/__init__.py +0 -0
  344. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/quota/audit.py +0 -0
  345. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/quota/estimation.py +0 -0
  346. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/quota/reservation.py +0 -0
  347. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/quota/scorer.py +0 -0
  348. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/reload_diagnostics.py +0 -0
  349. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/reload_transaction.py +0 -0
  350. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/__init__.py +0 -0
  351. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/attempt_finalizer.py +0 -0
  352. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/backoff_persistence.py +0 -0
  353. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/body.py +0 -0
  354. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/claim_lifecycle.py +0 -0
  355. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/coordinator.py +0 -0
  356. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/failure_helpers.py +0 -0
  357. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/finalization_job.py +0 -0
  358. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/finalizer.py +0 -0
  359. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/limits.py +0 -0
  360. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/parsed_payload.py +0 -0
  361. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/parsed_upstream_response.py +0 -0
  362. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/payload_utils.py +0 -0
  363. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/response_handoff.py +0 -0
  364. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/routing_helpers.py +0 -0
  365. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/routing_trace_guard.py +0 -0
  366. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/selection_claim_diagnostics.py +0 -0
  367. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/static_helpers.py +0 -0
  368. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/stream_completion.py +0 -0
  369. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/stream_diagnostics.py +0 -0
  370. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/terminal_status.py +0 -0
  371. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/thinking_adaptation.py +0 -0
  372. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/transform_pipeline.py +0 -0
  373. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/upstream_execution.py +0 -0
  374. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/upstream_helpers.py +0 -0
  375. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/request/usage_helpers.py +0 -0
  376. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/retry/__init__.py +0 -0
  377. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/retry/classification.py +0 -0
  378. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/__init__.py +0 -0
  379. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/config.py +0 -0
  380. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/eligibility.py +0 -0
  381. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/fairness.py +0 -0
  382. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/provider.py +0 -0
  383. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/routing/router.py +0 -0
  384. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime.py +0 -0
  385. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_dispatch.py +0 -0
  386. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_manager.py +0 -0
  387. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_metrics.py +0 -0
  388. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_paths.py +0 -0
  389. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_task_inventory.py +0 -0
  390. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/runtime_tasks.py +0 -0
  391. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/security/__init__.py +0 -0
  392. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/security/redaction.py +0 -0
  393. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/__init__.py +0 -0
  394. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/cache_metrics.py +0 -0
  395. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/dashboard_explain.py +0 -0
  396. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/grouped_timeseries.py +0 -0
  397. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/queries.py +0 -0
  398. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/segmentation.py +0 -0
  399. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/service.py +0 -0
  400. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/stats/transcoding.py +0 -0
  401. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/toml_edit.py +0 -0
  402. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/__init__.py +0 -0
  403. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/anthropic_to_openai.py +0 -0
  404. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/budget_resolver.py +0 -0
  405. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/cache_stability.py +0 -0
  406. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/cache_translation.py +0 -0
  407. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/context.py +0 -0
  408. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/errors.py +0 -0
  409. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/ids.py +0 -0
  410. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/json_helpers.py +0 -0
  411. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/openai_to_anthropic.py +0 -0
  412. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/prepared.py +0 -0
  413. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/protocol.py +0 -0
  414. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/provider_adaptation.py +0 -0
  415. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/sensitive_media.py +0 -0
  416. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/static_headers.py +0 -0
  417. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/streaming.py +0 -0
  418. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/transcoder/usage.py +0 -0
  419. {eggpool-0.7.1 → eggpool-0.7.2}/src/eggpool/update_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: eggpool
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: A lightweight proxy that aggregates multiple LLM provider accounts behind an OpenAI Chat Completions-compatible endpoint
5
5
  Project-URL: Homepage, https://github.com/eggstack/eggpool
6
6
  Project-URL: Repository, https://github.com/eggstack/eggpool
@@ -109,6 +109,11 @@ catalog_withdrawal_policy = "preserve_until_health"
109
109
  loss_policy = "warn" # "warn" or "reject" for loss-of-information
110
110
  prefer_native = true # prefer native-protocol accounts in routing
111
111
 
112
+ # Thinking/reasoning transcoding is enabled by default. Set this to false to
113
+ # drop thinking controls and content instead of translating them.
114
+ # [transcoder.features]
115
+ # thinking = false
116
+
112
117
  # Global effort→budget token mapping for thinking/reasoning.
113
118
  # Values are used when the model's capability does not carry a
114
119
  # per-model effort_to_budget_tokens mapping.
@@ -449,7 +454,8 @@ enabled = false
449
454
  # header = "Authorization"
450
455
  # scheme = "Bearer"
451
456
  #
452
- # # OpenCode Go exposes low/medium/high thinking controls for mimo-v2.5.
457
+ # # OpenCode Go exposes low/medium/high thinking controls for mimo-v2.5 and
458
+ # # minimal/low/medium/high/xhigh for muse-spark-1.2-contributor.
453
459
  # [providers.opencode-go.model_capabilities."mimo-v2.5".thinking]
454
460
  # status = "supported"
455
461
  # source = "provider_catalog"
@@ -28,16 +28,19 @@ Status values (`CapabilityStatus`):
28
28
 
29
29
  Source: `src/eggpool/catalog/capabilities.py:36-44`
30
30
 
31
- ## 2. Enabling Thinking Transcoding
31
+ ## 2. Thinking Transcoding
32
32
 
33
- Thinking transcoding is **off by default**. The feature gate lives in `[transcoder.features]`:
33
+ Thinking transcoding is **enabled by default**. No configuration is required.
34
+ To disable it, set the feature gate in `[transcoder.features]`:
34
35
 
35
36
  ```toml
36
37
  [transcoder.features]
37
- thinking = true
38
+ thinking = false
38
39
  ```
39
40
 
40
- When `thinking = false` (the default), the transcoder **drops** thinking-related fields with a structured `reasoning_content_dropped` warning rather than forwarding them. Specifically:
41
+ When `thinking = false`, the transcoder **drops** thinking-related fields with a
42
+ structured `reasoning_content_dropped` warning rather than forwarding them.
43
+ Specifically:
41
44
 
42
45
  - **OpenAI → Anthropic**: `reasoning_content` in assistant messages is dropped.
43
46
  - **Anthropic → OpenAI**: `thinking` content blocks are dropped.
@@ -63,7 +66,7 @@ Source: `src/eggpool/transcoder/policy.py:217-225`
63
66
 
64
67
  ```toml
65
68
  [transcoder.features]
66
- thinking = true # Enable thinking/reasoning transcoding (default: false)
69
+ thinking = true # Enable thinking/reasoning transcoding (default: true)
67
70
  ```
68
71
 
69
72
  ### Budget Defaults
@@ -500,9 +503,10 @@ Source: `src/eggpool/metrics/thinking.py`, `src/eggpool/api/stats.py:452-463`, `
500
503
 
501
504
  **Symptoms:** Client sends `reasoning_effort` but the upstream receives no thinking controls.
502
505
 
503
- **Cause:** Thinking transcoding is disabled. The feature gate `[transcoder.features]` defaults to `thinking = false`.
506
+ **Cause:** Thinking transcoding was explicitly disabled with
507
+ `[transcoder.features].thinking = false`.
504
508
 
505
- **Fix:** Enable the feature:
509
+ **Fix:** Remove the override or enable the feature:
506
510
 
507
511
  ```toml
508
512
  [transcoder.features]
@@ -562,7 +566,7 @@ native_protocols = ["anthropic"]
562
566
 
563
567
  **Cause:** Thinking transcoding is likely disabled for streaming. The feature gate affects both streaming and non-streaming paths.
564
568
 
565
- **Fix:** Ensure `[transcoder.features] thinking = true` is set. Check `[transcoder.openai_reasoning_fields]` to verify the streaming delta field name matches your client's expectations (default: `"reasoning"`).
569
+ **Fix:** Remove the disabling override or ensure `[transcoder.features] thinking = true` is set. Check `[transcoder.openai_reasoning_fields]` to verify the streaming delta field name matches your client's expectations (default: `"reasoning"`).
566
570
 
567
571
  ---
568
572
 
@@ -59,8 +59,8 @@ prefer_native = true
59
59
  tools = true
60
60
  # Image / document content parts (default: false)
61
61
  vision = false
62
- # Extended thinking blocks ↔ reasoning_content (default: false)
63
- thinking = false
62
+ # Extended thinking blocks ↔ reasoning_content (default: true)
63
+ thinking = true
64
64
  # OpenAI response_format / json_schema coercion (default: false)
65
65
  structured_outputs = false
66
66
  # Anthropic-only primitives explicit handling (default: false)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eggpool"
3
- version = "0.7.1"
3
+ version = "0.7.2"
4
4
  description = "A lightweight proxy that aggregates multiple LLM provider accounts behind an OpenAI Chat Completions-compatible endpoint"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -104,6 +104,11 @@ catalog_withdrawal_policy = "preserve_until_health"
104
104
  loss_policy = "warn" # "warn" or "reject" for loss-of-information
105
105
  prefer_native = true # prefer native-protocol accounts in routing
106
106
 
107
+ # Thinking/reasoning transcoding is enabled by default. Set this to false to
108
+ # drop thinking controls and content instead of translating them.
109
+ # [transcoder.features]
110
+ # thinking = false
111
+
107
112
  # Global effort→budget token mapping for thinking/reasoning.
108
113
  # Values are used when the model's capability does not carry a
109
114
  # per-model effort_to_budget_tokens mapping.
@@ -435,7 +440,8 @@ enabled = false
435
440
  # header = "Authorization"
436
441
  # scheme = "Bearer"
437
442
  #
438
- # # OpenCode Go exposes low/medium/high thinking controls for mimo-v2.5.
443
+ # # OpenCode Go exposes low/medium/high thinking controls for mimo-v2.5 and
444
+ # # minimal/low/medium/high/xhigh for muse-spark-1.2-contributor.
439
445
  # [providers.opencode-go.model_capabilities."mimo-v2.5".thinking]
440
446
  # status = "supported"
441
447
  # source = "provider_catalog"
@@ -914,4 +920,3 @@ protocol = "anthropic"
914
920
 
915
921
  [model_overrides."claude-sonnet-4"]
916
922
  protocol = "anthropic"
917
-
@@ -21,6 +21,7 @@ MODELS_DEV_BASE_URL = "https://models.dev"
21
21
  OPENCODE_GO_MODELS_DEV_PROVIDER_ID = "opencode-go"
22
22
  OPENCODE_COMPATIBLE_EFFORTS = ["low", "medium", "high"]
23
23
  _EFFORT_BUDGET_DEFAULTS = {
24
+ "minimal": 1024,
24
25
  "low": 1024,
25
26
  "medium": 4096,
26
27
  "high": 16384,
@@ -116,6 +117,33 @@ def derive_opencode_go_supported_efforts(
116
117
  """
117
118
  if metadata.get("reasoning") is not True:
118
119
  return []
120
+
121
+ # models.dev mirrors OpenCode's provider catalog and can carry the exact
122
+ # effort set for newer models. Prefer it when present so newly released
123
+ # levels (for example Muse Spark's ``xhigh``) are not silently dropped.
124
+ reasoning_options = metadata.get("reasoning_options")
125
+ if isinstance(reasoning_options, list):
126
+ efforts: list[str] = []
127
+ for option in cast("list[object]", reasoning_options):
128
+ if not isinstance(option, dict):
129
+ continue
130
+ option_dict = cast("dict[str, object]", option)
131
+ if option_dict.get("type") != "effort":
132
+ continue
133
+ values = option_dict.get("values")
134
+ if not isinstance(values, list):
135
+ continue
136
+ for value in cast("list[object]", values):
137
+ if not isinstance(value, str):
138
+ continue
139
+ effort = value.strip().lower()
140
+ if effort == "med":
141
+ effort = "medium"
142
+ if effort and effort not in efforts:
143
+ efforts.append(effort)
144
+ if efforts:
145
+ return efforts
146
+
119
147
  lowered = model_id.lower()
120
148
  if "deepseek-v4" in lowered:
121
149
  return [*OPENCODE_COMPATIBLE_EFFORTS, "max"]
@@ -1174,31 +1174,64 @@ class ModelCapabilitiesOverrideConfig(BaseModel):
1174
1174
 
1175
1175
 
1176
1176
  _OPENCODE_GO_BASE_URL = "https://opencode.ai/zen/go/v1"
1177
- _OPENCODE_GO_THINKING_MODELS: frozenset[str] = frozenset({"mimo-v2.5", "minimax-m3"})
1177
+ _OPENCODE_GO_THINKING_MODELS: frozenset[str] = frozenset(
1178
+ {"mimo-v2.5", "minimax-m3", "muse-spark-1.2-contributor"}
1179
+ )
1180
+ _OPENCODE_GO_THINKING_EFFORTS: dict[str, list[str]] = {
1181
+ "muse-spark-1.2-contributor": ["minimal", "low", "medium", "high", "xhigh"],
1182
+ }
1183
+ _OPENCODE_GO_EFFORT_BUDGETS: dict[str, int] = {
1184
+ "minimal": 1024,
1185
+ "low": 1024,
1186
+ "med": 4096,
1187
+ "medium": 4096,
1188
+ "high": 16384,
1189
+ "xhigh": 24576,
1190
+ }
1178
1191
 
1179
1192
 
1180
1193
  def _default_opencode_go_thinking_capabilities() -> dict[
1181
1194
  str, ModelCapabilitiesOverrideConfig
1182
1195
  ]:
1183
1196
  """Return built-in capability metadata for the canonical OpenCode Go host."""
1184
- return {
1185
- model_id: ModelCapabilitiesOverrideConfig(
1197
+ model_efforts = {
1198
+ model_id: _OPENCODE_GO_THINKING_EFFORTS.get(
1199
+ model_id,
1200
+ ["low", "medium", "high"],
1201
+ )
1202
+ for model_id in _OPENCODE_GO_THINKING_MODELS
1203
+ }
1204
+ result: dict[str, ModelCapabilitiesOverrideConfig] = {}
1205
+ for model_id, efforts in model_efforts.items():
1206
+ effort_to_budget = {
1207
+ effort: _OPENCODE_GO_EFFORT_BUDGETS[effort]
1208
+ for effort in efforts
1209
+ if effort in _OPENCODE_GO_EFFORT_BUDGETS
1210
+ }
1211
+ # Keep the historical ``med`` alias for the original built-in
1212
+ # contracts. Muse's advertised set uses the canonical ``medium``.
1213
+ if model_id != "muse-spark-1.2-contributor":
1214
+ effort_to_budget["med"] = _OPENCODE_GO_EFFORT_BUDGETS["med"]
1215
+ result[model_id] = ModelCapabilitiesOverrideConfig(
1186
1216
  thinking=ThinkingCapabilityOverrideConfig(
1187
1217
  status="supported",
1188
1218
  source="provider_catalog",
1189
- native_protocols=["openai", "anthropic"],
1190
- supported_efforts=["low", "medium", "high"],
1191
- effort_to_budget_tokens={
1192
- "low": 1024,
1193
- "med": 4096,
1194
- "medium": 4096,
1195
- "high": 16384,
1196
- },
1197
- notes="OpenCode Go exposes low/medium/high thinking controls.",
1219
+ native_protocols=(
1220
+ ["anthropic"]
1221
+ if model_id == "muse-spark-1.2-contributor"
1222
+ else ["openai", "anthropic"]
1223
+ ),
1224
+ supported_efforts=efforts,
1225
+ effort_to_budget_tokens=effort_to_budget,
1226
+ notes=(
1227
+ "OpenCode Go exposes minimal/low/medium/high/xhigh thinking "
1228
+ "controls."
1229
+ if model_id == "muse-spark-1.2-contributor"
1230
+ else "OpenCode Go exposes low/medium/high thinking controls."
1231
+ ),
1198
1232
  )
1199
1233
  )
1200
- for model_id in _OPENCODE_GO_THINKING_MODELS
1201
- }
1234
+ return result
1202
1235
 
1203
1236
 
1204
1237
  def _provider_is_canonical_opencode_go(provider: ProviderConfig) -> bool:
@@ -162,6 +162,28 @@ class ProviderBoundRequest:
162
162
  _serialized_generation: int | None = field(default=None, repr=False)
163
163
  _frozen: bool = field(default=False, repr=False)
164
164
 
165
+ def __post_init__(self) -> None:
166
+ """Normalize EggPool's provider namespace out of the model field.
167
+
168
+ The public ``/v1/models`` surface exposes provider-scoped IDs such as
169
+ ``minimax-m3/opencode-go``. That suffix belongs to EggPool's routing
170
+ namespace; upstream providers only receive the base model ID. Keep
171
+ this invariant on the shared provider-bound object so native requests
172
+ (which do not run a transcode preflight) are protected as well as
173
+ translated and legacy requests.
174
+
175
+ ``client_payload`` remains untouched so the original client request
176
+ is still available for diagnostics and response adaptation.
177
+ """
178
+ model_value = self.client_payload.get("model")
179
+ if not isinstance(model_value, str) or not self.model_id:
180
+ return
181
+ if not model_value.startswith(f"{self.model_id}/"):
182
+ return
183
+ normalized = dict(self.client_payload)
184
+ normalized["model"] = self.model_id
185
+ self.set_provider_payload(normalized, increment_generation=False)
186
+
165
187
  @property
166
188
  def provider_payload(self) -> Mapping[str, Any]:
167
189
  """Return the decoded provider-bound payload.
@@ -61,6 +61,48 @@ class BuiltinProviderContract:
61
61
  contract: ThinkingControlContract
62
62
 
63
63
 
64
+ # ---------------------------------------------------------------------------
65
+ # OpenCode Go Muse Spark 1.2 Contributor contract
66
+ # ---------------------------------------------------------------------------
67
+ # The OpenCode Go model list does not include capability metadata, so this
68
+ # endpoint needs a curated contract for the Anthropic Messages path. The
69
+ # effort vocabulary is mirrored from the current models.dev/OpenCode model
70
+ # record, including the newer ``minimal`` and ``xhigh`` levels.
71
+ _OPENCODE_GO_MUSE_CONTRACT = BuiltinProviderContract(
72
+ key=ProviderContractKey(
73
+ provider_id_pattern=r"^opencode-go$",
74
+ model_id_pattern=r"^muse-spark-1\.2-contributor$",
75
+ protocol="anthropic",
76
+ priority=10,
77
+ ),
78
+ contract=ThinkingControlContract(
79
+ mode="effort_or_budget",
80
+ request_fields=["thinking", "reasoning_effort"],
81
+ accepted_efforts=["minimal", "low", "medium", "high", "xhigh"],
82
+ effort_to_budget_tokens={
83
+ "minimal": 1024,
84
+ "low": 1024,
85
+ "medium": 4096,
86
+ "high": 16384,
87
+ "xhigh": 24576,
88
+ },
89
+ explicit_budget_min=1024,
90
+ explicit_budget_max=131072,
91
+ historical_reasoning_content="accepted",
92
+ source="provider_catalog",
93
+ ),
94
+ )
95
+
96
+ _OPENCODE_GO_MUSE_URL_COMPAT_CONTRACT = BuiltinProviderContract(
97
+ key=ProviderContractKey(
98
+ provider_base_url_pattern=r".*opencode\.ai/zen/go/v1.*",
99
+ model_id_pattern=r"^muse-spark-1\.2-contributor$",
100
+ protocol="anthropic",
101
+ priority=10,
102
+ ),
103
+ contract=_OPENCODE_GO_MUSE_CONTRACT.contract,
104
+ )
105
+
64
106
  # ---------------------------------------------------------------------------
65
107
  # OpenCode Go MiniMax-M3 contract
66
108
  # ---------------------------------------------------------------------------
@@ -171,6 +213,8 @@ _OPENAI_NATIVE_CONTRACT = BuiltinProviderContract(
171
213
 
172
214
  # All built-in contracts, in declaration order (used for iteration).
173
215
  BUILTIN_CONTRACTS: tuple[BuiltinProviderContract, ...] = (
216
+ _OPENCODE_GO_MUSE_CONTRACT,
217
+ _OPENCODE_GO_MUSE_URL_COMPAT_CONTRACT,
174
218
  _OPENCODE_GO_MINIMAX_CONTRACT,
175
219
  _MINIMAX_NATIVE_CONTRACT,
176
220
  _OPENCODE_GO_URL_COMPAT_CONTRACT,
@@ -97,12 +97,14 @@ class CapabilityPolicy(BaseModel):
97
97
 
98
98
 
99
99
  class TranscoderFeatures(BaseModel):
100
- """Per-feature opt-in flags for Phase 6 sub-phases.
101
-
102
- Optional semantic extensions are **off** by default. Tool calling is
103
- baseline protocol compatibility and is always translated when a
104
- cross-protocol request is selected; its legacy ``tools`` switch is kept
105
- only so old configuration files continue to parse.
100
+ """Per-feature flags for Phase 6 sub-phases.
101
+
102
+ Thinking is enabled by default because it is part of the supported
103
+ cross-protocol reasoning path. Other optional semantic extensions remain
104
+ off by default. Tool calling is baseline protocol compatibility and is
105
+ always translated when a cross-protocol request is selected; its legacy
106
+ ``tools`` switch is kept only so old configuration files continue to
107
+ parse.
106
108
  """
107
109
 
108
110
  model_config = ConfigDict(extra="forbid")
@@ -123,11 +125,12 @@ class TranscoderFeatures(BaseModel):
123
125
  ),
124
126
  )
125
127
  thinking: bool = Field(
126
- default=False,
128
+ default=True,
127
129
  description=(
128
130
  "Extended thinking / reasoning blocks. When enabled, Anthropic "
129
131
  "thinking blocks are translated to OpenAI reasoning_content and "
130
- "vice versa."
132
+ "vice versa. Enabled by default; set false to drop thinking "
133
+ "controls and content."
131
134
  ),
132
135
  )
133
136
  structured_outputs: bool = Field(
@@ -277,8 +280,8 @@ class TranscoderPolicy(BaseModel):
277
280
  features: TranscoderFeatures = Field(
278
281
  default_factory=TranscoderFeatures,
279
282
  description=(
280
- "Per-feature opt-in flags for Phase 6 sub-phases. Each flag "
281
- "defaults to false; enable individual features as needed."
283
+ "Per-feature flags for Phase 6 sub-phases. Thinking is enabled "
284
+ "by default; other optional features remain opt-in."
282
285
  ),
283
286
  )
284
287
 
@@ -178,7 +178,7 @@ toml = [
178
178
 
179
179
  [[package]]
180
180
  name = "eggpool"
181
- version = "0.7.1"
181
+ version = "0.7.2"
182
182
  source = { editable = "." }
183
183
  dependencies = [
184
184
  { name = "aiosqlite" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes