tongflow 0.0.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.
Files changed (65) hide show
  1. tongflow-0.0.1/PKG-INFO +46 -0
  2. tongflow-0.0.1/README.md +28 -0
  3. tongflow-0.0.1/pyproject.toml +27 -0
  4. tongflow-0.0.1/setup.cfg +4 -0
  5. tongflow-0.0.1/tongflow/__init__.py +3 -0
  6. tongflow-0.0.1/tongflow/__main__.py +6 -0
  7. tongflow-0.0.1/tongflow/abi.py +33 -0
  8. tongflow-0.0.1/tongflow/gen_models.py +109 -0
  9. tongflow-0.0.1/tongflow/gen_node_slots.py +86 -0
  10. tongflow-0.0.1/tongflow/models/__init__.py +1 -0
  11. tongflow-0.0.1/tongflow/models/arrange_group.py +13 -0
  12. tongflow-0.0.1/tongflow/models/asset.py +9 -0
  13. tongflow-0.0.1/tongflow/models/audio_image_gen_video.py +13 -0
  14. tongflow-0.0.1/tongflow/models/combine_text.py +13 -0
  15. tongflow-0.0.1/tongflow/models/concat_videos.py +13 -0
  16. tongflow-0.0.1/tongflow/models/drop_video.py +13 -0
  17. tongflow-0.0.1/tongflow/models/extract_audio.py +13 -0
  18. tongflow-0.0.1/tongflow/models/gen_music.py +13 -0
  19. tongflow-0.0.1/tongflow/models/gen_speech.py +13 -0
  20. tongflow-0.0.1/tongflow/models/gen_text.py +13 -0
  21. tongflow-0.0.1/tongflow/models/gen_text_gemini.py +13 -0
  22. tongflow-0.0.1/tongflow/models/gen_text_openai.py +13 -0
  23. tongflow-0.0.1/tongflow/models/gen_video.py +13 -0
  24. tongflow-0.0.1/tongflow/models/get_first_frame.py +13 -0
  25. tongflow-0.0.1/tongflow/models/get_last_frame.py +13 -0
  26. tongflow-0.0.1/tongflow/models/image_describe.py +13 -0
  27. tongflow-0.0.1/tongflow/models/image_edit.py +13 -0
  28. tongflow-0.0.1/tongflow/models/image_fusion.py +13 -0
  29. tongflow-0.0.1/tongflow/models/image_gen.py +13 -0
  30. tongflow-0.0.1/tongflow/models/image_gen_model.py +13 -0
  31. tongflow-0.0.1/tongflow/models/image_gen_text.py +13 -0
  32. tongflow-0.0.1/tongflow/models/image_gen_video.py +13 -0
  33. tongflow-0.0.1/tongflow/models/image_image_gen_video.py +13 -0
  34. tongflow-0.0.1/tongflow/models/image_upscale.py +13 -0
  35. tongflow-0.0.1/tongflow/models/link.py +13 -0
  36. tongflow-0.0.1/tongflow/models/merge_video_audio.py +13 -0
  37. tongflow-0.0.1/tongflow/models/parse_document.py +13 -0
  38. tongflow-0.0.1/tongflow/models/speech_image_video_gen_video.py +13 -0
  39. tongflow-0.0.1/tongflow/models/speech_text_gen_video.py +13 -0
  40. tongflow-0.0.1/tongflow/models/speech_video_gen_video.py +13 -0
  41. tongflow-0.0.1/tongflow/models/split_text.py +13 -0
  42. tongflow-0.0.1/tongflow/models/split_video.py +13 -0
  43. tongflow-0.0.1/tongflow/models/text_gen_speech_clone.py +13 -0
  44. tongflow-0.0.1/tongflow/models/text_gen_speech_emotion.py +13 -0
  45. tongflow-0.0.1/tongflow/models/text_gen_speech_instruct.py +13 -0
  46. tongflow-0.0.1/tongflow/models/text_gen_speech_style.py +13 -0
  47. tongflow-0.0.1/tongflow/models/text_gen_video.py +13 -0
  48. tongflow-0.0.1/tongflow/models/transcribe.py +17 -0
  49. tongflow-0.0.1/tongflow/models/transcribe_timestamp.py +17 -0
  50. tongflow-0.0.1/tongflow/models/video_describe.py +13 -0
  51. tongflow-0.0.1/tongflow/models/video_gen_text.py +13 -0
  52. tongflow-0.0.1/tongflow/models/video_image_gen_video_mix.py +13 -0
  53. tongflow-0.0.1/tongflow/models/video_image_gen_video_move.py +13 -0
  54. tongflow-0.0.1/tongflow/models/video_image_move_animal.py +13 -0
  55. tongflow-0.0.1/tongflow/models/video_upscale.py +13 -0
  56. tongflow-0.0.1/tongflow/models/wan_animate_mix.py +13 -0
  57. tongflow-0.0.1/tongflow/node_slots.py +115 -0
  58. tongflow-0.0.1/tongflow/parse_deploy.py +288 -0
  59. tongflow-0.0.1/tongflow/protocol.py +29 -0
  60. tongflow-0.0.1/tongflow/scan.py +335 -0
  61. tongflow-0.0.1/tongflow/slots.py +17 -0
  62. tongflow-0.0.1/tongflow.egg-info/PKG-INFO +46 -0
  63. tongflow-0.0.1/tongflow.egg-info/SOURCES.txt +63 -0
  64. tongflow-0.0.1/tongflow.egg-info/dependency_links.txt +1 -0
  65. tongflow-0.0.1/tongflow.egg-info/top_level.txt +1 -0
@@ -0,0 +1,46 @@
1
+ Metadata-Version: 2.4
2
+ Name: tongflow
3
+ Version: 0.0.1
4
+ Summary: Tongflow / Openflow plugin package (node contracts, deploy scan, ABI helpers)
5
+ Author: Tongflow contributors
6
+ License-Expression: AGPL-3.0-or-later
7
+ Keywords: tongflow,openflow,modal,plugin
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Typing :: Typed
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+
19
+ # tongflow (PyPI)
20
+
21
+ `pip install tongflow` installs the **Python import name** `tongflow` (plugin contracts, `deploy.py` scan, node slot metadata).
22
+
23
+ ## Install
24
+
25
+ ```bash
26
+ pip install tongflow
27
+ ```
28
+
29
+ ## Use
30
+
31
+ ```python
32
+ from tongflow.slots import node_slot
33
+ from tongflow.node_slots import NodeSlots
34
+ ```
35
+
36
+ ## Build and publish (maintainers)
37
+
38
+ From this directory:
39
+
40
+ ```bash
41
+ python -m pip install --upgrade build twine
42
+ python -m build
43
+ python -m twine upload dist/*
44
+ ```
45
+
46
+ Use [TestPyPI](https://test.pypi.org) first if you prefer: `twine upload --repository testpypi dist/*`
@@ -0,0 +1,28 @@
1
+ # tongflow (PyPI)
2
+
3
+ `pip install tongflow` installs the **Python import name** `tongflow` (plugin contracts, `deploy.py` scan, node slot metadata).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install tongflow
9
+ ```
10
+
11
+ ## Use
12
+
13
+ ```python
14
+ from tongflow.slots import node_slot
15
+ from tongflow.node_slots import NodeSlots
16
+ ```
17
+
18
+ ## Build and publish (maintainers)
19
+
20
+ From this directory:
21
+
22
+ ```bash
23
+ python -m pip install --upgrade build twine
24
+ python -m build
25
+ python -m twine upload dist/*
26
+ ```
27
+
28
+ Use [TestPyPI](https://test.pypi.org) first if you prefer: `twine upload --repository testpypi dist/*`
@@ -0,0 +1,27 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "tongflow"
7
+ version = "0.0.1"
8
+ description = "Tongflow / Openflow plugin package (node contracts, deploy scan, ABI helpers)"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "AGPL-3.0-or-later"
12
+ authors = [{ name = "Tongflow contributors" }]
13
+ keywords = ["tongflow", "openflow", "modal", "plugin"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Typing :: Typed",
23
+ ]
24
+
25
+ [tool.setuptools.packages.find]
26
+ where = ["."]
27
+ include = ["tongflow*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Tongflow: Openflow plugin convention + deploy scan (no per-repo JSON)."""
2
+
3
+ __version__ = "0.0.1"
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ from .scan import main
4
+
5
+ if __name__ == "__main__":
6
+ main()
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from dataclasses import dataclass
5
+ from pathlib import Path
6
+ from typing import Any, FrozenSet
7
+
8
+
9
+ @dataclass(frozen=True)
10
+ class Abi:
11
+ version: int
12
+ node_slots: FrozenSet[str]
13
+ path: Path
14
+
15
+
16
+ def load_abi(path: Path) -> Abi:
17
+ raw: dict[str, Any] = json.loads(path.read_text(encoding="utf-8"))
18
+ v = int(raw.get("version", 0))
19
+ if v != 1:
20
+ raise ValueError(f"Unsupported ABI version {v} in {path}")
21
+ nodes = raw.get("nodes")
22
+ if not isinstance(nodes, list) or not nodes:
23
+ raise ValueError("ABI 'nodes' must be a non-empty list")
24
+ slots: set[str] = set()
25
+ for n in nodes:
26
+ if not isinstance(n, dict):
27
+ continue
28
+ s = n.get("nodeSlot")
29
+ if isinstance(s, str) and s:
30
+ slots.add(s)
31
+ if not slots:
32
+ raise ValueError("No nodeSlot entries in ABI")
33
+ return Abi(version=1, node_slots=frozenset(slots), path=path)
@@ -0,0 +1,109 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import re
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+
10
+ def slot_to_ident(slot: str) -> str:
11
+ s = slot.upper()
12
+ s = re.sub(r"[^A-Z0-9]+", "_", s).strip("_")
13
+ if not s:
14
+ return "UNKNOWN"
15
+ if s[0].isdigit():
16
+ s = f"S_{s}"
17
+ return s
18
+
19
+
20
+ def slot_to_module(slot: str) -> str:
21
+ # python module name
22
+ s = slot.lower()
23
+ s = re.sub(r"[^a-z0-9]+", "_", s).strip("_")
24
+ if not s:
25
+ return "unknown"
26
+ if s[0].isdigit():
27
+ s = f"s_{s}"
28
+ return s
29
+
30
+
31
+ def read_abi_nodes(abi_path: Path) -> list[dict[str, Any]]:
32
+ raw: dict[str, Any] = json.loads(abi_path.read_text(encoding="utf-8"))
33
+ nodes = raw.get("nodes")
34
+ if not isinstance(nodes, list):
35
+ raise ValueError("ABI missing nodes[]")
36
+ out: list[dict[str, Any]] = []
37
+ for n in nodes:
38
+ if isinstance(n, dict) and isinstance(n.get("nodeSlot"), str):
39
+ out.append(n)
40
+ return out
41
+
42
+
43
+ def write_models(out_dir: Path, nodes: list[dict[str, Any]]) -> None:
44
+ out_dir.mkdir(parents=True, exist_ok=True)
45
+ (out_dir / "__init__.py").write_text(
46
+ "\"\"\"Generated models from tongflow ABI.\"\"\"\n",
47
+ encoding="utf-8",
48
+ )
49
+
50
+ asset_py = (
51
+ "from __future__ import annotations\n\n"
52
+ "from typing import TypedDict\n\n\n"
53
+ "class Asset(TypedDict, total=False):\n"
54
+ " bytesBase64: str\n"
55
+ " filename: str\n"
56
+ " mime: str\n"
57
+ )
58
+ (out_dir / "asset.py").write_text(asset_py, encoding="utf-8")
59
+
60
+ for n in nodes:
61
+ slot = str(n["nodeSlot"])
62
+ mod = slot_to_module(slot)
63
+ cls = slot_to_ident(slot).title().replace("_", "")
64
+ input_name = f"{cls}Input"
65
+ output_name = f"{cls}Output"
66
+
67
+ # Only transcribe is strongly modeled for now.
68
+ if slot in ("transcribe", "transcribe_timestamp"):
69
+ text = (
70
+ "from __future__ import annotations\n\n"
71
+ "from typing import TypedDict\n"
72
+ "from .asset import Asset\n\n\n"
73
+ f"class {input_name}(TypedDict, total=False):\n"
74
+ " audio: Asset\n"
75
+ " context: str\n"
76
+ " language: str\n"
77
+ " max_new_tokens: float\n\n\n"
78
+ f"class {output_name}(TypedDict, total=False):\n"
79
+ " text: str\n"
80
+ " language: str\n"
81
+ " time_stamps: list[dict[str, float | str]]\n"
82
+ )
83
+ else:
84
+ text = (
85
+ "from __future__ import annotations\n\n"
86
+ "from typing import Any, TypedDict\n\n\n"
87
+ f"class {input_name}(TypedDict, total=False):\n"
88
+ " \"\"\"Fallback generic input. Tighten via ABI later.\"\"\"\n"
89
+ " _data: dict[str, Any]\n\n\n"
90
+ f"class {output_name}(TypedDict, total=False):\n"
91
+ " \"\"\"Fallback generic output. Tighten via ABI later.\"\"\"\n"
92
+ " _data: dict[str, Any]\n"
93
+ )
94
+ (out_dir / f"{mod}.py").write_text(text, encoding="utf-8")
95
+
96
+
97
+ def main() -> int:
98
+ ap = argparse.ArgumentParser()
99
+ ap.add_argument("--abi", type=Path, required=True)
100
+ ap.add_argument("--out-dir", type=Path, required=True)
101
+ ns = ap.parse_args()
102
+ nodes = read_abi_nodes(ns.abi)
103
+ write_models(ns.out_dir, nodes)
104
+ return 0
105
+
106
+
107
+ if __name__ == "__main__":
108
+ raise SystemExit(main())
109
+
@@ -0,0 +1,86 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import re
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+
10
+ def slot_to_ident(slot: str) -> str:
11
+ s = slot.upper()
12
+ s = re.sub(r"[^A-Z0-9]+", "_", s).strip("_")
13
+ if not s:
14
+ return "UNKNOWN"
15
+ if s[0].isdigit():
16
+ s = f"S_{s}"
17
+ return s
18
+
19
+
20
+ def load_slots(abi_path: Path) -> list[str]:
21
+ raw: dict[str, Any] = json.loads(abi_path.read_text(encoding="utf-8"))
22
+ nodes = raw.get("nodes")
23
+ if not isinstance(nodes, list):
24
+ raise ValueError("ABI missing nodes[]")
25
+ out: list[str] = []
26
+ seen: set[str] = set()
27
+ for n in nodes:
28
+ if not isinstance(n, dict):
29
+ continue
30
+ s = n.get("nodeSlot")
31
+ if isinstance(s, str) and s and s not in seen:
32
+ seen.add(s)
33
+ out.append(s)
34
+ return out
35
+
36
+
37
+ def generate_node_slots_py(slots: list[str]) -> str:
38
+ lines: list[str] = []
39
+ lines.append('"""Generated from config/tongflow.abi.json. DO NOT EDIT."""')
40
+ lines.append("")
41
+ lines.append("from __future__ import annotations")
42
+ lines.append("")
43
+ lines.append("import re")
44
+ lines.append("from typing import Final")
45
+ lines.append("")
46
+ lines.append("")
47
+ lines.append("def _slot_to_ident(slot: str) -> str:")
48
+ lines.append(" s = slot.upper()")
49
+ lines.append(" s = re.sub(r\"[^A-Z0-9]+\", \"_\", s).strip(\"_\")")
50
+ lines.append(" if not s:")
51
+ lines.append(" return \"UNKNOWN\"")
52
+ lines.append(" if s[0].isdigit():")
53
+ lines.append(" s = f\"S_{s}\"")
54
+ lines.append(" return s")
55
+ lines.append("")
56
+ lines.append("")
57
+ lines.append("class NodeSlots:")
58
+ lines.append(" \"\"\"ABI nodeSlot constants. Use these in @node_slot(...)\"\"\"")
59
+ for slot in slots:
60
+ ident = slot_to_ident(slot)
61
+ lines.append(f" {ident}: Final[str] = {slot!r}")
62
+ lines.append("")
63
+ lines.append("")
64
+ lines.append("ALL_NODE_SLOTS: Final[tuple[str, ...]] = (")
65
+ for slot in slots:
66
+ lines.append(f" {slot!r},")
67
+ lines.append(")")
68
+ lines.append("")
69
+ return "\n".join(lines) + "\n"
70
+
71
+
72
+ def main() -> int:
73
+ ap = argparse.ArgumentParser()
74
+ ap.add_argument("--abi", type=Path, required=True)
75
+ ap.add_argument("--out", type=Path, required=True)
76
+ ns = ap.parse_args()
77
+
78
+ slots = load_slots(ns.abi)
79
+ text = generate_node_slots_py(slots)
80
+ ns.out.write_text(text, encoding="utf-8")
81
+ return 0
82
+
83
+
84
+ if __name__ == "__main__":
85
+ raise SystemExit(main())
86
+
@@ -0,0 +1 @@
1
+ """Generated models from tongflow ABI."""
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ArrangeGroupInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ArrangeGroupOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TypedDict
4
+
5
+
6
+ class Asset(TypedDict, total=False):
7
+ bytesBase64: str
8
+ filename: str
9
+ mime: str
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class AudioImageGenVideoInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class AudioImageGenVideoOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class CombineTextInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class CombineTextOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ConcatVideosInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ConcatVideosOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class DropVideoInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class DropVideoOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ExtractAudioInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ExtractAudioOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenMusicInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenMusicOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenSpeechInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenSpeechOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenTextInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenTextOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenTextGeminiInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenTextGeminiOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenTextOpenaiInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenTextOpenaiOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GenVideoInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GenVideoOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GetFirstFrameInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GetFirstFrameOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class GetLastFrameInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class GetLastFrameOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageDescribeInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageDescribeOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageEditInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageEditOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageFusionInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageFusionOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageGenInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageGenOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageGenModelInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageGenModelOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageGenTextInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageGenTextOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, TypedDict
4
+
5
+
6
+ class ImageGenVideoInput(TypedDict, total=False):
7
+ """Fallback generic input. Tighten via ABI later."""
8
+ _data: dict[str, Any]
9
+
10
+
11
+ class ImageGenVideoOutput(TypedDict, total=False):
12
+ """Fallback generic output. Tighten via ABI later."""
13
+ _data: dict[str, Any]