fal 1.2.1__py3-none-any.whl → 1.7.2__py3-none-any.whl
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.
- fal/__main__.py +3 -1
- fal/_fal_version.py +2 -2
- fal/api.py +88 -20
- fal/app.py +221 -27
- fal/apps.py +147 -3
- fal/auth/__init__.py +50 -2
- fal/cli/_utils.py +40 -0
- fal/cli/apps.py +5 -3
- fal/cli/create.py +26 -0
- fal/cli/deploy.py +97 -16
- fal/cli/main.py +2 -2
- fal/cli/parser.py +11 -7
- fal/cli/run.py +12 -1
- fal/cli/runners.py +44 -0
- fal/config.py +23 -0
- fal/container.py +1 -1
- fal/exceptions/__init__.py +7 -1
- fal/exceptions/_base.py +51 -0
- fal/exceptions/_cuda.py +44 -0
- fal/files.py +81 -0
- fal/sdk.py +67 -6
- fal/toolkit/file/file.py +103 -13
- fal/toolkit/file/providers/fal.py +572 -24
- fal/toolkit/file/providers/gcp.py +8 -1
- fal/toolkit/file/providers/r2.py +8 -1
- fal/toolkit/file/providers/s3.py +80 -0
- fal/toolkit/file/types.py +28 -3
- fal/toolkit/image/__init__.py +71 -0
- fal/toolkit/image/image.py +25 -2
- fal/toolkit/image/nsfw_filter/__init__.py +11 -0
- fal/toolkit/image/nsfw_filter/env.py +9 -0
- fal/toolkit/image/nsfw_filter/inference.py +77 -0
- fal/toolkit/image/nsfw_filter/model.py +18 -0
- fal/toolkit/image/nsfw_filter/requirements.txt +4 -0
- fal/toolkit/image/safety_checker.py +107 -0
- fal/toolkit/types.py +140 -0
- fal/toolkit/utils/download_utils.py +4 -0
- fal/toolkit/utils/retry.py +45 -0
- fal/utils.py +20 -4
- fal/workflows.py +10 -4
- {fal-1.2.1.dist-info → fal-1.7.2.dist-info}/METADATA +47 -40
- {fal-1.2.1.dist-info → fal-1.7.2.dist-info}/RECORD +45 -30
- {fal-1.2.1.dist-info → fal-1.7.2.dist-info}/WHEEL +1 -1
- {fal-1.2.1.dist-info → fal-1.7.2.dist-info}/entry_points.txt +0 -0
- {fal-1.2.1.dist-info → fal-1.7.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import random
|
|
3
|
+
import time
|
|
4
|
+
import traceback
|
|
5
|
+
from typing import Any, Callable, Literal
|
|
6
|
+
|
|
7
|
+
BackoffType = Literal["exponential", "fixed"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def retry(
|
|
11
|
+
max_retries: int = 3,
|
|
12
|
+
base_delay: float = 1.0,
|
|
13
|
+
max_delay: float = 60.0,
|
|
14
|
+
backoff_type: BackoffType = "exponential",
|
|
15
|
+
jitter: bool = False,
|
|
16
|
+
) -> Callable:
|
|
17
|
+
def decorator(func: Callable) -> Callable:
|
|
18
|
+
@functools.wraps(func)
|
|
19
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
20
|
+
retries = 0
|
|
21
|
+
while retries < max_retries:
|
|
22
|
+
try:
|
|
23
|
+
return func(*args, **kwargs)
|
|
24
|
+
except Exception as e:
|
|
25
|
+
retries += 1
|
|
26
|
+
print(f"Retrying {retries} of {max_retries}...")
|
|
27
|
+
if retries == max_retries:
|
|
28
|
+
print(f"Max retries reached. Raising exception: {e}")
|
|
29
|
+
traceback.print_exc()
|
|
30
|
+
|
|
31
|
+
raise e
|
|
32
|
+
|
|
33
|
+
if backoff_type == "exponential":
|
|
34
|
+
delay = min(base_delay * (2 ** (retries - 1)), max_delay)
|
|
35
|
+
else: # fixed
|
|
36
|
+
delay = min(base_delay, max_delay)
|
|
37
|
+
|
|
38
|
+
if jitter:
|
|
39
|
+
delay *= random.uniform(0.5, 1.5)
|
|
40
|
+
|
|
41
|
+
time.sleep(delay)
|
|
42
|
+
|
|
43
|
+
return wrapper
|
|
44
|
+
|
|
45
|
+
return decorator
|
fal/utils.py
CHANGED
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
3
5
|
import fal._serialization
|
|
4
6
|
from fal import App, wrap_app
|
|
5
7
|
|
|
6
8
|
from .api import FalServerlessError, FalServerlessHost, IsolatedFunction
|
|
7
9
|
|
|
8
10
|
|
|
11
|
+
@dataclass
|
|
12
|
+
class LoadedFunction:
|
|
13
|
+
function: IsolatedFunction
|
|
14
|
+
endpoints: list[str]
|
|
15
|
+
app_name: str | None
|
|
16
|
+
app_auth: str | None
|
|
17
|
+
|
|
18
|
+
|
|
9
19
|
def load_function_from(
|
|
10
20
|
host: FalServerlessHost,
|
|
11
21
|
file_path: str,
|
|
12
22
|
function_name: str | None = None,
|
|
13
|
-
) ->
|
|
23
|
+
) -> LoadedFunction:
|
|
14
24
|
import runpy
|
|
15
25
|
|
|
16
26
|
module = runpy.run_path(file_path)
|
|
17
27
|
if function_name is None:
|
|
18
28
|
fal_objects = {
|
|
19
|
-
|
|
29
|
+
obj_name: obj
|
|
20
30
|
for obj_name, obj in module.items()
|
|
21
31
|
if isinstance(obj, type)
|
|
22
32
|
and issubclass(obj, fal.App)
|
|
@@ -30,9 +40,12 @@ def load_function_from(
|
|
|
30
40
|
"Please specify the name of the app."
|
|
31
41
|
)
|
|
32
42
|
|
|
33
|
-
[(
|
|
43
|
+
[(function_name, obj)] = fal_objects.items()
|
|
44
|
+
app_name = obj.app_name
|
|
45
|
+
app_auth = obj.app_auth
|
|
34
46
|
else:
|
|
35
47
|
app_name = None
|
|
48
|
+
app_auth = None
|
|
36
49
|
|
|
37
50
|
if function_name not in module:
|
|
38
51
|
raise FalServerlessError(f"Function '{function_name}' not found in module")
|
|
@@ -42,12 +55,15 @@ def load_function_from(
|
|
|
42
55
|
fal._serialization.include_package_from_path(file_path)
|
|
43
56
|
|
|
44
57
|
target = module[function_name]
|
|
58
|
+
endpoints = ["/"]
|
|
45
59
|
if isinstance(target, type) and issubclass(target, App):
|
|
46
60
|
app_name = target.app_name
|
|
61
|
+
app_auth = target.app_auth
|
|
62
|
+
endpoints = target.get_endpoints() or ["/"]
|
|
47
63
|
target = wrap_app(target, host=host)
|
|
48
64
|
|
|
49
65
|
if not isinstance(target, IsolatedFunction):
|
|
50
66
|
raise FalServerlessError(
|
|
51
67
|
f"Function '{function_name}' is not a fal.function or a fal.App"
|
|
52
68
|
)
|
|
53
|
-
return target, app_name
|
|
69
|
+
return LoadedFunction(target, endpoints, app_name=app_name, app_auth=app_auth)
|
fal/workflows.py
CHANGED
|
@@ -5,7 +5,7 @@ import webbrowser
|
|
|
5
5
|
from argparse import ArgumentParser
|
|
6
6
|
from collections import Counter
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
|
-
from typing import Any, Iterator, Union, cast
|
|
8
|
+
from typing import Any, Dict, Iterator, List, Union, cast
|
|
9
9
|
|
|
10
10
|
import graphlib
|
|
11
11
|
import rich
|
|
@@ -21,8 +21,8 @@ from fal import flags
|
|
|
21
21
|
from fal.exceptions import FalServerlessException
|
|
22
22
|
from fal.rest_client import REST_CLIENT
|
|
23
23
|
|
|
24
|
-
JSONType = Union[
|
|
25
|
-
SchemaType =
|
|
24
|
+
JSONType = Union[Dict[str, Any], List[Any], str, int, float, bool, None, "Leaf"]
|
|
25
|
+
SchemaType = Dict[str, Any]
|
|
26
26
|
|
|
27
27
|
VARIABLE_PREFIX = "$"
|
|
28
28
|
INPUT_VARIABLE_NAME = "input"
|
|
@@ -50,7 +50,13 @@ def parse_leaf(raw_leaf: str) -> Leaf:
|
|
|
50
50
|
f"Invalid leaf: {raw_leaf} (must start with a reference)"
|
|
51
51
|
)
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
# remove the $ prefix
|
|
54
|
+
_reference = (
|
|
55
|
+
reference[len(VARIABLE_PREFIX) :]
|
|
56
|
+
if reference.startswith(VARIABLE_PREFIX)
|
|
57
|
+
else reference
|
|
58
|
+
)
|
|
59
|
+
leaf: Leaf = ReferenceLeaf(_reference)
|
|
54
60
|
for raw_part in raw_parts:
|
|
55
61
|
if raw_part.isdigit():
|
|
56
62
|
leaf = IndexLeaf(leaf, int(raw_part))
|
|
@@ -1,49 +1,56 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.2
|
|
3
|
+
Version: 1.7.2
|
|
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
|
-
Requires-Dist: isolate[build]
|
|
9
|
-
Requires-Dist: isolate-proto
|
|
10
|
-
Requires-Dist: grpcio
|
|
11
|
-
Requires-Dist: dill
|
|
12
|
-
Requires-Dist: cloudpickle
|
|
13
|
-
Requires-Dist: typing-extensions
|
|
14
|
-
Requires-Dist: click
|
|
15
|
-
Requires-Dist: structlog
|
|
16
|
-
Requires-Dist: opentelemetry-api
|
|
17
|
-
Requires-Dist: opentelemetry-sdk
|
|
18
|
-
Requires-Dist: grpc-interceptor
|
|
19
|
-
Requires-Dist: colorama
|
|
20
|
-
Requires-Dist: portalocker
|
|
21
|
-
Requires-Dist: rich
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist: packaging
|
|
24
|
-
Requires-Dist: pathspec
|
|
25
|
-
Requires-Dist: pydantic
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
8
|
+
Requires-Dist: isolate[build]<0.16.0,>=0.15.0
|
|
9
|
+
Requires-Dist: isolate-proto<0.7.0,>=0.6.0
|
|
10
|
+
Requires-Dist: grpcio==1.64.0
|
|
11
|
+
Requires-Dist: dill==0.3.7
|
|
12
|
+
Requires-Dist: cloudpickle==3.0.0
|
|
13
|
+
Requires-Dist: typing-extensions<5,>=4.7.1
|
|
14
|
+
Requires-Dist: click<9,>=8.1.3
|
|
15
|
+
Requires-Dist: structlog<23,>=22.3.0
|
|
16
|
+
Requires-Dist: opentelemetry-api<2,>=1.15.0
|
|
17
|
+
Requires-Dist: opentelemetry-sdk<2,>=1.15.0
|
|
18
|
+
Requires-Dist: grpc-interceptor<1,>=0.15.0
|
|
19
|
+
Requires-Dist: colorama<1,>=0.4.6
|
|
20
|
+
Requires-Dist: portalocker<3,>=2.7.0
|
|
21
|
+
Requires-Dist: rich<14,>=13.3.2
|
|
22
|
+
Requires-Dist: rich_argparse
|
|
23
|
+
Requires-Dist: packaging>=21.3
|
|
24
|
+
Requires-Dist: pathspec<1,>=0.11.1
|
|
25
|
+
Requires-Dist: pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3
|
|
26
|
+
Requires-Dist: structlog>=22.0
|
|
27
|
+
Requires-Dist: fastapi<1,>=0.99.1
|
|
28
|
+
Requires-Dist: starlette-exporter>=0.21.0
|
|
29
|
+
Requires-Dist: httpx>=0.15.4
|
|
30
|
+
Requires-Dist: attrs>=21.3.0
|
|
31
|
+
Requires-Dist: python-dateutil<3,>=2.8.0
|
|
32
|
+
Requires-Dist: types-python-dateutil<3,>=2.8.0
|
|
33
|
+
Requires-Dist: importlib-metadata>=4.4; python_version < "3.10"
|
|
34
|
+
Requires-Dist: msgpack<2,>=1.0.7
|
|
35
|
+
Requires-Dist: websockets<13,>=12.0
|
|
36
|
+
Requires-Dist: pillow<11,>=10.2.0
|
|
37
|
+
Requires-Dist: pyjwt[crypto]<3,>=2.8.0
|
|
38
|
+
Requires-Dist: uvicorn<1,>=0.29.0
|
|
39
|
+
Requires-Dist: cookiecutter
|
|
40
|
+
Requires-Dist: tomli
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
43
|
+
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
44
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
41
45
|
Provides-Extra: test
|
|
42
|
-
Requires-Dist: pytest
|
|
43
|
-
Requires-Dist: pytest-asyncio
|
|
44
|
-
Requires-Dist: pytest-xdist
|
|
45
|
-
Requires-Dist: flaky
|
|
46
|
-
Requires-Dist: boto3
|
|
46
|
+
Requires-Dist: pytest<8; extra == "test"
|
|
47
|
+
Requires-Dist: pytest-asyncio; extra == "test"
|
|
48
|
+
Requires-Dist: pytest-xdist; extra == "test"
|
|
49
|
+
Requires-Dist: flaky; extra == "test"
|
|
50
|
+
Requires-Dist: boto3; extra == "test"
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: fal[docs,test]; extra == "dev"
|
|
53
|
+
Requires-Dist: openapi-python-client<1,>=0.14.1; extra == "dev"
|
|
47
54
|
|
|
48
55
|
[](https://pypi.org/project/fal)
|
|
49
56
|
[](https://github.com/fal-ai/fal/actions)
|
|
@@ -1,38 +1,44 @@
|
|
|
1
1
|
fal/__init__.py,sha256=wXs1G0gSc7ZK60-bHe-B2m0l_sA6TrFk4BxY0tMoLe8,784
|
|
2
|
-
fal/__main__.py,sha256=
|
|
3
|
-
fal/_fal_version.py,sha256=
|
|
2
|
+
fal/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83
|
|
3
|
+
fal/_fal_version.py,sha256=Qj1rYkRQ0hSV6NX03bgvPhjsn6HWrQ8maBXi446C5ZM,411
|
|
4
4
|
fal/_serialization.py,sha256=rD2YiSa8iuzCaZohZwN_MPEB-PpSKbWRDeaIDpTEjyY,7653
|
|
5
5
|
fal/_version.py,sha256=EBGqrknaf1WygENX-H4fBefLvHryvJBBGtVJetaB0NY,266
|
|
6
|
-
fal/api.py,sha256=
|
|
7
|
-
fal/app.py,sha256=
|
|
8
|
-
fal/apps.py,sha256=
|
|
9
|
-
fal/
|
|
6
|
+
fal/api.py,sha256=u9QfJtb1nLDJu9kegKCrdvW-Cp0mfMSGTPm5X1ywoeE,43388
|
|
7
|
+
fal/app.py,sha256=C1dTWjit90XdTKmrwd5Aqv3SD0MA1JDZoLLtmStn2Xc,22917
|
|
8
|
+
fal/apps.py,sha256=RpmElElJnDYjsTRQOdNYiJwd74GEOGYA38L5O5GzNEg,11068
|
|
9
|
+
fal/config.py,sha256=hgI3kW4_2NoFsrYEiPss0mnDTr8_Td2z0pVgm93wi9o,600
|
|
10
|
+
fal/container.py,sha256=EjokKTULJ3fPUjDttjir-jmg0gqcUDe0iVzW2j5njec,634
|
|
11
|
+
fal/files.py,sha256=QgfYfMKmNobMPufrAP_ga1FKcIAlSbw18Iar1-0qepo,2650
|
|
10
12
|
fal/flags.py,sha256=oWN_eidSUOcE9wdPK_77si3A1fpgOC0UEERPsvNLIMc,842
|
|
11
13
|
fal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
14
|
fal/rest_client.py,sha256=kGBGmuyHfX1lR910EoKCYPjsyU8MdXawT_cW2q8Sajc,568
|
|
13
|
-
fal/sdk.py,sha256=
|
|
15
|
+
fal/sdk.py,sha256=HjlToPJkG0Z5h_D0D2FK43i3JFKeO4r2IhCGx4B82Z8,22564
|
|
14
16
|
fal/sync.py,sha256=ZuIJA2-hTPNANG9B_NNJZUsO68EIdTH0dc9MzeVE2VU,4340
|
|
15
|
-
fal/utils.py,sha256=
|
|
16
|
-
fal/workflows.py,sha256=
|
|
17
|
-
fal/auth/__init__.py,sha256=
|
|
17
|
+
fal/utils.py,sha256=9q_QrQBlQN3nZYA1kEGRfhJWi4RjnO4H1uQswfaei9w,2146
|
|
18
|
+
fal/workflows.py,sha256=Zl4f6Bs085hY40zmqScxDUyCu7zXkukDbW02iYOLTTI,14805
|
|
19
|
+
fal/auth/__init__.py,sha256=MXwS5zyY1SYJWEkc6s39et73Dkg3cDJg1ZwxRhXNj4c,4704
|
|
18
20
|
fal/auth/auth0.py,sha256=rSG1mgH-QGyKfzd7XyAaj1AYsWt-ho8Y_LZ-FUVWzh4,5421
|
|
19
21
|
fal/auth/local.py,sha256=sndkM6vKpeVny6NHTacVlTbiIFqaksOmw0Viqs_RN1U,1790
|
|
20
22
|
fal/cli/__init__.py,sha256=padK4o0BFqq61kxAA1qQ0jYr2SuhA2mf90B3AaRkmJA,37
|
|
21
|
-
fal/cli/
|
|
23
|
+
fal/cli/_utils.py,sha256=45G0LEz2bW-69MUQKPdatVE_CBC2644gC-V0qdNEsco,1252
|
|
24
|
+
fal/cli/apps.py,sha256=Fo4iUpd6FGTUcIp22WcssE1CaEn_BLKzK_E4JPsXhVI,8179
|
|
22
25
|
fal/cli/auth.py,sha256=--MhfHGwxmtHbRkGioyn1prKn_U-pBzbz0G_QeZou-U,1352
|
|
26
|
+
fal/cli/create.py,sha256=a8WDq-nJLFTeoIXqpb5cr7GR7YR9ZZrQCawNm34KXXE,627
|
|
23
27
|
fal/cli/debug.py,sha256=u_urnyFzSlNnrq93zz_GXE9FX4VyVxDoamJJyrZpFI0,1312
|
|
24
|
-
fal/cli/deploy.py,sha256
|
|
28
|
+
fal/cli/deploy.py,sha256=-woTZObzntUenPFmWJwDaeCmBl3Vb7jqSkhPCIfk2SM,7581
|
|
25
29
|
fal/cli/doctor.py,sha256=U4ne9LX5gQwNblsYQ27XdO8AYDgbYjTO39EtxhwexRM,983
|
|
26
30
|
fal/cli/keys.py,sha256=trDpA3LJu9S27qE_K8Hr6fKLK4vwVzbxUHq8TFrV4pw,3157
|
|
27
|
-
fal/cli/main.py,sha256=
|
|
28
|
-
fal/cli/parser.py,sha256=
|
|
29
|
-
fal/cli/run.py,sha256=
|
|
31
|
+
fal/cli/main.py,sha256=O0i9wdLPxcd1u4CvXit-ufkT_UnON-baTN6v9HaHPmw,2027
|
|
32
|
+
fal/cli/parser.py,sha256=edCqFWYAQSOhrxeEK9BtFRlTEUAlG2JUDjS_vhZ_nHE,2868
|
|
33
|
+
fal/cli/run.py,sha256=nAC12Qss4Fg1XmV0qOS9RdGNLYcdoHeRgQMvbTN4P9I,1202
|
|
34
|
+
fal/cli/runners.py,sha256=5pXuKq7nSkf0VpnppNnvxwP8XDq0SWkc6mkfizDwWMQ,1046
|
|
30
35
|
fal/cli/secrets.py,sha256=740msFm7d41HruudlcfqUXlFl53N-WmChsQP9B9M9Po,2572
|
|
31
36
|
fal/console/__init__.py,sha256=ernZ4bzvvliQh5SmrEqQ7lA5eVcbw6Ra2jalKtA7dxg,132
|
|
32
37
|
fal/console/icons.py,sha256=De9MfFaSkO2Lqfne13n3PrYfTXJVIzYZVqYn5BWsdrA,108
|
|
33
38
|
fal/console/ux.py,sha256=KMQs3UHQvVHDxDQQqlot-WskVKoMQXOE3jiVkkfmIMY,356
|
|
34
|
-
fal/exceptions/__init__.py,sha256=
|
|
35
|
-
fal/exceptions/_base.py,sha256=
|
|
39
|
+
fal/exceptions/__init__.py,sha256=m2okJEpax11mnwmoqO_pCGtbt-FvzKiiuMhKo2ok-_8,270
|
|
40
|
+
fal/exceptions/_base.py,sha256=LwzpMaW_eYQEC5s26h2qGXbNA-S4bOqC8s-bMCX6HjE,1491
|
|
41
|
+
fal/exceptions/_cuda.py,sha256=q5EPFYEb7Iyw03cHrQlRHnH5xOvjwTwQdM6a9N3GB8k,1494
|
|
36
42
|
fal/exceptions/auth.py,sha256=gxRago5coI__vSIcdcsqhhq1lRPkvCnwPAueIaXTAdw,329
|
|
37
43
|
fal/logging/__init__.py,sha256=snqprf7-sKw6oAATS_Yxklf-a3XhLg0vIHICPwLp6TM,1583
|
|
38
44
|
fal/logging/isolate.py,sha256=jJSgDHkFg4sB0xElYSqCYF6IAxy6jEgSfjwFuKJIZbA,2305
|
|
@@ -42,16 +48,25 @@ fal/logging/user.py,sha256=0Xvb8n6tSb9l_V51VDzv6SOdYEFNouV_6nF_W9e7uNQ,642
|
|
|
42
48
|
fal/toolkit/__init__.py,sha256=sV95wiUzKoiDqF9vDgq4q-BLa2sD6IpuKSqp5kdTQNE,658
|
|
43
49
|
fal/toolkit/exceptions.py,sha256=elHZ7dHCJG5zlHGSBbz-ilkZe9QUvQMomJFi8Pt91LA,198
|
|
44
50
|
fal/toolkit/optimize.py,sha256=p75sovF0SmRP6zxzpIaaOmqlxvXB_xEz3XPNf59EF7w,1339
|
|
51
|
+
fal/toolkit/types.py,sha256=kkbOsDKj1qPGb1UARTBp7yuJ5JUuyy7XQurYUBCdti8,4064
|
|
45
52
|
fal/toolkit/file/__init__.py,sha256=FbNl6wD-P0aSSTUwzHt4HujBXrbC3ABmaigPQA4hRfg,70
|
|
46
|
-
fal/toolkit/file/file.py,sha256
|
|
47
|
-
fal/toolkit/file/types.py,sha256=
|
|
48
|
-
fal/toolkit/file/providers/fal.py,sha256=
|
|
49
|
-
fal/toolkit/file/providers/gcp.py,sha256=
|
|
50
|
-
fal/toolkit/file/providers/r2.py,sha256=
|
|
51
|
-
fal/toolkit/
|
|
52
|
-
fal/toolkit/image/
|
|
53
|
+
fal/toolkit/file/file.py,sha256=-gccCKnarTu6Nfm_0yQ0sJM9aadB5tUNvKS1PTqxiFc,9071
|
|
54
|
+
fal/toolkit/file/types.py,sha256=MjZ6xAhKPv4rowLo2Vcbho0sX7AQ3lm3KFyYDcw0dL4,1845
|
|
55
|
+
fal/toolkit/file/providers/fal.py,sha256=Z3Bl7uzBxyckDwopRJRMwygm68nycE41voLw6mnK_BI,22464
|
|
56
|
+
fal/toolkit/file/providers/gcp.py,sha256=iQtkoYUqbmKKpC5srVOYtrruZ3reGRm5lz4kM8bshgk,2247
|
|
57
|
+
fal/toolkit/file/providers/r2.py,sha256=G2OHcCH2yWrVtXT4hWHEXUeEjFhbKO0koqHcd7hkczk,2871
|
|
58
|
+
fal/toolkit/file/providers/s3.py,sha256=CfiA6rTBFfP-empp0cB9OW2c9F5iy0Z-kGwCs5HBICU,2524
|
|
59
|
+
fal/toolkit/image/__init__.py,sha256=m3OatPbBhcEOYyaTu_dgToxunUKoJu4bJVCWUoN7HX4,1838
|
|
60
|
+
fal/toolkit/image/image.py,sha256=ZSkozciP4XxaGnvrR_mP4utqE3_QhoPN0dau9FJ2Xco,5033
|
|
61
|
+
fal/toolkit/image/safety_checker.py,sha256=S7ow-HuoVxC6ixHWWcBrAUm2dIlgq3sTAIull6xIbAg,3105
|
|
62
|
+
fal/toolkit/image/nsfw_filter/__init__.py,sha256=0d9D51EhcnJg8cZLYJjgvQJDZT74CfQu6mpvinRYRpA,216
|
|
63
|
+
fal/toolkit/image/nsfw_filter/env.py,sha256=iAP2Q3vzIl--DD8nr8o3o0goAwhExN2v0feYE0nIQjs,212
|
|
64
|
+
fal/toolkit/image/nsfw_filter/inference.py,sha256=BhIPF_zxRLetThQYxDDF0sdx9VRwvu74M5ye6Povi40,2167
|
|
65
|
+
fal/toolkit/image/nsfw_filter/model.py,sha256=63mu8D15z_IosoRUagRLGHy6VbLqFmrG-yZqnu2vVm4,457
|
|
66
|
+
fal/toolkit/image/nsfw_filter/requirements.txt,sha256=3Pmrd0Ny6QAeBqUNHCgffRyfaCARAPJcfSCX5cRYpbM,37
|
|
53
67
|
fal/toolkit/utils/__init__.py,sha256=CrmM9DyCz5-SmcTzRSm5RaLgxy3kf0ZsSEN9uhnX2Xo,97
|
|
54
|
-
fal/toolkit/utils/download_utils.py,sha256=
|
|
68
|
+
fal/toolkit/utils/download_utils.py,sha256=fFrKoSJPBSurrD636ncNHhJv-cS3zReIv6ltiU3tMZU,17823
|
|
69
|
+
fal/toolkit/utils/retry.py,sha256=mHcQvvNIpu-Hi29P1HXSZuyvolRd48dMaJToqzlG0NY,1353
|
|
55
70
|
openapi_fal_rest/__init__.py,sha256=ziculmF_i6trw63LzZGFX-6W3Lwq9mCR8_UpkpvpaHI,152
|
|
56
71
|
openapi_fal_rest/client.py,sha256=G6BpJg9j7-JsrAUGddYwkzeWRYickBjPdcVgXoPzxuE,2817
|
|
57
72
|
openapi_fal_rest/errors.py,sha256=8mXSxdfSGzxT82srdhYbR0fHfgenxJXaUtMkaGgb6iU,470
|
|
@@ -115,8 +130,8 @@ openapi_fal_rest/models/workflow_node_type.py,sha256=-FzyeY2bxcNmizKbJI8joG7byRi
|
|
|
115
130
|
openapi_fal_rest/models/workflow_schema.py,sha256=4K5gsv9u9pxx2ItkffoyHeNjBBYf6ur5bN4m_zePZNY,2019
|
|
116
131
|
openapi_fal_rest/models/workflow_schema_input.py,sha256=2OkOXWHTNsCXHWS6EGDFzcJKkW5FIap-2gfO233EvZQ,1191
|
|
117
132
|
openapi_fal_rest/models/workflow_schema_output.py,sha256=EblwSPAGfWfYVWw_WSSaBzQVju296is9o28rMBAd0mc,1196
|
|
118
|
-
fal-1.2.
|
|
119
|
-
fal-1.2.
|
|
120
|
-
fal-1.2.
|
|
121
|
-
fal-1.2.
|
|
122
|
-
fal-1.2.
|
|
133
|
+
fal-1.7.2.dist-info/METADATA,sha256=WkJRSNM2kZUjycgksVYKCIH_z6GD5ks1W5bbteDQp2A,3996
|
|
134
|
+
fal-1.7.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
135
|
+
fal-1.7.2.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
|
|
136
|
+
fal-1.7.2.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
|
|
137
|
+
fal-1.7.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|