langgraph-api 0.7.76__tar.gz → 0.7.77__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 (283) hide show
  1. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/PKG-INFO +1 -1
  2. langgraph_api-0.7.77/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/runs.py +8 -0
  4. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/__init__.py +7 -1
  5. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/graph.py +12 -5
  6. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/client.mts +8 -2
  7. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/graph.mts +12 -7
  8. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/http_logger.py +18 -1
  9. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/route.py +6 -0
  10. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/stream.py +1 -0
  11. langgraph_api-0.7.76/langgraph_api/__init__.py +0 -1
  12. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/.gitignore +0 -0
  13. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/LICENSE +0 -0
  14. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/Makefile +0 -0
  15. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/README.md +0 -0
  16. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/.gitignore +0 -0
  17. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/Makefile +0 -0
  18. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/README.md +0 -0
  19. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/assistant.js +0 -0
  20. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/benchmark-runner.js +0 -0
  21. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/benchmarks.js +0 -0
  22. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/stream_write.js +0 -0
  23. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/thread.js +0 -0
  24. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/wait_write.js +0 -0
  25. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/burst.js +0 -0
  26. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_dd_report.py +0 -0
  27. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_k6.js +0 -0
  28. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_runner.mjs +0 -0
  29. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_slack_report.py +0 -0
  30. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_urls.mjs +0 -0
  31. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/clean-cli.js +0 -0
  32. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/clean.js +0 -0
  33. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/README.md +0 -0
  34. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/pyproject.toml +0 -0
  35. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/runner.py +0 -0
  36. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/uv.lock +0 -0
  37. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/graphs.js +0 -0
  38. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/mixed_workload_k6.js +0 -0
  39. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/mixed_workload_runner.mjs +0 -0
  40. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/package.json +0 -0
  41. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/ramp.js +0 -0
  42. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/dd_reporting.py +0 -0
  43. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/slack_slowest_runs.py +0 -0
  44. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/slack_summary.py +0 -0
  45. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/run_local.sh +0 -0
  46. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/staircase.py +0 -0
  47. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/staircase_step_k6.js +0 -0
  48. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/update-revision.js +0 -0
  49. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/weather.js +0 -0
  50. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/constraints.txt +0 -0
  51. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/custom_store.sql +0 -0
  52. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/forbidden.txt +0 -0
  53. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/hatch_build.py +0 -0
  54. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/healthcheck.py +0 -0
  55. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  56. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/__init__.py +0 -0
  57. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/_adapter.py +0 -0
  58. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/protocol.py +0 -0
  59. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_factory_utils.py +0 -0
  60. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/__init__.py +0 -0
  61. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/a2a.py +0 -0
  62. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/assistants.py +0 -0
  63. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/__init__.py +0 -0
  64. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_constants.py +0 -0
  65. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_handlers.py +0 -0
  66. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_models.py +0 -0
  67. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_routes.py +0 -0
  68. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  69. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/meta.py +0 -0
  70. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/openapi.py +0 -0
  71. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/profile.py +0 -0
  72. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/store.py +0 -0
  73. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/threads.py +0 -0
  74. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/ui.py +0 -0
  75. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/asgi_transport.py +0 -0
  76. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/asyncio.py +0 -0
  77. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/__init__.py +0 -0
  78. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/custom.py +0 -0
  79. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/errors.py +0 -0
  80. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/__init__.py +0 -0
  81. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/backend.py +0 -0
  82. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/client.py +0 -0
  83. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/middleware.py +0 -0
  84. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/noop.py +0 -0
  85. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/studio_user.py +0 -0
  86. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cache.py +0 -0
  87. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cli.py +0 -0
  88. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/command.py +0 -0
  89. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/_parse.py +0 -0
  90. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/schemas.py +0 -0
  91. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cron_scheduler.py +0 -0
  92. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/__init__.py +0 -0
  93. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/aes_json.py +0 -0
  94. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/context.py +0 -0
  95. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/custom.py +0 -0
  96. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/middleware.py +0 -0
  97. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/shared.py +0 -0
  98. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/errors.py +0 -0
  99. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/executor_entrypoint.py +0 -0
  100. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/feature_flags.py +0 -0
  101. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/__init__.py +0 -0
  102. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/client.py +0 -0
  103. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  104. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/__init__.py +0 -0
  105. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/assistants.py +0 -0
  106. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/cache.py +0 -0
  107. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/crons.py +0 -0
  108. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/runs.py +0 -0
  109. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/threads.py +0 -0
  110. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/server.py +0 -0
  111. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/__init__.py +0 -0
  112. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  113. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/encryption.py +0 -0
  114. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http.py +0 -0
  115. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http_metrics.py +0 -0
  116. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http_metrics_utils.py +0 -0
  117. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/.gitignore +0 -0
  118. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/.prettierrc +0 -0
  119. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/__init__.py +0 -0
  120. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/base.py +0 -0
  121. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/build.mts +0 -0
  122. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/client.http.mts +0 -0
  123. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/errors.py +0 -0
  124. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/global.d.ts +0 -0
  125. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/package.json +0 -0
  126. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/remote.py +0 -0
  127. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/schema.py +0 -0
  128. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/load.hooks.mjs +0 -0
  129. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/preload.mjs +0 -0
  130. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/files.mts +0 -0
  131. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/importMap.mts +0 -0
  132. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  133. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/serde.mts +0 -0
  134. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/sse.py +0 -0
  135. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/traceblock.mts +0 -0
  136. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/tsconfig.json +0 -0
  137. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/ui.py +0 -0
  138. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/yarn.lock +0 -0
  139. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/logging.py +0 -0
  140. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/metadata.py +0 -0
  141. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/__init__.py +0 -0
  142. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/ensure_store.py +0 -0
  143. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/private_network.py +0 -0
  144. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/request_id.py +0 -0
  145. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/models/__init__.py +0 -0
  146. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/models/run.py +0 -0
  147. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/otel_context.py +0 -0
  148. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/patch.py +0 -0
  149. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/queue_entrypoint.py +0 -0
  150. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/schema.py +0 -0
  151. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/self_hosted_logs.py +0 -0
  152. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/self_hosted_metrics.py +0 -0
  153. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/serde.py +0 -0
  154. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/server.py +0 -0
  155. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/sse.py +0 -0
  156. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/state.py +0 -0
  157. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/store.py +0 -0
  158. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/__init__.py +0 -0
  159. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/profiler.py +0 -0
  160. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/timer.py +0 -0
  161. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/traceblock.py +0 -0
  162. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/tunneling/cloudflare.py +0 -0
  163. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/__init__.py +0 -0
  164. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/cache.py +0 -0
  165. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/config.py +0 -0
  166. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/errors.py +0 -0
  167. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/extract.py +0 -0
  168. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/future.py +0 -0
  169. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/headers.py +0 -0
  170. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/retriable_client.py +0 -0
  171. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/stream_codec.py +0 -0
  172. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/uuids.py +0 -0
  173. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/validation.py +0 -0
  174. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/webhook.py +0 -0
  175. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/worker.py +0 -0
  176. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/__init__.py +0 -0
  177. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/checkpointer.py +0 -0
  178. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/__init__.py +0 -0
  179. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/_compat.py +0 -0
  180. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/channel.py +0 -0
  181. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  182. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/config.py +0 -0
  183. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/durability.py +0 -0
  184. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/exception.py +0 -0
  185. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/graph.py +0 -0
  186. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/interrupt.py +0 -0
  187. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/messages.py +0 -0
  188. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
  189. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/runopts.py +0 -0
  190. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
  191. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/struct.py +0 -0
  192. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/task.py +0 -0
  193. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/value.py +0 -0
  194. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/__init__.py +0 -0
  195. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  196. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  197. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  198. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  199. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  200. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  201. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  202. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  203. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  204. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  205. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  206. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  207. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
  208. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
  209. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
  210. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
  211. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  212. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  213. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  214. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  215. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  216. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  217. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  218. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  219. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  220. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  221. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  222. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  223. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  224. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  225. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  226. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  227. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  228. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  229. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  230. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  231. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  232. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  233. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  234. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  235. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  236. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  237. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  238. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
  240. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
  241. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
  242. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  244. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  245. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  246. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  248. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  249. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  250. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  252. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  253. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  254. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  256. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  257. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  258. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
  260. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
  261. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
  262. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/sanitize.py +0 -0
  264. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/serde.py +0 -0
  265. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_license/__init__.py +0 -0
  266. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_license/validation.py +0 -0
  267. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/__init__.py +0 -0
  268. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/checkpoint.py +0 -0
  269. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/database.py +0 -0
  270. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/lifespan.py +0 -0
  271. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/metrics.py +0 -0
  272. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/ops.py +0 -0
  273. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/queue.py +0 -0
  274. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/retry.py +0 -0
  275. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/routes.py +0 -0
  276. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/store.py +0 -0
  277. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/logging.json +0 -0
  278. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/openapi.json +0 -0
  279. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/pyproject.toml +0 -0
  280. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/build_wheel.py +0 -0
  281. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/create_license.py +0 -0
  282. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/run_a2a_tck.py +0 -0
  283. {langgraph_api-0.7.76 → langgraph_api-0.7.77}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.7.76
3
+ Version: 0.7.77
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -0,0 +1 @@
1
+ __version__ = "0.7.77"
@@ -309,6 +309,8 @@ async def stream_run(
309
309
  await sub.__aexit__(None, None, None)
310
310
  raise
311
311
 
312
+ request.scope["run_id"] = str(run["run_id"])
313
+
312
314
  async def body():
313
315
  try:
314
316
  async for event, message, stream_id in Runs.Stream.join(
@@ -358,6 +360,8 @@ async def stream_run_stateless(
358
360
  await sub.__aexit__(None, None, None)
359
361
  raise
360
362
 
363
+ request.scope["run_id"] = str(run["run_id"])
364
+
361
365
  async def body():
362
366
  try:
363
367
  async for event, message, stream_id in Runs.Stream.join(
@@ -404,6 +408,8 @@ async def wait_run(request: ApiRequest):
404
408
  await sub.__aexit__(None, None, None)
405
409
  raise
406
410
 
411
+ request.scope["run_id"] = str(run["run_id"])
412
+
407
413
  body = _run_result_body(
408
414
  run_id=run["run_id"],
409
415
  thread_id=run["thread_id"],
@@ -448,6 +454,8 @@ async def wait_run_stateless(request: ApiRequest):
448
454
  await sub.__aexit__(None, None, None)
449
455
  raise
450
456
 
457
+ request.scope["run_id"] = str(run["run_id"])
458
+
451
459
  async def stateless_fallback() -> bytes:
452
460
  await logger.awarning(
453
461
  "No checkpoint emitted for stateless run",
@@ -142,7 +142,12 @@ See https://developer.chrome.com/blog/private-network-access-update-2024-03
142
142
  # gRPC client pool size for persistence server.
143
143
  GRPC_CLIENT_POOL_SIZE = env("GRPC_CLIENT_POOL_SIZE", cast=int, default=5)
144
144
 
145
- # gRPC message size limits (100MB default)
145
+ # HTTP request body size limit (default matches gRPC limits: 300MB)
146
+ HTTP_MAX_REQUEST_BODY_BYTES = env(
147
+ "HTTP_MAX_REQUEST_BODY_BYTES", cast=int, default=300 * 1024 * 1024
148
+ )
149
+
150
+ # gRPC message size limits (300MB default)
146
151
  LSD_GRPC_SERVER_MAX_RECV_MSG_BYTES = env(
147
152
  "LSD_GRPC_SERVER_MAX_RECV_MSG_BYTES", cast=int, default=300 * 1024 * 1024
148
153
  )
@@ -502,6 +507,7 @@ __all__ = [
502
507
  "GRPC_CLIENT_MAX_SEND_MSG_BYTES",
503
508
  "GRPC_CLIENT_POOL_SIZE",
504
509
  "HTTP_CONFIG",
510
+ "HTTP_MAX_REQUEST_BODY_BYTES",
505
511
  "IS_EXECUTOR_ENTRYPOINT",
506
512
  "IS_QUEUE_ENTRYPOINT",
507
513
  "JSON_THREAD_POOL_MINIMUM_SIZE_BYTES",
@@ -143,6 +143,7 @@ def _log_slow_graph_generation(
143
143
  start: float,
144
144
  value_type: str,
145
145
  graph_id: str,
146
+ run_id: str | None = None,
146
147
  warn_threshold_ms: float = 100,
147
148
  error_threshold_ms: float = 250,
148
149
  ) -> None:
@@ -164,14 +165,19 @@ def _log_slow_graph_generation(
164
165
  elapsed_ms=elapsed_ms_rounded,
165
166
  value_type=value_type,
166
167
  graph_id=graph_id,
168
+ run_id=run_id,
167
169
  )
168
170
 
169
171
 
170
172
  @asynccontextmanager
171
- async def _generate_graph(value: Any, graph_id: str) -> AsyncIterator[Any]:
173
+ async def _generate_graph(
174
+ value: Any, graph_id: str, run_id: str | None = None
175
+ ) -> AsyncIterator[Any]:
172
176
  """Yield a graph object regardless of its type.
173
177
 
174
178
  Logs a warning if graph generation takes >100ms, error if >250ms.
179
+ run_id is passed through solely for inclusion in slow-load log entries,
180
+ enabling correlation with access logs.
175
181
  """
176
182
  start = time.perf_counter()
177
183
  value_type = type(value).__name__
@@ -179,15 +185,15 @@ async def _generate_graph(value: Any, graph_id: str) -> AsyncIterator[Any]:
179
185
  yield value
180
186
  elif hasattr(value, "__aenter__") and hasattr(value, "__aexit__"):
181
187
  async with value as ctx_value:
182
- _log_slow_graph_generation(start, value_type, graph_id)
188
+ _log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
183
189
  yield ctx_value
184
190
  elif hasattr(value, "__enter__") and hasattr(value, "__exit__"):
185
191
  with value as ctx_value:
186
- _log_slow_graph_generation(start, value_type, graph_id)
192
+ _log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
187
193
  yield ctx_value
188
194
  elif asyncio.iscoroutine(value):
189
195
  result = await value
190
- _log_slow_graph_generation(start, value_type, graph_id)
196
+ _log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
191
197
  yield result
192
198
  else:
193
199
  yield value
@@ -206,6 +212,7 @@ async def get_graph(
206
212
  checkpointer: BaseCheckpointSaver | None = None,
207
213
  store: BaseStore,
208
214
  access_context: AccessContext,
215
+ run_id: str | None = None,
209
216
  ) -> AsyncIterator[Pregel]:
210
217
  """Return the runnable."""
211
218
  from langgraph_api.utils import config as lg_config # noqa: PLC0415
@@ -239,7 +246,7 @@ async def get_graph(
239
246
 
240
247
  value = invoke_factory(value, graph_id, config, server_runtime)
241
248
  try:
242
- async with _generate_graph(value, graph_id) as graph_obj:
249
+ async with _generate_graph(value, graph_id, run_id=run_id) as graph_obj:
243
250
  if isinstance(graph_obj, StateGraph):
244
251
  graph_obj = graph_obj.compile()
245
252
  if not isinstance(graph_obj, Pregel | BaseRemotePregel):
@@ -148,15 +148,21 @@ const GRAPH_SPEC: Record<string, GraphSpec> = {};
148
148
 
149
149
  async function getGraph(
150
150
  graphId: string,
151
- config: { configurable?: Record<string, unknown> },
151
+ config: Parameters<CompiledGraphFactory<string>>[0],
152
152
  name: string | null | undefined,
153
153
  ) {
154
154
  if (!GRAPH_RESOLVED[graphId])
155
155
  throw new HTTPException(404, { message: `Graph "${graphId}" not found` });
156
156
 
157
+ const factoryConfig = {
158
+ ...config,
159
+ checkpointer: GRAPH_OPTIONS.checkpointer,
160
+ store: GRAPH_OPTIONS.store,
161
+ };
162
+
157
163
  const resolved =
158
164
  typeof GRAPH_RESOLVED[graphId] === "function"
159
- ? await GRAPH_RESOLVED[graphId](config)
165
+ ? await GRAPH_RESOLVED[graphId](factoryConfig)
160
166
  : GRAPH_RESOLVED[graphId];
161
167
 
162
168
  if (GRAPH_OPTIONS.checkpointer) {
@@ -1,7 +1,8 @@
1
1
  import * as fs from "node:fs/promises";
2
2
  import * as path from "node:path";
3
3
 
4
- import type { CompiledGraph, Graph } from "@langchain/langgraph";
4
+ import type { BaseStore, CompiledGraph, Graph } from "@langchain/langgraph";
5
+ import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
5
6
  import type { JSONSchema7 } from "json-schema";
6
7
 
7
8
  export interface GraphSchema {
@@ -16,9 +17,15 @@ export interface GraphSpec {
16
17
  exportSymbol: string;
17
18
  }
18
19
 
19
- export type CompiledGraphFactory<T extends string> = (config: {
20
+ export type FactoryConfig = {
20
21
  configurable?: Record<string, unknown>;
21
- }) => Promise<CompiledGraph<T>>;
22
+ store?: BaseStore;
23
+ checkpointer?: BaseCheckpointSaver<string | number>;
24
+ };
25
+
26
+ export type CompiledGraphFactory<T extends string> = (
27
+ config: FactoryConfig,
28
+ ) => Promise<CompiledGraph<T>>;
22
29
 
23
30
  export async function resolveGraph(
24
31
  spec: string,
@@ -52,9 +59,7 @@ export async function resolveGraph(
52
59
  type GraphUnknown =
53
60
  | GraphLike
54
61
  | Promise<GraphLike>
55
- | ((config: {
56
- configurable?: Record<string, unknown>;
57
- }) => GraphLike | Promise<GraphLike>)
62
+ | ((config: FactoryConfig) => GraphLike | Promise<GraphLike>)
58
63
  | undefined;
59
64
 
60
65
  const isGraph = (graph: GraphLike): graph is Graph<string> => {
@@ -97,7 +102,7 @@ export async function resolveGraph(
97
102
  };
98
103
 
99
104
  if (typeof graph === "function") {
100
- return async (config: { configurable?: Record<string, unknown> }) => {
105
+ return async (config: FactoryConfig) => {
101
106
  const graphLike = await graph(config);
102
107
  return afterResolve(graphLike);
103
108
  };
@@ -46,7 +46,7 @@ class AccessLoggerMiddleware:
46
46
  return await self.app(scope, receive, send) # pragma: no cover
47
47
 
48
48
  loop = asyncio.get_event_loop()
49
- info = {"response": {}}
49
+ info = {"response": {}, "response_bytes": 0, "first_byte_time": None}
50
50
 
51
51
  if self.debug_enabled:
52
52
 
@@ -58,6 +58,10 @@ class AccessLoggerMiddleware:
58
58
  async def inner_send(message: Message) -> None:
59
59
  if message["type"] == "http.response.start":
60
60
  info["response"] = message
61
+ elif message["type"] == "http.response.body":
62
+ if info["first_byte_time"] is None:
63
+ info["first_byte_time"] = loop.time()
64
+ info["response_bytes"] += len(message.get("body", b""))
61
65
  await send(message)
62
66
  asgi.debug(f"ASGI send {message['type']}", **message)
63
67
 
@@ -67,6 +71,10 @@ class AccessLoggerMiddleware:
67
71
  async def inner_send(message) -> None:
68
72
  if message["type"] == "http.response.start":
69
73
  info["response"] = message
74
+ elif message["type"] == "http.response.body":
75
+ if info["first_byte_time"] is None:
76
+ info["first_byte_time"] = loop.time()
77
+ info["response_bytes"] += len(message.get("body", b""))
70
78
  await send(message)
71
79
 
72
80
  try:
@@ -90,6 +98,12 @@ class AccessLoggerMiddleware:
90
98
  if method and route and status:
91
99
  HTTP_METRICS_COLLECTOR.record_request(method, route, status, latency)
92
100
  qs = scope.get("query_string")
101
+ first_byte_time = info["first_byte_time"]
102
+ ttfb_ms = (
103
+ round((first_byte_time - info["start_time"]) * 1000, 2)
104
+ if first_byte_time is not None
105
+ else None
106
+ )
93
107
  self.logger.log(
94
108
  _get_level(status),
95
109
  f"{method} {path} {status} {latency}ms",
@@ -97,6 +111,9 @@ class AccessLoggerMiddleware:
97
111
  path=path,
98
112
  status=status,
99
113
  latency_ms=latency,
114
+ ttfb_ms=ttfb_ms,
115
+ run_id=scope.get("run_id"),
116
+ response_size_bytes=info["response_bytes"],
100
117
  route=str(route),
101
118
  path_params=scope.get("path_params"),
102
119
  query_string=qs.decode() if qs else "",
@@ -80,8 +80,14 @@ class ApiRequest(Request):
80
80
  async def body(self) -> bytearray:
81
81
  if not hasattr(self, "_body"):
82
82
  chunks = bytearray()
83
+ limit = config.HTTP_MAX_REQUEST_BODY_BYTES
83
84
  async for chunk in self.stream():
84
85
  chunks.extend(chunk)
86
+ if len(chunks) > limit:
87
+ raise HTTPException(
88
+ status_code=413,
89
+ detail=f"Request body too large (limit: {limit} bytes)",
90
+ )
85
91
  self._body = chunks
86
92
  return self._body
87
93
 
@@ -171,6 +171,7 @@ async def astream_state(
171
171
  if temporary
172
172
  else await api_checkpointer.get_checkpointer(),
173
173
  access_context="threads.create_run",
174
+ run_id=run_id,
174
175
  )
175
176
  )
176
177
 
@@ -1 +0,0 @@
1
- __version__ = "0.7.76"
File without changes
File without changes
File without changes