fal 1.46.0__tar.gz → 1.46.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 (201) hide show
  1. {fal-1.46.0/fal.egg-info → fal-1.46.1}/PKG-INFO +2 -1
  2. {fal-1.46.0 → fal-1.46.1/fal.egg-info}/PKG-INFO +2 -1
  3. {fal-1.46.0 → fal-1.46.1}/fal.egg-info/requires.txt +1 -0
  4. {fal-1.46.0 → fal-1.46.1}/pyproject.toml +1 -0
  5. {fal-1.46.0 → fal-1.46.1}/src/fal/_fal_version.py +2 -2
  6. {fal-1.46.0 → fal-1.46.1}/src/fal/distributed/utils.py +3 -3
  7. {fal-1.46.0 → fal-1.46.1}/src/fal/distributed/worker.py +21 -6
  8. {fal-1.46.0 → fal-1.46.1}/.gitignore +0 -0
  9. {fal-1.46.0 → fal-1.46.1}/Makefile +0 -0
  10. {fal-1.46.0 → fal-1.46.1}/README.md +0 -0
  11. {fal-1.46.0 → fal-1.46.1}/docs/conf.py +0 -0
  12. {fal-1.46.0 → fal-1.46.1}/docs/index.rst +0 -0
  13. {fal-1.46.0 → fal-1.46.1}/fal.egg-info/SOURCES.txt +0 -0
  14. {fal-1.46.0 → fal-1.46.1}/fal.egg-info/dependency_links.txt +0 -0
  15. {fal-1.46.0 → fal-1.46.1}/fal.egg-info/entry_points.txt +0 -0
  16. {fal-1.46.0 → fal-1.46.1}/fal.egg-info/top_level.txt +0 -0
  17. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/README.md +0 -0
  18. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  19. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  20. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  21. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  22. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  23. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  24. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  25. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  26. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  27. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  28. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  29. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  30. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  31. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  32. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  33. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  34. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  35. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  36. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  37. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  38. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  39. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  40. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  41. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  42. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  43. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  44. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  45. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  46. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  47. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  48. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  49. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  50. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  51. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  52. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  53. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  54. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  55. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  56. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  57. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  58. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  59. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  60. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  61. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  62. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  63. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  64. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  65. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  66. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  67. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  68. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  69. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  70. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  71. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  72. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  73. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  74. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  75. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  76. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  77. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  78. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  79. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  80. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  81. {fal-1.46.0 → fal-1.46.1}/openapi-fal-rest/pyproject.toml +0 -0
  82. {fal-1.46.0 → fal-1.46.1}/openapi_rest.config.yaml +0 -0
  83. {fal-1.46.0 → fal-1.46.1}/setup.cfg +0 -0
  84. {fal-1.46.0 → fal-1.46.1}/src/fal/__init__.py +0 -0
  85. {fal-1.46.0 → fal-1.46.1}/src/fal/__main__.py +0 -0
  86. {fal-1.46.0 → fal-1.46.1}/src/fal/_serialization.py +0 -0
  87. {fal-1.46.0 → fal-1.46.1}/src/fal/_version.py +0 -0
  88. {fal-1.46.0 → fal-1.46.1}/src/fal/api/__init__.py +0 -0
  89. {fal-1.46.0 → fal-1.46.1}/src/fal/api/api.py +0 -0
  90. {fal-1.46.0 → fal-1.46.1}/src/fal/api/apps.py +0 -0
  91. {fal-1.46.0 → fal-1.46.1}/src/fal/api/client.py +0 -0
  92. {fal-1.46.0 → fal-1.46.1}/src/fal/api/deploy.py +0 -0
  93. {fal-1.46.0 → fal-1.46.1}/src/fal/api/runners.py +0 -0
  94. {fal-1.46.0 → fal-1.46.1}/src/fal/app.py +0 -0
  95. {fal-1.46.0 → fal-1.46.1}/src/fal/apps.py +0 -0
  96. {fal-1.46.0 → fal-1.46.1}/src/fal/auth/__init__.py +0 -0
  97. {fal-1.46.0 → fal-1.46.1}/src/fal/auth/auth0.py +0 -0
  98. {fal-1.46.0 → fal-1.46.1}/src/fal/auth/local.py +0 -0
  99. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/__init__.py +0 -0
  100. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/_utils.py +0 -0
  101. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/api.py +0 -0
  102. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/apps.py +0 -0
  103. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/auth.py +0 -0
  104. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/cli_nested_json.py +0 -0
  105. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/create.py +0 -0
  106. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/debug.py +0 -0
  107. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/deploy.py +0 -0
  108. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/doctor.py +0 -0
  109. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/files.py +0 -0
  110. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/keys.py +0 -0
  111. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/main.py +0 -0
  112. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/parser.py +0 -0
  113. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/profile.py +0 -0
  114. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/queue.py +0 -0
  115. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/run.py +0 -0
  116. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/runners.py +0 -0
  117. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/secrets.py +0 -0
  118. {fal-1.46.0 → fal-1.46.1}/src/fal/cli/teams.py +0 -0
  119. {fal-1.46.0 → fal-1.46.1}/src/fal/config.py +0 -0
  120. {fal-1.46.0 → fal-1.46.1}/src/fal/console/__init__.py +0 -0
  121. {fal-1.46.0 → fal-1.46.1}/src/fal/console/icons.py +0 -0
  122. {fal-1.46.0 → fal-1.46.1}/src/fal/console/ux.py +0 -0
  123. {fal-1.46.0 → fal-1.46.1}/src/fal/container.py +0 -0
  124. {fal-1.46.0 → fal-1.46.1}/src/fal/distributed/__init__.py +0 -0
  125. {fal-1.46.0 → fal-1.46.1}/src/fal/exceptions/__init__.py +0 -0
  126. {fal-1.46.0 → fal-1.46.1}/src/fal/exceptions/_base.py +0 -0
  127. {fal-1.46.0 → fal-1.46.1}/src/fal/exceptions/_cuda.py +0 -0
  128. {fal-1.46.0 → fal-1.46.1}/src/fal/exceptions/auth.py +0 -0
  129. {fal-1.46.0 → fal-1.46.1}/src/fal/file_sync.py +0 -0
  130. {fal-1.46.0 → fal-1.46.1}/src/fal/files.py +0 -0
  131. {fal-1.46.0 → fal-1.46.1}/src/fal/flags.py +0 -0
  132. {fal-1.46.0 → fal-1.46.1}/src/fal/logging/__init__.py +0 -0
  133. {fal-1.46.0 → fal-1.46.1}/src/fal/logging/isolate.py +0 -0
  134. {fal-1.46.0 → fal-1.46.1}/src/fal/logging/style.py +0 -0
  135. {fal-1.46.0 → fal-1.46.1}/src/fal/logging/trace.py +0 -0
  136. {fal-1.46.0 → fal-1.46.1}/src/fal/project.py +0 -0
  137. {fal-1.46.0 → fal-1.46.1}/src/fal/py.typed +0 -0
  138. {fal-1.46.0 → fal-1.46.1}/src/fal/rest_client.py +0 -0
  139. {fal-1.46.0 → fal-1.46.1}/src/fal/sdk.py +0 -0
  140. {fal-1.46.0 → fal-1.46.1}/src/fal/sync.py +0 -0
  141. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/__init__.py +0 -0
  142. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/audio/__init__.py +0 -0
  143. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/audio/audio.py +0 -0
  144. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/exceptions.py +0 -0
  145. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/__init__.py +0 -0
  146. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/file.py +0 -0
  147. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/providers/fal.py +0 -0
  148. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/providers/gcp.py +0 -0
  149. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/providers/r2.py +0 -0
  150. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/providers/s3.py +0 -0
  151. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/file/types.py +0 -0
  152. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/__init__.py +0 -0
  153. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/image.py +0 -0
  154. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  155. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  156. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  157. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  158. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  159. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/image/safety_checker.py +0 -0
  160. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/kv.py +0 -0
  161. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/optimize.py +0 -0
  162. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/types.py +0 -0
  163. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/utils/__init__.py +0 -0
  164. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/utils/download_utils.py +0 -0
  165. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/utils/endpoint.py +0 -0
  166. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/utils/retry.py +0 -0
  167. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/utils/setup_utils.py +0 -0
  168. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/video/__init__.py +0 -0
  169. {fal-1.46.0 → fal-1.46.1}/src/fal/toolkit/video/video.py +0 -0
  170. {fal-1.46.0 → fal-1.46.1}/src/fal/utils.py +0 -0
  171. {fal-1.46.0 → fal-1.46.1}/src/fal/workflows.py +0 -0
  172. {fal-1.46.0 → fal-1.46.1}/tests/__init__.py +0 -0
  173. {fal-1.46.0 → fal-1.46.1}/tests/assets/cat.png +0 -0
  174. {fal-1.46.0 → fal-1.46.1}/tests/cli/__init__.py +0 -0
  175. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_apps.py +0 -0
  176. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_auth.py +0 -0
  177. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_deploy.py +0 -0
  178. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_keys.py +0 -0
  179. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_run.py +0 -0
  180. {fal-1.46.0 → fal-1.46.1}/tests/cli/test_secrets.py +0 -0
  181. {fal-1.46.0 → fal-1.46.1}/tests/conftest.py +0 -0
  182. {fal-1.46.0 → fal-1.46.1}/tests/integration_test.py +0 -0
  183. {fal-1.46.0 → fal-1.46.1}/tests/mainify_package/__init__.py +0 -0
  184. {fal-1.46.0 → fal-1.46.1}/tests/mainify_package/impl.py +0 -0
  185. {fal-1.46.0 → fal-1.46.1}/tests/mainify_package/utils.py +0 -0
  186. {fal-1.46.0 → fal-1.46.1}/tests/mainify_target.py +0 -0
  187. {fal-1.46.0 → fal-1.46.1}/tests/test_apps.py +0 -0
  188. {fal-1.46.0 → fal-1.46.1}/tests/test_file_sync.py +0 -0
  189. {fal-1.46.0 → fal-1.46.1}/tests/test_files.py +0 -0
  190. {fal-1.46.0 → fal-1.46.1}/tests/test_kv.py +0 -0
  191. {fal-1.46.0 → fal-1.46.1}/tests/test_stability.py +0 -0
  192. {fal-1.46.0 → fal-1.46.1}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  193. {fal-1.46.0 → fal-1.46.1}/tests/toolkit/file_test.py +0 -0
  194. {fal-1.46.0 → fal-1.46.1}/tests/toolkit/image_test.py +0 -0
  195. {fal-1.46.0 → fal-1.46.1}/tests/toolkit/test_types.py +0 -0
  196. {fal-1.46.0 → fal-1.46.1}/tests/toolkit/utils/retry.py +0 -0
  197. {fal-1.46.0 → fal-1.46.1}/tests/unit/distributed/test_integration.py +0 -0
  198. {fal-1.46.0 → fal-1.46.1}/tests/unit/distributed/test_utils.py +0 -0
  199. {fal-1.46.0 → fal-1.46.1}/tests/unit/distributed/test_worker.py +0 -0
  200. {fal-1.46.0 → fal-1.46.1}/tests/unit/test_app.py +0 -0
  201. {fal-1.46.0 → fal-1.46.1}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.46.0
3
+ Version: 1.46.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
@@ -53,6 +53,7 @@ Requires-Dist: pytest-xdist; extra == "test"
53
53
  Requires-Dist: pytest-timeout; extra == "test"
54
54
  Requires-Dist: flaky; extra == "test"
55
55
  Requires-Dist: boto3; extra == "test"
56
+ Requires-Dist: numpy; extra == "test"
56
57
  Provides-Extra: dev
57
58
  Requires-Dist: fal[docs,test]; extra == "dev"
58
59
  Requires-Dist: openapi-python-client<1,>=0.14.1; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.46.0
3
+ Version: 1.46.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
@@ -53,6 +53,7 @@ Requires-Dist: pytest-xdist; extra == "test"
53
53
  Requires-Dist: pytest-timeout; extra == "test"
54
54
  Requires-Dist: flaky; extra == "test"
55
55
  Requires-Dist: boto3; extra == "test"
56
+ Requires-Dist: numpy; extra == "test"
56
57
  Provides-Extra: dev
57
58
  Requires-Dist: fal[docs,test]; extra == "dev"
58
59
  Requires-Dist: openapi-python-client<1,>=0.14.1; extra == "dev"
@@ -54,3 +54,4 @@ pytest-xdist
54
54
  pytest-timeout
55
55
  flaky
56
56
  boto3
57
+ numpy
@@ -77,6 +77,7 @@ test = [
77
77
  "pytest-timeout",
78
78
  "flaky",
79
79
  "boto3",
80
+ "numpy",
80
81
  ]
81
82
  dev = [
82
83
  "fal[docs,test]",
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.46.0'
32
- __version_tuple__ = version_tuple = (1, 46, 0)
31
+ __version__ = version = '1.46.1'
32
+ __version_tuple__ = version_tuple = (1, 46, 1)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -8,7 +8,7 @@ import warnings
8
8
  from collections.abc import Callable
9
9
  from io import BytesIO
10
10
  from pathlib import Path
11
- from typing import TYPE_CHECKING, Any, Optional, Union
11
+ from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, Union
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  import torch.multiprocessing as mp
@@ -271,8 +271,8 @@ def wrap_distributed_worker(
271
271
  master_port: int,
272
272
  timeout: int,
273
273
  cwd: Optional[Union[str, Path]],
274
- args: tuple[Any],
275
- kwargs: dict[str, Any],
274
+ args: Tuple[Any],
275
+ kwargs: Dict[str, Any],
276
276
  ) -> None:
277
277
  """
278
278
  Worker function for distributed training or inference.
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import asyncio
2
4
  import inspect
3
5
  import os
@@ -9,6 +11,7 @@ import traceback
9
11
  import warnings
10
12
  from collections.abc import AsyncIterator, Callable, Coroutine
11
13
  from concurrent.futures import Future
14
+ from functools import partial
12
15
  from pathlib import Path
13
16
  from typing import TYPE_CHECKING, Any, Optional, Union
14
17
 
@@ -70,7 +73,7 @@ class DistributedWorker:
70
73
  # Public API
71
74
 
72
75
  @property
73
- def device(self) -> "torch.device":
76
+ def device(self) -> torch.device:
74
77
  """
75
78
  :return: The device for the current worker.
76
79
  """
@@ -162,6 +165,16 @@ class DistributedWorker:
162
165
  self.loop.call_soon_threadsafe(self.loop.stop)
163
166
  self.thread.join(timeout=timeout)
164
167
 
168
+ async def _run_sync_in_executor(
169
+ self,
170
+ func: Callable[..., Any],
171
+ *args: Any,
172
+ **kwargs: Any,
173
+ ) -> Any:
174
+ """Run a synchronous function in the executor."""
175
+ loop = asyncio.get_running_loop()
176
+ return await loop.run_in_executor(None, partial(func, *args, **kwargs))
177
+
165
178
  def run_in_worker(
166
179
  self,
167
180
  func: Callable[..., Any],
@@ -174,7 +187,9 @@ class DistributedWorker:
174
187
  if inspect.iscoroutinefunction(func):
175
188
  coro = func(*args, **kwargs)
176
189
  else:
177
- coro = asyncio.to_thread(func, *args, **kwargs)
190
+ # Using in place of asyncio.to_thread
191
+ # since it's not available in Python 3.8
192
+ coro = self._run_sync_in_executor(func, *args, **kwargs)
178
193
 
179
194
  return self.submit(coro)
180
195
 
@@ -206,8 +221,8 @@ class DistributedRunner:
206
221
  A class to launch and manage distributed workers.
207
222
  """
208
223
 
209
- zmq_socket: Optional["Socket[Any]"]
210
- context: Optional["mp.ProcessContext"]
224
+ zmq_socket: Optional[Socket[Any]]
225
+ context: Optional[mp.ProcessContext]
211
226
  keepalive_timer: Optional[KeepAliveTimer]
212
227
 
213
228
  def __init__(
@@ -296,7 +311,7 @@ class DistributedRunner:
296
311
  f"Distributed processes are not running. Errors: {self.gather_errors()}"
297
312
  )
298
313
 
299
- def get_zmq_socket(self) -> "Socket[Any]":
314
+ def get_zmq_socket(self) -> Socket[Any]:
300
315
  """
301
316
  Returns a ZeroMQ socket of the specified type.
302
317
  :param socket_type: The type of the ZeroMQ socket.
@@ -750,7 +765,7 @@ class DistributedRunner:
750
765
  assert rank == b"0", "Expected response from worker with rank 0"
751
766
  return distributed_deserialize(response)
752
767
 
753
- async def __aenter__(self) -> "DistributedRunner":
768
+ async def __aenter__(self) -> DistributedRunner:
754
769
  """
755
770
  Enter the context manager.
756
771
  :return: The DistributedRunner instance.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes