fal 1.29.0__tar.gz → 1.29.1__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.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

Files changed (186) hide show
  1. {fal-1.29.0/fal.egg-info → fal-1.29.1}/PKG-INFO +2 -2
  2. {fal-1.29.0 → fal-1.29.1/fal.egg-info}/PKG-INFO +2 -2
  3. {fal-1.29.0 → fal-1.29.1}/fal.egg-info/requires.txt +1 -1
  4. {fal-1.29.0 → fal-1.29.1}/pyproject.toml +1 -1
  5. {fal-1.29.0 → fal-1.29.1}/src/fal/_fal_version.py +3 -16
  6. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/apps.py +6 -1
  7. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/runners.py +8 -2
  8. {fal-1.29.0 → fal-1.29.1}/src/fal/sdk.py +19 -2
  9. {fal-1.29.0 → fal-1.29.1}/tests/test_apps.py +2 -1
  10. {fal-1.29.0 → fal-1.29.1}/.gitignore +0 -0
  11. {fal-1.29.0 → fal-1.29.1}/Makefile +0 -0
  12. {fal-1.29.0 → fal-1.29.1}/README.md +0 -0
  13. {fal-1.29.0 → fal-1.29.1}/docs/conf.py +0 -0
  14. {fal-1.29.0 → fal-1.29.1}/docs/index.rst +0 -0
  15. {fal-1.29.0 → fal-1.29.1}/fal.egg-info/SOURCES.txt +0 -0
  16. {fal-1.29.0 → fal-1.29.1}/fal.egg-info/dependency_links.txt +0 -0
  17. {fal-1.29.0 → fal-1.29.1}/fal.egg-info/entry_points.txt +0 -0
  18. {fal-1.29.0 → fal-1.29.1}/fal.egg-info/top_level.txt +0 -0
  19. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/README.md +0 -0
  20. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  21. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  22. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  23. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  24. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  25. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  26. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  27. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  28. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  29. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  30. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  31. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  32. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  33. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  34. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  35. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  36. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  37. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  38. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  39. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  40. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  41. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  42. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  43. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  44. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  45. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  46. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  47. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  48. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  49. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  50. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  51. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  52. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  53. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  54. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  55. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  56. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  57. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  58. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  59. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  60. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  61. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  62. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  63. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  64. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  65. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  66. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  67. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  68. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  69. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  70. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  71. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  72. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  73. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  74. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  75. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  76. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  77. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  78. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  79. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  80. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  81. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  82. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  83. {fal-1.29.0 → fal-1.29.1}/openapi-fal-rest/pyproject.toml +0 -0
  84. {fal-1.29.0 → fal-1.29.1}/openapi_rest.config.yaml +0 -0
  85. {fal-1.29.0 → fal-1.29.1}/setup.cfg +0 -0
  86. {fal-1.29.0 → fal-1.29.1}/src/fal/__init__.py +0 -0
  87. {fal-1.29.0 → fal-1.29.1}/src/fal/__main__.py +0 -0
  88. {fal-1.29.0 → fal-1.29.1}/src/fal/_serialization.py +0 -0
  89. {fal-1.29.0 → fal-1.29.1}/src/fal/_version.py +0 -0
  90. {fal-1.29.0 → fal-1.29.1}/src/fal/api.py +0 -0
  91. {fal-1.29.0 → fal-1.29.1}/src/fal/app.py +0 -0
  92. {fal-1.29.0 → fal-1.29.1}/src/fal/apps.py +0 -0
  93. {fal-1.29.0 → fal-1.29.1}/src/fal/auth/__init__.py +0 -0
  94. {fal-1.29.0 → fal-1.29.1}/src/fal/auth/auth0.py +0 -0
  95. {fal-1.29.0 → fal-1.29.1}/src/fal/auth/local.py +0 -0
  96. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/__init__.py +0 -0
  97. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/_utils.py +0 -0
  98. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/api.py +0 -0
  99. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/auth.py +0 -0
  100. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/cli_nested_json.py +0 -0
  101. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/create.py +0 -0
  102. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/debug.py +0 -0
  103. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/deploy.py +0 -0
  104. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/doctor.py +0 -0
  105. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/files.py +0 -0
  106. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/keys.py +0 -0
  107. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/main.py +0 -0
  108. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/parser.py +0 -0
  109. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/profile.py +0 -0
  110. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/run.py +0 -0
  111. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/secrets.py +0 -0
  112. {fal-1.29.0 → fal-1.29.1}/src/fal/cli/teams.py +0 -0
  113. {fal-1.29.0 → fal-1.29.1}/src/fal/config.py +0 -0
  114. {fal-1.29.0 → fal-1.29.1}/src/fal/console/__init__.py +0 -0
  115. {fal-1.29.0 → fal-1.29.1}/src/fal/console/icons.py +0 -0
  116. {fal-1.29.0 → fal-1.29.1}/src/fal/console/ux.py +0 -0
  117. {fal-1.29.0 → fal-1.29.1}/src/fal/container.py +0 -0
  118. {fal-1.29.0 → fal-1.29.1}/src/fal/exceptions/__init__.py +0 -0
  119. {fal-1.29.0 → fal-1.29.1}/src/fal/exceptions/_base.py +0 -0
  120. {fal-1.29.0 → fal-1.29.1}/src/fal/exceptions/_cuda.py +0 -0
  121. {fal-1.29.0 → fal-1.29.1}/src/fal/exceptions/auth.py +0 -0
  122. {fal-1.29.0 → fal-1.29.1}/src/fal/files.py +0 -0
  123. {fal-1.29.0 → fal-1.29.1}/src/fal/flags.py +0 -0
  124. {fal-1.29.0 → fal-1.29.1}/src/fal/logging/__init__.py +0 -0
  125. {fal-1.29.0 → fal-1.29.1}/src/fal/logging/isolate.py +0 -0
  126. {fal-1.29.0 → fal-1.29.1}/src/fal/logging/style.py +0 -0
  127. {fal-1.29.0 → fal-1.29.1}/src/fal/logging/trace.py +0 -0
  128. {fal-1.29.0 → fal-1.29.1}/src/fal/logging/user.py +0 -0
  129. {fal-1.29.0 → fal-1.29.1}/src/fal/project.py +0 -0
  130. {fal-1.29.0 → fal-1.29.1}/src/fal/py.typed +0 -0
  131. {fal-1.29.0 → fal-1.29.1}/src/fal/rest_client.py +0 -0
  132. {fal-1.29.0 → fal-1.29.1}/src/fal/sync.py +0 -0
  133. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/__init__.py +0 -0
  134. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/audio/__init__.py +0 -0
  135. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/audio/audio.py +0 -0
  136. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/exceptions.py +0 -0
  137. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/__init__.py +0 -0
  138. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/file.py +0 -0
  139. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/providers/fal.py +0 -0
  140. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/providers/gcp.py +0 -0
  141. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/providers/r2.py +0 -0
  142. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/providers/s3.py +0 -0
  143. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/file/types.py +0 -0
  144. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/__init__.py +0 -0
  145. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/image.py +0 -0
  146. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  147. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  148. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  149. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  150. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  151. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/image/safety_checker.py +0 -0
  152. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/kv.py +0 -0
  153. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/optimize.py +0 -0
  154. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/types.py +0 -0
  155. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/utils/__init__.py +0 -0
  156. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/utils/download_utils.py +0 -0
  157. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/utils/endpoint.py +0 -0
  158. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/utils/retry.py +0 -0
  159. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/video/__init__.py +0 -0
  160. {fal-1.29.0 → fal-1.29.1}/src/fal/toolkit/video/video.py +0 -0
  161. {fal-1.29.0 → fal-1.29.1}/src/fal/utils.py +0 -0
  162. {fal-1.29.0 → fal-1.29.1}/src/fal/workflows.py +0 -0
  163. {fal-1.29.0 → fal-1.29.1}/tests/__init__.py +0 -0
  164. {fal-1.29.0 → fal-1.29.1}/tests/assets/cat.png +0 -0
  165. {fal-1.29.0 → fal-1.29.1}/tests/cli/__init__.py +0 -0
  166. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_apps.py +0 -0
  167. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_auth.py +0 -0
  168. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_deploy.py +0 -0
  169. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_keys.py +0 -0
  170. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_run.py +0 -0
  171. {fal-1.29.0 → fal-1.29.1}/tests/cli/test_secrets.py +0 -0
  172. {fal-1.29.0 → fal-1.29.1}/tests/conftest.py +0 -0
  173. {fal-1.29.0 → fal-1.29.1}/tests/integration_test.py +0 -0
  174. {fal-1.29.0 → fal-1.29.1}/tests/mainify_package/__init__.py +0 -0
  175. {fal-1.29.0 → fal-1.29.1}/tests/mainify_package/impl.py +0 -0
  176. {fal-1.29.0 → fal-1.29.1}/tests/mainify_package/utils.py +0 -0
  177. {fal-1.29.0 → fal-1.29.1}/tests/mainify_target.py +0 -0
  178. {fal-1.29.0 → fal-1.29.1}/tests/test_files.py +0 -0
  179. {fal-1.29.0 → fal-1.29.1}/tests/test_kv.py +0 -0
  180. {fal-1.29.0 → fal-1.29.1}/tests/test_stability.py +0 -0
  181. {fal-1.29.0 → fal-1.29.1}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  182. {fal-1.29.0 → fal-1.29.1}/tests/toolkit/file_test.py +0 -0
  183. {fal-1.29.0 → fal-1.29.1}/tests/toolkit/image_test.py +0 -0
  184. {fal-1.29.0 → fal-1.29.1}/tests/toolkit/test_types.py +0 -0
  185. {fal-1.29.0 → fal-1.29.1}/tests/toolkit/utils/retry.py +0 -0
  186. {fal-1.29.0 → fal-1.29.1}/tools/demo_script.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.29.0
3
+ Version: 1.29.1
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
7
7
  Description-Content-Type: text/markdown
8
8
  Requires-Dist: isolate[build]<0.19.0,>=0.18.0
9
- Requires-Dist: isolate-proto<0.11.0,>=0.10.2
9
+ Requires-Dist: isolate-proto<0.12.0,>=0.11.0
10
10
  Requires-Dist: grpcio<2,>=1.64.0
11
11
  Requires-Dist: dill==0.3.7
12
12
  Requires-Dist: cloudpickle==3.0.0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.29.0
3
+ Version: 1.29.1
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
7
7
  Description-Content-Type: text/markdown
8
8
  Requires-Dist: isolate[build]<0.19.0,>=0.18.0
9
- Requires-Dist: isolate-proto<0.11.0,>=0.10.2
9
+ Requires-Dist: isolate-proto<0.12.0,>=0.11.0
10
10
  Requires-Dist: grpcio<2,>=1.64.0
11
11
  Requires-Dist: dill==0.3.7
12
12
  Requires-Dist: cloudpickle==3.0.0
@@ -1,5 +1,5 @@
1
1
  isolate[build]<0.19.0,>=0.18.0
2
- isolate-proto<0.11.0,>=0.10.2
2
+ isolate-proto<0.12.0,>=0.11.0
3
3
  grpcio<2,>=1.64.0
4
4
  dill==0.3.7
5
5
  cloudpickle==3.0.0
@@ -23,7 +23,7 @@ readme = "README.md"
23
23
  requires-python = ">=3.8"
24
24
  dependencies = [
25
25
  "isolate[build]>=0.18.0,<0.19.0",
26
- "isolate-proto>=0.10.2,<0.11.0",
26
+ "isolate-proto>=0.11.0,<0.12.0",
27
27
  "grpcio>=1.64.0,<2",
28
28
  "dill==0.3.7",
29
29
  "cloudpickle==3.0.0",
@@ -1,14 +1,7 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = [
5
- "__version__",
6
- "__version_tuple__",
7
- "version",
8
- "version_tuple",
9
- "__commit_id__",
10
- "commit_id",
11
- ]
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
12
5
 
13
6
  TYPE_CHECKING = False
14
7
  if TYPE_CHECKING:
@@ -16,19 +9,13 @@ if TYPE_CHECKING:
16
9
  from typing import Union
17
10
 
18
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
12
  else:
21
13
  VERSION_TUPLE = object
22
- COMMIT_ID = object
23
14
 
24
15
  version: str
25
16
  __version__: str
26
17
  __version_tuple__: VERSION_TUPLE
27
18
  version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
30
19
 
31
- __version__ = version = '1.29.0'
32
- __version_tuple__ = version_tuple = (1, 29, 0)
33
-
34
- __commit_id__ = commit_id = None
20
+ __version__ = version = '1.29.1'
21
+ __version_tuple__ = version_tuple = (1, 29, 1)
@@ -5,6 +5,7 @@ from dataclasses import asdict
5
5
  from typing import TYPE_CHECKING
6
6
 
7
7
  import fal.cli.runners as runners
8
+ from fal.sdk import RunnerState
8
9
 
9
10
  from ._utils import get_client
10
11
  from .parser import FalClientParser
@@ -298,7 +299,11 @@ def _runners(args):
298
299
  alias_runners = connection.list_alias_runners(alias=args.app_name)
299
300
 
300
301
  runners_table = runners.runners_table(alias_runners)
301
- args.console.print(f"Runners: {len(alias_runners)}")
302
+ pending_runners = [
303
+ runner for runner in alias_runners if runner.state == RunnerState.PENDING
304
+ ]
305
+ args.console.print(f"Runners: {len(alias_runners) - len(pending_runners)}")
306
+ args.console.print(f"Pending Runners: {len(pending_runners)}")
302
307
  # Drop the alias column, which is the first column
303
308
  runners_table.columns.pop(0)
304
309
  args.console.print(runners_table)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import List
4
4
 
5
- from fal.sdk import RunnerInfo
5
+ from fal.sdk import RunnerInfo, RunnerState
6
6
 
7
7
  from ._utils import get_client
8
8
  from .parser import FalClientParser
@@ -19,6 +19,7 @@ def runners_table(runners: List[RunnerInfo]):
19
19
  table.add_column("Expires In")
20
20
  table.add_column("Uptime")
21
21
  table.add_column("Revision")
22
+ table.add_column("State")
22
23
 
23
24
  for runner in runners:
24
25
  external_metadata = runner.external_metadata
@@ -45,6 +46,7 @@ def runners_table(runners: List[RunnerInfo]):
45
46
  ),
46
47
  f"{runner.uptime} ({runner.uptime.total_seconds()}s)",
47
48
  runner.revision,
49
+ runner.state.value,
48
50
  )
49
51
 
50
52
  return table
@@ -82,7 +84,11 @@ def _list(args):
82
84
  client = get_client(args.host, args.team)
83
85
  with client.connect() as connection:
84
86
  runners = connection.list_runners()
85
- args.console.print(f"Runners: {len(runners)}")
87
+ pending_runners = [
88
+ runner for runner in runners if runner.state == RunnerState.PENDING
89
+ ]
90
+ args.console.print(f"Runners: {len(runners) - len(pending_runners)}")
91
+ args.console.print(f"Pending Runners: {len(pending_runners)}")
86
92
  args.console.print(runners_table(runners))
87
93
 
88
94
  requests_table = runners_requests_table(runners)
@@ -261,6 +261,21 @@ class AliasInfo:
261
261
  valid_regions: list[str]
262
262
 
263
263
 
264
+ class RunnerState(Enum):
265
+ RUNNING = "running"
266
+ PENDING = "pending"
267
+ UNKNOWN = "unknown"
268
+
269
+ @staticmethod
270
+ def from_proto(proto: isolate_proto.RunnerInfo.State) -> RunnerState:
271
+ if proto is isolate_proto.RunnerInfo.State.RUNNING:
272
+ return RunnerState.RUNNING
273
+ elif proto is isolate_proto.RunnerInfo.State.PENDING:
274
+ return RunnerState.PENDING
275
+ else:
276
+ return RunnerState.UNKNOWN
277
+
278
+
264
279
  @dataclass
265
280
  class RunnerInfo:
266
281
  runner_id: str
@@ -270,6 +285,7 @@ class RunnerInfo:
270
285
  external_metadata: dict[str, Any]
271
286
  revision: str
272
287
  alias: str
288
+ state: RunnerState
273
289
 
274
290
 
275
291
  @dataclass
@@ -421,6 +437,7 @@ def _from_grpc_runner_info(message: isolate_proto.RunnerInfo) -> RunnerInfo:
421
437
  external_metadata=external_metadata,
422
438
  revision=message.revision,
423
439
  alias=message.alias,
440
+ state=RunnerState.from_proto(message.state),
424
441
  )
425
442
 
426
443
 
@@ -769,7 +786,7 @@ class FalServerlessConnection:
769
786
  return [from_grpc(alias) for alias in response.aliases]
770
787
 
771
788
  def list_alias_runners(self, alias: str) -> list[RunnerInfo]:
772
- request = isolate_proto.ListAliasRunnersRequest(alias=alias)
789
+ request = isolate_proto.ListAliasRunnersRequest(alias=alias, list_pending=True)
773
790
  response = self.stub.ListAliasRunners(request)
774
791
  return [from_grpc(runner) for runner in response.runners]
775
792
 
@@ -797,6 +814,6 @@ class FalServerlessConnection:
797
814
  self.stub.KillRunner(request)
798
815
 
799
816
  def list_runners(self) -> list[RunnerInfo]:
800
- request = isolate_proto.ListRunnersRequest()
817
+ request = isolate_proto.ListRunnersRequest(list_pending=True)
801
818
  response = self.stub.ListRunners(request)
802
819
  return [from_grpc(runner) for runner in response.runners]
@@ -1015,7 +1015,8 @@ def test_kill_runner(host: api.FalServerlessHost, test_sleep_app: str):
1015
1015
  client.kill_runner(runners[0].runner_id)
1016
1016
 
1017
1017
  runners = client.list_alias_runners(app_alias)
1018
- assert len(runners) == 0
1018
+ num_runners = len([runner for runner in runners if runner.state == "running"])
1019
+ assert num_runners == 0
1019
1020
 
1020
1021
 
1021
1022
  def test_container_app_client(test_container_app: str):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes