kiapi 0.1.0__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 (610) hide show
  1. kiapi-0.1.0/.gitignore +24 -0
  2. kiapi-0.1.0/ARCHITECTURE.ja.md +468 -0
  3. kiapi-0.1.0/ARCHITECTURE.md +324 -0
  4. kiapi-0.1.0/CHANGELOG.md +28 -0
  5. kiapi-0.1.0/CONTRIBUTING.md +74 -0
  6. kiapi-0.1.0/LICENSE +21 -0
  7. kiapi-0.1.0/PKG-INFO +337 -0
  8. kiapi-0.1.0/README.ja.md +288 -0
  9. kiapi-0.1.0/README.md +290 -0
  10. kiapi-0.1.0/SECURITY.md +41 -0
  11. kiapi-0.1.0/kiapi/__init__.py +3 -0
  12. kiapi-0.1.0/kiapi/__main__.py +4 -0
  13. kiapi-0.1.0/kiapi/api/__init__.py +26 -0
  14. kiapi-0.1.0/kiapi/api/_constants/require_auth.py +14 -0
  15. kiapi-0.1.0/kiapi/api/_helpers/build_job_responses.py +73 -0
  16. kiapi-0.1.0/kiapi/api/_helpers/build_openapi.py +55 -0
  17. kiapi-0.1.0/kiapi/api/_helpers/build_train_responses.py +21 -0
  18. kiapi-0.1.0/kiapi/api/_helpers/get_accept.py +20 -0
  19. kiapi-0.1.0/kiapi/api/_helpers/get_ctx.py +7 -0
  20. kiapi-0.1.0/kiapi/api/_helpers/get_worker.py +7 -0
  21. kiapi-0.1.0/kiapi/api/_helpers/register_capability_endpoints.py +70 -0
  22. kiapi-0.1.0/kiapi/api/_helpers/submit_and_maybe_wait.py +113 -0
  23. kiapi-0.1.0/kiapi/api/_settings.py +50 -0
  24. kiapi-0.1.0/kiapi/api/_views/async_job_response.py +21 -0
  25. kiapi-0.1.0/kiapi/api/_views/capability_model_spec.py +49 -0
  26. kiapi-0.1.0/kiapi/api/app.py +150 -0
  27. kiapi-0.1.0/kiapi/api/audio/acestep/_views/extract_response.py +57 -0
  28. kiapi-0.1.0/kiapi/api/audio/acestep/_views/track_response.py +57 -0
  29. kiapi-0.1.0/kiapi/api/audio/acestep/router.py +190 -0
  30. kiapi-0.1.0/kiapi/api/audio/audiogen/_views/audio_response.py +46 -0
  31. kiapi-0.1.0/kiapi/api/audio/audiogen/router.py +77 -0
  32. kiapi-0.1.0/kiapi/api/chat/_views/chat_completion_response.py +71 -0
  33. kiapi-0.1.0/kiapi/api/chat/router.py +253 -0
  34. kiapi-0.1.0/kiapi/api/embedding/_views/embedding_response.py +35 -0
  35. kiapi-0.1.0/kiapi/api/embedding/router.py +82 -0
  36. kiapi-0.1.0/kiapi/api/files/_operations/get_file.py +14 -0
  37. kiapi-0.1.0/kiapi/api/files/_operations/get_file_id.py +18 -0
  38. kiapi-0.1.0/kiapi/api/files/_views/file_delete_response.py +14 -0
  39. kiapi-0.1.0/kiapi/api/files/_views/file_list_response.py +15 -0
  40. kiapi-0.1.0/kiapi/api/files/router.py +105 -0
  41. kiapi-0.1.0/kiapi/api/health/_views/health_response.py +26 -0
  42. kiapi-0.1.0/kiapi/api/health/router.py +28 -0
  43. kiapi-0.1.0/kiapi/api/image/depthpro/_views/estimate_response.py +70 -0
  44. kiapi-0.1.0/kiapi/api/image/depthpro/router.py +81 -0
  45. kiapi-0.1.0/kiapi/api/image/ernie/_views/image_response.py +50 -0
  46. kiapi-0.1.0/kiapi/api/image/ernie/router.py +181 -0
  47. kiapi-0.1.0/kiapi/api/image/flux2/_views/image_response.py +53 -0
  48. kiapi-0.1.0/kiapi/api/image/flux2/router.py +197 -0
  49. kiapi-0.1.0/kiapi/api/image/ideogram4/_views/image_response.py +55 -0
  50. kiapi-0.1.0/kiapi/api/image/ideogram4/router.py +87 -0
  51. kiapi-0.1.0/kiapi/api/image/qwen/_views/image_response.py +47 -0
  52. kiapi-0.1.0/kiapi/api/image/qwen/router.py +141 -0
  53. kiapi-0.1.0/kiapi/api/image/seedvr2/_views/image_response.py +50 -0
  54. kiapi-0.1.0/kiapi/api/image/seedvr2/router.py +83 -0
  55. kiapi-0.1.0/kiapi/api/image/zimage/_views/image_response.py +49 -0
  56. kiapi-0.1.0/kiapi/api/image/zimage/router.py +131 -0
  57. kiapi-0.1.0/kiapi/api/jobs/_operations/get_job_id.py +18 -0
  58. kiapi-0.1.0/kiapi/api/jobs/_views/job_delete_response.py +19 -0
  59. kiapi-0.1.0/kiapi/api/jobs/_views/job_list_response.py +15 -0
  60. kiapi-0.1.0/kiapi/api/jobs/router.py +62 -0
  61. kiapi-0.1.0/kiapi/api/models/_schemas/openai_model_spec.py +26 -0
  62. kiapi-0.1.0/kiapi/api/models/_views/model_list_response.py +15 -0
  63. kiapi-0.1.0/kiapi/api/models/router.py +29 -0
  64. kiapi-0.1.0/kiapi/api/video/ltx2/_views/__init__.py +1 -0
  65. kiapi-0.1.0/kiapi/api/video/ltx2/_views/video_response.py +59 -0
  66. kiapi-0.1.0/kiapi/api/video/ltx2/router.py +89 -0
  67. kiapi-0.1.0/kiapi/api/web/_views/__init__.py +7 -0
  68. kiapi-0.1.0/kiapi/api/web/_views/fetch_api_request.py +26 -0
  69. kiapi-0.1.0/kiapi/api/web/_views/fetch_error_response.py +25 -0
  70. kiapi-0.1.0/kiapi/api/web/router.py +302 -0
  71. kiapi-0.1.0/kiapi/capabilities/__init__.py +24 -0
  72. kiapi-0.1.0/kiapi/capabilities/_exceptions/CapabilityError.py +2 -0
  73. kiapi-0.1.0/kiapi/capabilities/_exceptions/ValidationError.py +2 -0
  74. kiapi-0.1.0/kiapi/capabilities/_helpers/attach_mflux_progress.py +50 -0
  75. kiapi-0.1.0/kiapi/capabilities/_helpers/get_file_path.py +20 -0
  76. kiapi-0.1.0/kiapi/capabilities/_helpers/resolve_file_ref.py +16 -0
  77. kiapi-0.1.0/kiapi/capabilities/acestep/README.ja.md +174 -0
  78. kiapi-0.1.0/kiapi/capabilities/acestep/README.md +167 -0
  79. kiapi-0.1.0/kiapi/capabilities/acestep/__init__.py +37 -0
  80. kiapi-0.1.0/kiapi/capabilities/acestep/_constants/description.py +122 -0
  81. kiapi-0.1.0/kiapi/capabilities/acestep/_exceptions/ace_step_engine_error.py +2 -0
  82. kiapi-0.1.0/kiapi/capabilities/acestep/_helpers/register.py +96 -0
  83. kiapi-0.1.0/kiapi/capabilities/acestep/_models/acestep.py +105 -0
  84. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_cover.py +23 -0
  85. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_extract.py +38 -0
  86. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_generate.py +18 -0
  87. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_repaint.py +25 -0
  88. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_ace_step_paths.py +30 -0
  89. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_cover_params.py +21 -0
  90. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_engine.py +10 -0
  91. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_extract_params.py +24 -0
  92. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_generate_params.py +18 -0
  93. kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_repaint_params.py +22 -0
  94. kiapi-0.1.0/kiapi/capabilities/acestep/_schemas/ace_step_paths.py +29 -0
  95. kiapi-0.1.0/kiapi/capabilities/acestep/_services/ace_step_engine.py +143 -0
  96. kiapi-0.1.0/kiapi/capabilities/acestep/_settings.py +82 -0
  97. kiapi-0.1.0/kiapi/capabilities/acestep/_views/ace_step_base.py +61 -0
  98. kiapi-0.1.0/kiapi/capabilities/acestep/_views/cover_params.py +26 -0
  99. kiapi-0.1.0/kiapi/capabilities/acestep/_views/cover_request.py +49 -0
  100. kiapi-0.1.0/kiapi/capabilities/acestep/_views/extract_params.py +24 -0
  101. kiapi-0.1.0/kiapi/capabilities/acestep/_views/extract_request.py +33 -0
  102. kiapi-0.1.0/kiapi/capabilities/acestep/_views/generate_params.py +25 -0
  103. kiapi-0.1.0/kiapi/capabilities/acestep/_views/generate_request.py +54 -0
  104. kiapi-0.1.0/kiapi/capabilities/acestep/_views/repaint_params.py +27 -0
  105. kiapi-0.1.0/kiapi/capabilities/acestep/_views/repaint_request.py +51 -0
  106. kiapi-0.1.0/kiapi/capabilities/acestep/_views/track_params.py +7 -0
  107. kiapi-0.1.0/kiapi/capabilities/acestep/worker_subprocess.py +247 -0
  108. kiapi-0.1.0/kiapi/capabilities/audiogen/README.ja.md +49 -0
  109. kiapi-0.1.0/kiapi/capabilities/audiogen/README.md +48 -0
  110. kiapi-0.1.0/kiapi/capabilities/audiogen/__init__.py +25 -0
  111. kiapi-0.1.0/kiapi/capabilities/audiogen/_constants/description.py +60 -0
  112. kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/attach_audiogen_progress.py +27 -0
  113. kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/register.py +42 -0
  114. kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/validate_generate.py +14 -0
  115. kiapi-0.1.0/kiapi/capabilities/audiogen/_models/audiogen.py +98 -0
  116. kiapi-0.1.0/kiapi/capabilities/audiogen/_operations/handle_generate.py +27 -0
  117. kiapi-0.1.0/kiapi/capabilities/audiogen/_operations/resolve_generate_params.py +25 -0
  118. kiapi-0.1.0/kiapi/capabilities/audiogen/_settings.py +34 -0
  119. kiapi-0.1.0/kiapi/capabilities/audiogen/_views/generate_params.py +14 -0
  120. kiapi-0.1.0/kiapi/capabilities/audiogen/_views/generate_request.py +96 -0
  121. kiapi-0.1.0/kiapi/capabilities/chat/README.ja.md +822 -0
  122. kiapi-0.1.0/kiapi/capabilities/chat/README.md +806 -0
  123. kiapi-0.1.0/kiapi/capabilities/chat/__init__.py +25 -0
  124. kiapi-0.1.0/kiapi/capabilities/chat/_constants/description.py +163 -0
  125. kiapi-0.1.0/kiapi/capabilities/chat/_helpers/register.py +67 -0
  126. kiapi-0.1.0/kiapi/capabilities/chat/_models/qwen3_5.py +183 -0
  127. kiapi-0.1.0/kiapi/capabilities/chat/_models/qwen3_omni.py +242 -0
  128. kiapi-0.1.0/kiapi/capabilities/chat/_operations/apply_template.py +74 -0
  129. kiapi-0.1.0/kiapi/capabilities/chat/_operations/completed_hermes_tool_call_text.py +9 -0
  130. kiapi-0.1.0/kiapi/capabilities/chat/_operations/emit_streaming_response.py +297 -0
  131. kiapi-0.1.0/kiapi/capabilities/chat/_operations/ensure_streaming_detokenizer_compat.py +49 -0
  132. kiapi-0.1.0/kiapi/capabilities/chat/_operations/format_response.py +72 -0
  133. kiapi-0.1.0/kiapi/capabilities/chat/_operations/handle_chat.py +25 -0
  134. kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_hermes_tool_calls.py +63 -0
  135. kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_json_tool_calls.py +66 -0
  136. kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_messages.py +326 -0
  137. kiapi-0.1.0/kiapi/capabilities/chat/_operations/resolve_chat_params.py +50 -0
  138. kiapi-0.1.0/kiapi/capabilities/chat/_operations/stream_text_from_tokens.py +32 -0
  139. kiapi-0.1.0/kiapi/capabilities/chat/_operations/strip_tool_calls.py +15 -0
  140. kiapi-0.1.0/kiapi/capabilities/chat/_settings.py +74 -0
  141. kiapi-0.1.0/kiapi/capabilities/chat/_utils/apply_parallel_tool_call_policy.py +17 -0
  142. kiapi-0.1.0/kiapi/capabilities/chat/_utils/apply_seed.py +8 -0
  143. kiapi-0.1.0/kiapi/capabilities/chat/_utils/load_audio_mono.py +31 -0
  144. kiapi-0.1.0/kiapi/capabilities/chat/_utils/load_mlx_vlm.py +12 -0
  145. kiapi-0.1.0/kiapi/capabilities/chat/_utils/warmup_params.py +26 -0
  146. kiapi-0.1.0/kiapi/capabilities/chat/_views/chat_params.py +34 -0
  147. kiapi-0.1.0/kiapi/capabilities/chat/_views/chat_request.py +153 -0
  148. kiapi-0.1.0/kiapi/capabilities/depthpro/README.ja.md +131 -0
  149. kiapi-0.1.0/kiapi/capabilities/depthpro/README.md +124 -0
  150. kiapi-0.1.0/kiapi/capabilities/depthpro/__init__.py +23 -0
  151. kiapi-0.1.0/kiapi/capabilities/depthpro/_constants/description.py +39 -0
  152. kiapi-0.1.0/kiapi/capabilities/depthpro/_helpers/register.py +46 -0
  153. kiapi-0.1.0/kiapi/capabilities/depthpro/_helpers/validate_estimate.py +32 -0
  154. kiapi-0.1.0/kiapi/capabilities/depthpro/_models/depthpro.py +144 -0
  155. kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/handle_estimate.py +50 -0
  156. kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/is_quantize_override.py +12 -0
  157. kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/resolve_estimate_params.py +24 -0
  158. kiapi-0.1.0/kiapi/capabilities/depthpro/_settings.py +46 -0
  159. kiapi-0.1.0/kiapi/capabilities/depthpro/_views/estimate_params.py +21 -0
  160. kiapi-0.1.0/kiapi/capabilities/depthpro/_views/estimate_request.py +63 -0
  161. kiapi-0.1.0/kiapi/capabilities/embedding/README.ja.md +137 -0
  162. kiapi-0.1.0/kiapi/capabilities/embedding/README.md +128 -0
  163. kiapi-0.1.0/kiapi/capabilities/embedding/__init__.py +24 -0
  164. kiapi-0.1.0/kiapi/capabilities/embedding/_constants/description.py +47 -0
  165. kiapi-0.1.0/kiapi/capabilities/embedding/_helpers/register.py +66 -0
  166. kiapi-0.1.0/kiapi/capabilities/embedding/_models/qwen3_text.py +53 -0
  167. kiapi-0.1.0/kiapi/capabilities/embedding/_models/qwen3_vl.py +97 -0
  168. kiapi-0.1.0/kiapi/capabilities/embedding/_operations/format_response.py +24 -0
  169. kiapi-0.1.0/kiapi/capabilities/embedding/_operations/handle_embed.py +24 -0
  170. kiapi-0.1.0/kiapi/capabilities/embedding/_operations/parse_inputs.py +108 -0
  171. kiapi-0.1.0/kiapi/capabilities/embedding/_operations/resolve_embed_params.py +18 -0
  172. kiapi-0.1.0/kiapi/capabilities/embedding/_settings.py +27 -0
  173. kiapi-0.1.0/kiapi/capabilities/embedding/_utils/to_vector.py +20 -0
  174. kiapi-0.1.0/kiapi/capabilities/embedding/_views/embed_params.py +17 -0
  175. kiapi-0.1.0/kiapi/capabilities/embedding/_views/embed_request.py +39 -0
  176. kiapi-0.1.0/kiapi/capabilities/ernie/README.ja.md +242 -0
  177. kiapi-0.1.0/kiapi/capabilities/ernie/README.md +223 -0
  178. kiapi-0.1.0/kiapi/capabilities/ernie/__init__.py +34 -0
  179. kiapi-0.1.0/kiapi/capabilities/ernie/_constants/description.py +71 -0
  180. kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/register.py +60 -0
  181. kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/validate_edit.py +19 -0
  182. kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/validate_generate.py +8 -0
  183. kiapi-0.1.0/kiapi/capabilities/ernie/_models/ernie.py +356 -0
  184. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_edit.py +39 -0
  185. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_generate.py +38 -0
  186. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_train.py +77 -0
  187. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/is_quantize_override.py +16 -0
  188. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_edit_params.py +44 -0
  189. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_generate_params.py +40 -0
  190. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_lora_params.py +23 -0
  191. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_train_params.py +43 -0
  192. kiapi-0.1.0/kiapi/capabilities/ernie/_operations/validate_common.py +33 -0
  193. kiapi-0.1.0/kiapi/capabilities/ernie/_schemas/lora_ref.py +27 -0
  194. kiapi-0.1.0/kiapi/capabilities/ernie/_settings.py +151 -0
  195. kiapi-0.1.0/kiapi/capabilities/ernie/_views/edit_params.py +36 -0
  196. kiapi-0.1.0/kiapi/capabilities/ernie/_views/edit_request.py +142 -0
  197. kiapi-0.1.0/kiapi/capabilities/ernie/_views/generate_params.py +32 -0
  198. kiapi-0.1.0/kiapi/capabilities/ernie/_views/generate_request.py +127 -0
  199. kiapi-0.1.0/kiapi/capabilities/ernie/_views/train_params.py +28 -0
  200. kiapi-0.1.0/kiapi/capabilities/ernie/_views/train_request.py +96 -0
  201. kiapi-0.1.0/kiapi/capabilities/flux2/README.ja.md +260 -0
  202. kiapi-0.1.0/kiapi/capabilities/flux2/README.md +241 -0
  203. kiapi-0.1.0/kiapi/capabilities/flux2/__init__.py +36 -0
  204. kiapi-0.1.0/kiapi/capabilities/flux2/_constants/description.py +81 -0
  205. kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/register.py +98 -0
  206. kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/validate_edit.py +12 -0
  207. kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/validate_generate.py +8 -0
  208. kiapi-0.1.0/kiapi/capabilities/flux2/_models/flux2.py +396 -0
  209. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_edit.py +44 -0
  210. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_generate.py +46 -0
  211. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_train.py +105 -0
  212. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/is_quantize_override.py +16 -0
  213. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_edit_params.py +43 -0
  214. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_generate_params.py +44 -0
  215. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_lora_params.py +23 -0
  216. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_train_params.py +42 -0
  217. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/role_spec.py +13 -0
  218. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/split_repo.py +11 -0
  219. kiapi-0.1.0/kiapi/capabilities/flux2/_operations/validate_common.py +35 -0
  220. kiapi-0.1.0/kiapi/capabilities/flux2/_schemas/lora_ref.py +27 -0
  221. kiapi-0.1.0/kiapi/capabilities/flux2/_settings.py +181 -0
  222. kiapi-0.1.0/kiapi/capabilities/flux2/_views/edit_params.py +36 -0
  223. kiapi-0.1.0/kiapi/capabilities/flux2/_views/edit_request.py +145 -0
  224. kiapi-0.1.0/kiapi/capabilities/flux2/_views/generate_params.py +36 -0
  225. kiapi-0.1.0/kiapi/capabilities/flux2/_views/generate_request.py +150 -0
  226. kiapi-0.1.0/kiapi/capabilities/flux2/_views/train_params.py +32 -0
  227. kiapi-0.1.0/kiapi/capabilities/flux2/_views/train_request.py +102 -0
  228. kiapi-0.1.0/kiapi/capabilities/ideogram4/README.ja.md +230 -0
  229. kiapi-0.1.0/kiapi/capabilities/ideogram4/README.md +219 -0
  230. kiapi-0.1.0/kiapi/capabilities/ideogram4/__init__.py +24 -0
  231. kiapi-0.1.0/kiapi/capabilities/ideogram4/_constants/description.py +65 -0
  232. kiapi-0.1.0/kiapi/capabilities/ideogram4/_helpers/register.py +44 -0
  233. kiapi-0.1.0/kiapi/capabilities/ideogram4/_helpers/validate_generate.py +31 -0
  234. kiapi-0.1.0/kiapi/capabilities/ideogram4/_models/ideogram4.py +120 -0
  235. kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/handle_generate.py +30 -0
  236. kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/is_quantize_override.py +12 -0
  237. kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/resolve_generate_params.py +30 -0
  238. kiapi-0.1.0/kiapi/capabilities/ideogram4/_settings.py +89 -0
  239. kiapi-0.1.0/kiapi/capabilities/ideogram4/_views/generate_params.py +27 -0
  240. kiapi-0.1.0/kiapi/capabilities/ideogram4/_views/generate_request.py +118 -0
  241. kiapi-0.1.0/kiapi/capabilities/ltx2/README.ja.md +287 -0
  242. kiapi-0.1.0/kiapi/capabilities/ltx2/README.md +274 -0
  243. kiapi-0.1.0/kiapi/capabilities/ltx2/__init__.py +26 -0
  244. kiapi-0.1.0/kiapi/capabilities/ltx2/_constants/description.py +81 -0
  245. kiapi-0.1.0/kiapi/capabilities/ltx2/_helpers/register.py +58 -0
  246. kiapi-0.1.0/kiapi/capabilities/ltx2/_helpers/validate_generate.py +42 -0
  247. kiapi-0.1.0/kiapi/capabilities/ltx2/_models/ltx2.py +106 -0
  248. kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/detect_mode.py +19 -0
  249. kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/handle_generate.py +52 -0
  250. kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/resolve_generate_params.py +31 -0
  251. kiapi-0.1.0/kiapi/capabilities/ltx2/_settings.py +93 -0
  252. kiapi-0.1.0/kiapi/capabilities/ltx2/_views/generate_params.py +34 -0
  253. kiapi-0.1.0/kiapi/capabilities/ltx2/_views/generate_request.py +151 -0
  254. kiapi-0.1.0/kiapi/capabilities/qwen/README.ja.md +251 -0
  255. kiapi-0.1.0/kiapi/capabilities/qwen/README.md +235 -0
  256. kiapi-0.1.0/kiapi/capabilities/qwen/__init__.py +30 -0
  257. kiapi-0.1.0/kiapi/capabilities/qwen/_constants/description.py +53 -0
  258. kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/register.py +60 -0
  259. kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/validate_edit.py +12 -0
  260. kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/validate_generate.py +12 -0
  261. kiapi-0.1.0/kiapi/capabilities/qwen/_models/qwen.py +224 -0
  262. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/handle_edit.py +44 -0
  263. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/handle_generate.py +46 -0
  264. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/is_quantize_override.py +15 -0
  265. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_edit_params.py +35 -0
  266. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_generate_params.py +39 -0
  267. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_lora_params.py +23 -0
  268. kiapi-0.1.0/kiapi/capabilities/qwen/_operations/validate_common.py +32 -0
  269. kiapi-0.1.0/kiapi/capabilities/qwen/_schemas/lora_ref.py +27 -0
  270. kiapi-0.1.0/kiapi/capabilities/qwen/_settings.py +107 -0
  271. kiapi-0.1.0/kiapi/capabilities/qwen/_views/edit_params.py +36 -0
  272. kiapi-0.1.0/kiapi/capabilities/qwen/_views/edit_request.py +138 -0
  273. kiapi-0.1.0/kiapi/capabilities/qwen/_views/generate_params.py +37 -0
  274. kiapi-0.1.0/kiapi/capabilities/qwen/_views/generate_request.py +149 -0
  275. kiapi-0.1.0/kiapi/capabilities/seedvr2/README.ja.md +234 -0
  276. kiapi-0.1.0/kiapi/capabilities/seedvr2/README.md +219 -0
  277. kiapi-0.1.0/kiapi/capabilities/seedvr2/__init__.py +24 -0
  278. kiapi-0.1.0/kiapi/capabilities/seedvr2/_constants/description.py +46 -0
  279. kiapi-0.1.0/kiapi/capabilities/seedvr2/_helpers/register.py +60 -0
  280. kiapi-0.1.0/kiapi/capabilities/seedvr2/_helpers/validate_upscale.py +52 -0
  281. kiapi-0.1.0/kiapi/capabilities/seedvr2/_models/seedvr2.py +140 -0
  282. kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/handle_upscale.py +42 -0
  283. kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/is_quantize_override.py +12 -0
  284. kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/resolve_upscale_params.py +30 -0
  285. kiapi-0.1.0/kiapi/capabilities/seedvr2/_settings.py +74 -0
  286. kiapi-0.1.0/kiapi/capabilities/seedvr2/_views/upscale_params.py +27 -0
  287. kiapi-0.1.0/kiapi/capabilities/seedvr2/_views/upscale_request.py +94 -0
  288. kiapi-0.1.0/kiapi/capabilities/web/README.ja.md +187 -0
  289. kiapi-0.1.0/kiapi/capabilities/web/README.md +171 -0
  290. kiapi-0.1.0/kiapi/capabilities/web/__init__.py +30 -0
  291. kiapi-0.1.0/kiapi/capabilities/web/_constants/description.py +38 -0
  292. kiapi-0.1.0/kiapi/capabilities/web/_exceptions/FetchError.py +24 -0
  293. kiapi-0.1.0/kiapi/capabilities/web/_exceptions/SearchBackendError.py +11 -0
  294. kiapi-0.1.0/kiapi/capabilities/web/_helpers/register.py +59 -0
  295. kiapi-0.1.0/kiapi/capabilities/web/_models/crawl4ai.py +32 -0
  296. kiapi-0.1.0/kiapi/capabilities/web/_models/searxng.py +44 -0
  297. kiapi-0.1.0/kiapi/capabilities/web/_operations/handle_fetch.py +145 -0
  298. kiapi-0.1.0/kiapi/capabilities/web/_operations/handle_search.py +56 -0
  299. kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_fetch_params.py +19 -0
  300. kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_search_params.py +34 -0
  301. kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_searxng_config_dir.py +21 -0
  302. kiapi-0.1.0/kiapi/capabilities/web/_services/__init__.py +1 -0
  303. kiapi-0.1.0/kiapi/capabilities/web/_services/web_backend_process.py +144 -0
  304. kiapi-0.1.0/kiapi/capabilities/web/_settings.py +138 -0
  305. kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_params.py +27 -0
  306. kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_request.py +29 -0
  307. kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_result.py +20 -0
  308. kiapi-0.1.0/kiapi/capabilities/web/_views/search_params.py +43 -0
  309. kiapi-0.1.0/kiapi/capabilities/web/_views/search_request.py +93 -0
  310. kiapi-0.1.0/kiapi/capabilities/web/_views/search_response.py +49 -0
  311. kiapi-0.1.0/kiapi/capabilities/web/resources/__init__.py +0 -0
  312. kiapi-0.1.0/kiapi/capabilities/web/resources/searxng/__init__.py +0 -0
  313. kiapi-0.1.0/kiapi/capabilities/web/resources/searxng/settings.yml +11 -0
  314. kiapi-0.1.0/kiapi/capabilities/zimage/README.ja.md +249 -0
  315. kiapi-0.1.0/kiapi/capabilities/zimage/README.md +231 -0
  316. kiapi-0.1.0/kiapi/capabilities/zimage/__init__.py +34 -0
  317. kiapi-0.1.0/kiapi/capabilities/zimage/_constants/description.py +73 -0
  318. kiapi-0.1.0/kiapi/capabilities/zimage/_helpers/register.py +62 -0
  319. kiapi-0.1.0/kiapi/capabilities/zimage/_helpers/validate_generate.py +37 -0
  320. kiapi-0.1.0/kiapi/capabilities/zimage/_models/zimage.py +278 -0
  321. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/handle_generate.py +38 -0
  322. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/handle_train.py +78 -0
  323. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/is_quantize_override.py +11 -0
  324. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_generate_params.py +39 -0
  325. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_lora_params.py +23 -0
  326. kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_train_params.py +38 -0
  327. kiapi-0.1.0/kiapi/capabilities/zimage/_schemas/lora_ref.py +27 -0
  328. kiapi-0.1.0/kiapi/capabilities/zimage/_settings.py +166 -0
  329. kiapi-0.1.0/kiapi/capabilities/zimage/_views/generate_params.py +23 -0
  330. kiapi-0.1.0/kiapi/capabilities/zimage/_views/generate_request.py +127 -0
  331. kiapi-0.1.0/kiapi/capabilities/zimage/_views/train_params.py +22 -0
  332. kiapi-0.1.0/kiapi/capabilities/zimage/_views/train_request.py +101 -0
  333. kiapi-0.1.0/kiapi/cli/__init__.py +11 -0
  334. kiapi-0.1.0/kiapi/cli/_helpers/dedupe_resources.py +12 -0
  335. kiapi-0.1.0/kiapi/cli/_helpers/register_all_capabilities.py +36 -0
  336. kiapi-0.1.0/kiapi/cli/_helpers/run_resources.py +24 -0
  337. kiapi-0.1.0/kiapi/cli/_helpers/select_specs.py +67 -0
  338. kiapi-0.1.0/kiapi/cli/activate/_operations/preflight_hf_access.py +129 -0
  339. kiapi-0.1.0/kiapi/cli/activate/cli.py +37 -0
  340. kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_acestep_turbo.py +22 -0
  341. kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_acestep_xl_base.py +22 -0
  342. kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_audiogen_medium.py +24 -0
  343. kiapi-0.1.0/kiapi/cli/check/_helpers/check_chat_chat_qwen3_6_27b.py +19 -0
  344. kiapi-0.1.0/kiapi/cli/check/_helpers/check_chat_chat_qwen3_omni.py +19 -0
  345. kiapi-0.1.0/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_embedding_8b.py +14 -0
  346. kiapi-0.1.0/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_vl_embedding_2b.py +19 -0
  347. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_depthpro_base.py +21 -0
  348. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ernie_base.py +23 -0
  349. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ernie_turbo.py +23 -0
  350. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_9b.py +23 -0
  351. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_base_4b.py +23 -0
  352. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_base_9b.py +23 -0
  353. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ideogram4_fp8.py +23 -0
  354. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_qwen_edit_2509.py +27 -0
  355. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_qwen_image.py +23 -0
  356. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_seedvr2_3b.py +23 -0
  357. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_seedvr2_7b.py +23 -0
  358. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_zimage_base.py +23 -0
  359. kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_zimage_turbo.py +23 -0
  360. kiapi-0.1.0/kiapi/cli/check/_helpers/check_video_ltx2_distilled.py +26 -0
  361. kiapi-0.1.0/kiapi/cli/check/_helpers/check_web_web_fetch.py +14 -0
  362. kiapi-0.1.0/kiapi/cli/check/_helpers/check_web_web_search.py +14 -0
  363. kiapi-0.1.0/kiapi/cli/check/_operations/build_check_result.py +20 -0
  364. kiapi-0.1.0/kiapi/cli/check/_operations/check_context.py +10 -0
  365. kiapi-0.1.0/kiapi/cli/check/_operations/create_sample_image.py +46 -0
  366. kiapi-0.1.0/kiapi/cli/check/_schemas/check_result.py +12 -0
  367. kiapi-0.1.0/kiapi/cli/check/cli.py +89 -0
  368. kiapi-0.1.0/kiapi/cli/cli.py +29 -0
  369. kiapi-0.1.0/kiapi/cli/config/cli.py +17 -0
  370. kiapi-0.1.0/kiapi/cli/config/edit/cli.py +32 -0
  371. kiapi-0.1.0/kiapi/cli/config/init/cli.py +33 -0
  372. kiapi-0.1.0/kiapi/cli/config/show/cli.py +13 -0
  373. kiapi-0.1.0/kiapi/cli/config/template/cli.py +36 -0
  374. kiapi-0.1.0/kiapi/cli/deactivate/cli.py +49 -0
  375. kiapi-0.1.0/kiapi/cli/run/asgi.py +16 -0
  376. kiapi-0.1.0/kiapi/cli/run/cli.py +59 -0
  377. kiapi-0.1.0/kiapi/cli/service/__init__.py +5 -0
  378. kiapi-0.1.0/kiapi/cli/service/_services/service_manager.py +107 -0
  379. kiapi-0.1.0/kiapi/cli/service/cli.py +19 -0
  380. kiapi-0.1.0/kiapi/cli/service/install/cli.py +17 -0
  381. kiapi-0.1.0/kiapi/cli/service/start/cli.py +22 -0
  382. kiapi-0.1.0/kiapi/cli/service/status/cli.py +81 -0
  383. kiapi-0.1.0/kiapi/cli/service/stop/cli.py +19 -0
  384. kiapi-0.1.0/kiapi/cli/service/uninstall/cli.py +16 -0
  385. kiapi-0.1.0/kiapi/cli/status/cli.py +226 -0
  386. kiapi-0.1.0/kiapi/core/app/__init__.py +16 -0
  387. kiapi-0.1.0/kiapi/core/app/_schemas/app_context.py +28 -0
  388. kiapi-0.1.0/kiapi/core/app/_services/user_directory.py +59 -0
  389. kiapi-0.1.0/kiapi/core/app/_settings.py +46 -0
  390. kiapi-0.1.0/kiapi/core/capability/__init__.py +11 -0
  391. kiapi-0.1.0/kiapi/core/capability/_schemas/capability_spec.py +17 -0
  392. kiapi-0.1.0/kiapi/core/capability/_services/capability_spec_registry.py +21 -0
  393. kiapi-0.1.0/kiapi/core/config/__init__.py +11 -0
  394. kiapi-0.1.0/kiapi/core/config/_exceptions/user_config_error.py +2 -0
  395. kiapi-0.1.0/kiapi/core/config/_helpers/get_user_settings_path.py +7 -0
  396. kiapi-0.1.0/kiapi/core/config/_helpers/load_user_settings.py +54 -0
  397. kiapi-0.1.0/kiapi/core/file/__init__.py +37 -0
  398. kiapi-0.1.0/kiapi/core/file/_helpers/create_file_store.py +7 -0
  399. kiapi-0.1.0/kiapi/core/file/_helpers/resolve_file_ref.py +90 -0
  400. kiapi-0.1.0/kiapi/core/file/_schemas/file_data_url_ref.py +19 -0
  401. kiapi-0.1.0/kiapi/core/file/_schemas/file_id_ref.py +16 -0
  402. kiapi-0.1.0/kiapi/core/file/_schemas/file_record.py +46 -0
  403. kiapi-0.1.0/kiapi/core/file/_schemas/file_url_ref.py +16 -0
  404. kiapi-0.1.0/kiapi/core/file/_services/file_store.py +138 -0
  405. kiapi-0.1.0/kiapi/core/file/_settings.py +22 -0
  406. kiapi-0.1.0/kiapi/core/file/_types/file_id.py +2 -0
  407. kiapi-0.1.0/kiapi/core/file/_types/file_ref.py +12 -0
  408. kiapi-0.1.0/kiapi/core/file/_views/resolved_file_ref.py +16 -0
  409. kiapi-0.1.0/kiapi/core/job/__init__.py +24 -0
  410. kiapi-0.1.0/kiapi/core/job/_enums/job_status.py +9 -0
  411. kiapi-0.1.0/kiapi/core/job/_helpers/creep_progress.py +123 -0
  412. kiapi-0.1.0/kiapi/core/job/_models/job.py +121 -0
  413. kiapi-0.1.0/kiapi/core/job/_services/job_store.py +33 -0
  414. kiapi-0.1.0/kiapi/core/job/_services/progress_reporter.py +79 -0
  415. kiapi-0.1.0/kiapi/core/job/_types/job_id.py +3 -0
  416. kiapi-0.1.0/kiapi/core/job/_types/job_result.py +5 -0
  417. kiapi-0.1.0/kiapi/core/job/_types/job_type.py +4 -0
  418. kiapi-0.1.0/kiapi/core/logging/__init__.py +14 -0
  419. kiapi-0.1.0/kiapi/core/logging/_helpers/get_log_level.py +8 -0
  420. kiapi-0.1.0/kiapi/core/logging/_helpers/setup_logger.py +14 -0
  421. kiapi-0.1.0/kiapi/core/logging/_settings.py +34 -0
  422. kiapi-0.1.0/kiapi/core/logging/_types/log_level.py +3 -0
  423. kiapi-0.1.0/kiapi/core/memory/__init__.py +21 -0
  424. kiapi-0.1.0/kiapi/core/memory/_exceptions/memory_budget_error.py +2 -0
  425. kiapi-0.1.0/kiapi/core/memory/_helpers/create_memory_manager.py +17 -0
  426. kiapi-0.1.0/kiapi/core/memory/_operations/log_memory_limit.py +29 -0
  427. kiapi-0.1.0/kiapi/core/memory/_operations/resolve_effective_memory_limit_gb.py +13 -0
  428. kiapi-0.1.0/kiapi/core/memory/_operations/resolve_framework_strategy.py +42 -0
  429. kiapi-0.1.0/kiapi/core/memory/_schemas/framework_strategy.py +14 -0
  430. kiapi-0.1.0/kiapi/core/memory/_schemas/memory_stats.py +24 -0
  431. kiapi-0.1.0/kiapi/core/memory/_schemas/resident_model.py +14 -0
  432. kiapi-0.1.0/kiapi/core/memory/_schemas/resident_model_stats.py +49 -0
  433. kiapi-0.1.0/kiapi/core/memory/_services/memory_manager.py +257 -0
  434. kiapi-0.1.0/kiapi/core/memory/_settings.py +36 -0
  435. kiapi-0.1.0/kiapi/core/memory/_types/framework_name.py +4 -0
  436. kiapi-0.1.0/kiapi/core/memory/_types/resident_key.py +4 -0
  437. kiapi-0.1.0/kiapi/core/model/__init__.py +36 -0
  438. kiapi-0.1.0/kiapi/core/model/_exceptions/unknown_model_error.py +2 -0
  439. kiapi-0.1.0/kiapi/core/model/_schemas/model_spec.py +145 -0
  440. kiapi-0.1.0/kiapi/core/model/_services/model_registry.py +85 -0
  441. kiapi-0.1.0/kiapi/core/model/_types/model_alias.py +2 -0
  442. kiapi-0.1.0/kiapi/core/model/_types/model_domain.py +6 -0
  443. kiapi-0.1.0/kiapi/core/model/_types/model_family.py +5 -0
  444. kiapi-0.1.0/kiapi/core/model/_types/model_key.py +8 -0
  445. kiapi-0.1.0/kiapi/core/model/_types/model_name.py +4 -0
  446. kiapi-0.1.0/kiapi/core/model/_types/model_repo.py +3 -0
  447. kiapi-0.1.0/kiapi/core/net/__init__.py +16 -0
  448. kiapi-0.1.0/kiapi/core/net/_exceptions/unsafe_url_error.py +7 -0
  449. kiapi-0.1.0/kiapi/core/net/_helpers/verify_public_url.py +68 -0
  450. kiapi-0.1.0/kiapi/core/net/_settings.py +28 -0
  451. kiapi-0.1.0/kiapi/core/setup/__init__.py +25 -0
  452. kiapi-0.1.0/kiapi/core/setup/_exceptions/setup_required_error.py +2 -0
  453. kiapi-0.1.0/kiapi/core/setup/_schemas/docker_image_resource.py +37 -0
  454. kiapi-0.1.0/kiapi/core/setup/_schemas/hf_snapshot_resource.py +50 -0
  455. kiapi-0.1.0/kiapi/core/setup/_schemas/local_path_resource.py +43 -0
  456. kiapi-0.1.0/kiapi/core/setup/_schemas/python_package_resource.py +58 -0
  457. kiapi-0.1.0/kiapi/core/setup/_schemas/python_venv_resource.py +63 -0
  458. kiapi-0.1.0/kiapi/core/setup/_schemas/setup_status.py +7 -0
  459. kiapi-0.1.0/kiapi/core/setup/_schemas/url_file_resource.py +43 -0
  460. kiapi-0.1.0/kiapi/core/setup/_services/setup_manager.py +331 -0
  461. kiapi-0.1.0/kiapi/core/setup/_types/setup_resource.py +21 -0
  462. kiapi-0.1.0/kiapi/core/setup/_types/setup_target.py +11 -0
  463. kiapi-0.1.0/kiapi/core/workdir/__init__.py +8 -0
  464. kiapi-0.1.0/kiapi/core/workdir/_helpers/create_work_dir.py +11 -0
  465. kiapi-0.1.0/kiapi/core/workdir/_settings.py +21 -0
  466. kiapi-0.1.0/kiapi/core/worker/__init__.py +23 -0
  467. kiapi-0.1.0/kiapi/core/worker/_helpers/create_worker.py +9 -0
  468. kiapi-0.1.0/kiapi/core/worker/_services/worker.py +165 -0
  469. kiapi-0.1.0/kiapi/core/worker/_settings.py +36 -0
  470. kiapi-0.1.0/kiapi/core/worker/_types/job_thunk.py +6 -0
  471. kiapi-0.1.0/mise.toml +3 -0
  472. kiapi-0.1.0/pyproject.toml +168 -0
  473. kiapi-0.1.0/tests/__init__.py +0 -0
  474. kiapi-0.1.0/tests/api/__init__.py +0 -0
  475. kiapi-0.1.0/tests/api/chat/__init__.py +0 -0
  476. kiapi-0.1.0/tests/api/chat/test_router.py +71 -0
  477. kiapi-0.1.0/tests/api/test_openapi.py +355 -0
  478. kiapi-0.1.0/tests/api/web/__init__.py +0 -0
  479. kiapi-0.1.0/tests/api/web/test_negotiate_format.py +31 -0
  480. kiapi-0.1.0/tests/capabilities/__init__.py +0 -0
  481. kiapi-0.1.0/tests/capabilities/_helpers/__init__.py +0 -0
  482. kiapi-0.1.0/tests/capabilities/_helpers/test_attach_mflux_progress.py +79 -0
  483. kiapi-0.1.0/tests/capabilities/acestep/__init__.py +1 -0
  484. kiapi-0.1.0/tests/capabilities/acestep/_helpers/__init__.py +1 -0
  485. kiapi-0.1.0/tests/capabilities/acestep/_helpers/test_register.py +46 -0
  486. kiapi-0.1.0/tests/capabilities/acestep/_operations/__init__.py +1 -0
  487. kiapi-0.1.0/tests/capabilities/acestep/_operations/test_handle_generate.py +52 -0
  488. kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_ace_step_paths.py +47 -0
  489. kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_extract_params.py +37 -0
  490. kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_generate_params.py +30 -0
  491. kiapi-0.1.0/tests/capabilities/acestep/_services/__init__.py +0 -0
  492. kiapi-0.1.0/tests/capabilities/acestep/_services/test_ace_step_engine.py +121 -0
  493. kiapi-0.1.0/tests/capabilities/acestep/_views/__init__.py +1 -0
  494. kiapi-0.1.0/tests/capabilities/acestep/_views/test_generate_request.py +18 -0
  495. kiapi-0.1.0/tests/capabilities/audiogen/__init__.py +1 -0
  496. kiapi-0.1.0/tests/capabilities/audiogen/_helpers/__init__.py +1 -0
  497. kiapi-0.1.0/tests/capabilities/audiogen/_helpers/test_validate_generate.py +19 -0
  498. kiapi-0.1.0/tests/capabilities/audiogen/_operations/__init__.py +1 -0
  499. kiapi-0.1.0/tests/capabilities/audiogen/_operations/test_resolve_generate_params.py +41 -0
  500. kiapi-0.1.0/tests/capabilities/chat/__init__.py +0 -0
  501. kiapi-0.1.0/tests/capabilities/chat/_operations/__init__.py +0 -0
  502. kiapi-0.1.0/tests/capabilities/chat/_operations/test_emit_streaming_response.py +232 -0
  503. kiapi-0.1.0/tests/capabilities/chat/_operations/test_ensure_streaming_detokenizer_compat.py +30 -0
  504. kiapi-0.1.0/tests/capabilities/chat/_operations/test_parse_messages.py +74 -0
  505. kiapi-0.1.0/tests/capabilities/chat/_operations/test_stream_text_from_tokens.py +51 -0
  506. kiapi-0.1.0/tests/capabilities/chat/_utils/__init__.py +0 -0
  507. kiapi-0.1.0/tests/capabilities/chat/_utils/test_apply_parallel_tool_call_policy.py +15 -0
  508. kiapi-0.1.0/tests/capabilities/ltx2/__init__.py +1 -0
  509. kiapi-0.1.0/tests/capabilities/ltx2/_helpers/__init__.py +1 -0
  510. kiapi-0.1.0/tests/capabilities/ltx2/_helpers/test_register.py +30 -0
  511. kiapi-0.1.0/tests/capabilities/ltx2/_helpers/test_validate_generate.py +31 -0
  512. kiapi-0.1.0/tests/capabilities/ltx2/_operations/__init__.py +1 -0
  513. kiapi-0.1.0/tests/capabilities/ltx2/_operations/test_detect_mode.py +76 -0
  514. kiapi-0.1.0/tests/capabilities/ltx2/_operations/test_resolve_generate_params.py +62 -0
  515. kiapi-0.1.0/tests/capabilities/web/__init__.py +0 -0
  516. kiapi-0.1.0/tests/capabilities/web/_operations/__init__.py +0 -0
  517. kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_fetch_params.py +38 -0
  518. kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_search_params.py +91 -0
  519. kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_searxng_config_dir.py +39 -0
  520. kiapi-0.1.0/tests/capabilities/web/_services/__init__.py +1 -0
  521. kiapi-0.1.0/tests/capabilities/web/_services/test_web_backend_process.py +70 -0
  522. kiapi-0.1.0/tests/capabilities/web/_views/__init__.py +0 -0
  523. kiapi-0.1.0/tests/capabilities/web/_views/test_fetch_request.py +27 -0
  524. kiapi-0.1.0/tests/capabilities/web/test_settings.py +7 -0
  525. kiapi-0.1.0/tests/capabilities/zimage/__init__.py +1 -0
  526. kiapi-0.1.0/tests/capabilities/zimage/_helpers/__init__.py +1 -0
  527. kiapi-0.1.0/tests/capabilities/zimage/_helpers/test_validate_generate.py +28 -0
  528. kiapi-0.1.0/tests/capabilities/zimage/_operations/__init__.py +1 -0
  529. kiapi-0.1.0/tests/capabilities/zimage/_operations/test_is_quantize_override.py +30 -0
  530. kiapi-0.1.0/tests/capabilities/zimage/_operations/test_resolve_generate_params.py +55 -0
  531. kiapi-0.1.0/tests/capabilities/zimage/_operations/test_resolve_train_params.py +47 -0
  532. kiapi-0.1.0/tests/cli/__init__.py +1 -0
  533. kiapi-0.1.0/tests/cli/activate/__init__.py +1 -0
  534. kiapi-0.1.0/tests/cli/activate/_operations/__init__.py +1 -0
  535. kiapi-0.1.0/tests/cli/activate/_operations/test_preflight_hf_access.py +157 -0
  536. kiapi-0.1.0/tests/cli/check/__init__.py +1 -0
  537. kiapi-0.1.0/tests/cli/check/_operations/test_resolve_check_operation.py +16 -0
  538. kiapi-0.1.0/tests/cli/config/__init__.py +1 -0
  539. kiapi-0.1.0/tests/cli/config/conftest.py +12 -0
  540. kiapi-0.1.0/tests/cli/config/edit/__init__.py +1 -0
  541. kiapi-0.1.0/tests/cli/config/edit/test_cli.py +40 -0
  542. kiapi-0.1.0/tests/cli/config/init/__init__.py +1 -0
  543. kiapi-0.1.0/tests/cli/config/init/test_cli.py +47 -0
  544. kiapi-0.1.0/tests/cli/config/show/__init__.py +1 -0
  545. kiapi-0.1.0/tests/cli/config/show/test_cli.py +22 -0
  546. kiapi-0.1.0/tests/cli/config/template/__init__.py +1 -0
  547. kiapi-0.1.0/tests/cli/config/template/test_cli.py +19 -0
  548. kiapi-0.1.0/tests/cli/service/__init__.py +1 -0
  549. kiapi-0.1.0/tests/cli/service/conftest.py +35 -0
  550. kiapi-0.1.0/tests/cli/service/install/__init__.py +1 -0
  551. kiapi-0.1.0/tests/cli/service/install/test_cli.py +24 -0
  552. kiapi-0.1.0/tests/cli/service/start/__init__.py +1 -0
  553. kiapi-0.1.0/tests/cli/service/start/test_cli.py +60 -0
  554. kiapi-0.1.0/tests/cli/service/status/__init__.py +1 -0
  555. kiapi-0.1.0/tests/cli/service/status/test_cli.py +35 -0
  556. kiapi-0.1.0/tests/cli/service/stop/__init__.py +1 -0
  557. kiapi-0.1.0/tests/cli/service/stop/test_cli.py +18 -0
  558. kiapi-0.1.0/tests/cli/service/uninstall/__init__.py +1 -0
  559. kiapi-0.1.0/tests/cli/service/uninstall/test_cli.py +26 -0
  560. kiapi-0.1.0/tests/cli/status/__init__.py +1 -0
  561. kiapi-0.1.0/tests/cli/status/test_cli.py +146 -0
  562. kiapi-0.1.0/tests/conftest.py +12 -0
  563. kiapi-0.1.0/tests/core/__init__.py +0 -0
  564. kiapi-0.1.0/tests/core/app/__init__.py +0 -0
  565. kiapi-0.1.0/tests/core/app/_schemas/test_app_context.py +7 -0
  566. kiapi-0.1.0/tests/core/app/_services/__init__.py +1 -0
  567. kiapi-0.1.0/tests/core/app/_services/test_user_directory.py +45 -0
  568. kiapi-0.1.0/tests/core/app/test_settings.py +11 -0
  569. kiapi-0.1.0/tests/core/config/__init__.py +1 -0
  570. kiapi-0.1.0/tests/core/config/_helpers/__init__.py +1 -0
  571. kiapi-0.1.0/tests/core/config/_helpers/test_get_user_settings_path.py +14 -0
  572. kiapi-0.1.0/tests/core/config/_helpers/test_load_user_settings.py +46 -0
  573. kiapi-0.1.0/tests/core/config/conftest.py +12 -0
  574. kiapi-0.1.0/tests/core/file/__init__.py +0 -0
  575. kiapi-0.1.0/tests/core/file/_helpers/test_create_file_store.py +7 -0
  576. kiapi-0.1.0/tests/core/file/_helpers/test_resolve_file_ref.py +46 -0
  577. kiapi-0.1.0/tests/core/file/_services/__init__.py +0 -0
  578. kiapi-0.1.0/tests/core/file/_services/test_file_store.py +137 -0
  579. kiapi-0.1.0/tests/core/file/test_settings.py +7 -0
  580. kiapi-0.1.0/tests/core/job/__init__.py +0 -0
  581. kiapi-0.1.0/tests/core/job/_helpers/test_creep_progress.py +111 -0
  582. kiapi-0.1.0/tests/core/job/_models/__init__.py +0 -0
  583. kiapi-0.1.0/tests/core/job/_models/test_job.py +74 -0
  584. kiapi-0.1.0/tests/core/job/_services/__init__.py +0 -0
  585. kiapi-0.1.0/tests/core/job/_services/test_job_store.py +53 -0
  586. kiapi-0.1.0/tests/core/job/_services/test_progress_reporter.py +74 -0
  587. kiapi-0.1.0/tests/core/memory/__init__.py +0 -0
  588. kiapi-0.1.0/tests/core/memory/_operations/__init__.py +1 -0
  589. kiapi-0.1.0/tests/core/memory/_operations/test_resolve_effective_memory_limit_gb.py +43 -0
  590. kiapi-0.1.0/tests/core/memory/_services/__init__.py +0 -0
  591. kiapi-0.1.0/tests/core/memory/_services/test_memory_manager.py +281 -0
  592. kiapi-0.1.0/tests/core/model/__init__.py +0 -0
  593. kiapi-0.1.0/tests/core/model/_schemas/__init__.py +0 -0
  594. kiapi-0.1.0/tests/core/model/_schemas/test_model_spec.py +52 -0
  595. kiapi-0.1.0/tests/core/model/_services/__init__.py +0 -0
  596. kiapi-0.1.0/tests/core/model/_services/test_model_registry.py +165 -0
  597. kiapi-0.1.0/tests/core/net/__init__.py +0 -0
  598. kiapi-0.1.0/tests/core/net/_helpers/__init__.py +0 -0
  599. kiapi-0.1.0/tests/core/net/_helpers/test_verify_public_url.py +74 -0
  600. kiapi-0.1.0/tests/core/setup/__init__.py +1 -0
  601. kiapi-0.1.0/tests/core/setup/_services/__init__.py +1 -0
  602. kiapi-0.1.0/tests/core/setup/_services/test_setup_manager.py +538 -0
  603. kiapi-0.1.0/tests/core/workdir/__init__.py +1 -0
  604. kiapi-0.1.0/tests/core/workdir/_helpers/__init__.py +1 -0
  605. kiapi-0.1.0/tests/core/workdir/_helpers/test_create_work_dir.py +15 -0
  606. kiapi-0.1.0/tests/core/workdir/test_settings.py +15 -0
  607. kiapi-0.1.0/tests/core/worker/__init__.py +0 -0
  608. kiapi-0.1.0/tests/core/worker/_services/__init__.py +0 -0
  609. kiapi-0.1.0/tests/core/worker/_services/test_worker.py +153 -0
  610. kiapi-0.1.0/tests/core/worker/test_settings.py +18 -0
kiapi-0.1.0/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+ .venv-acestep
12
+
13
+ # ace-step writes a progress-estimate cache under the project root
14
+ /.cache/
15
+
16
+ # Local service logs
17
+ *.log
18
+
19
+ # Local debugging files
20
+ /.tmp/
21
+ /.verify/
22
+
23
+ # Test assets downloaded via mise
24
+ tests/assets/
@@ -0,0 +1,468 @@
1
+ # kiapi アーキテクチャ
2
+
3
+ [English](ARCHITECTURE.md) | **日本語**
4
+
5
+ ## リポジトリ構成
6
+
7
+ - ファイル構成は Crystal Architecture を採用する
8
+ - [kiarina/crystal-architecture](https://github.com/kiarina/crystal-architecture)
9
+ - 設定管理は、Pydantic Settings Manager を採用する
10
+ - [kiarina/pydantic-settings-manager](https://github.com/kiarina/pydantic-settings-manager)
11
+
12
+ ```sh
13
+ kiapi/
14
+ core/ # 能力非依存の土台
15
+ app/ # アプリ全体のコンテキスト、起動配線、ユーザーディレクトリ解決
16
+ model/ # モデルレジストリ(全ファミリーの ModelSpec カタログ・resolve)
17
+ setup/ # セットアップ管理(HF snapshot / Docker image / local path の status・activate・deactivate)
18
+ memory/ # メモリ予算マネージャ(常駐管理・退避・TTL 掃引)
19
+ worker/ # シングルフライト worker(専用 1 スレッド + キュー)
20
+ job/ # 統一ジョブモデル + インメモリジョブストア
21
+ file/ # 統一ファイルストア(file_id 採番・メタ・ディスク保存)
22
+ workdir/ # 実行中の一時作業ディレクトリ管理
23
+ net/ # ネットワークガード(ユーザー指定 URL の SSRF 検証)
24
+ logging/ # ロギング設定
25
+
26
+ capabilities/ # ファミリーごとに 1 パッケージ(dir == family)
27
+ chat/ # OpenAI 互換 chat completions(マルチモーダル / tool / stream)
28
+ embedding/ # マルチモーダル embedding
29
+ zimage/ # 画像生成(Z-Image、LoRA 学習)
30
+ flux2/ # 画像生成・編集(FLUX.2 Klein)
31
+ qwen/ # 画像生成・編集(Qwen Image)
32
+ ideogram4/ # 画像生成(Ideogram 4、タイポグラフィ)
33
+ ernie/ # 画像生成・編集(ERNIE-Image)
34
+ seedvr2/ # 画像超解像(SeedVR2)
35
+ depthpro/ # 深度推定(Depth Pro)
36
+ acestep/ # 音楽生成(ACE-Step 1.5、別 venv のサブプロセス)
37
+ audiogen/ # 効果音生成(AudioGen)
38
+ ltx2/ # 動画生成(LTX-2)
39
+ web/ # Web 検索/取得(SearXNG + Crawl4AI resident subprocess)
40
+
41
+ api/ # FastAPI routers。生成系は domain/family で編成
42
+ chat/ # POST /v1/chat/completions
43
+ embedding/ # POST /v1/embedding
44
+ image/
45
+ zimage/ # POST /v1/image/zimage/{generate,train}
46
+ flux2/ # POST /v1/image/flux2/{generate,edit,train}
47
+ qwen/ # POST /v1/image/qwen/{generate,edit}
48
+ ideogram4/ # POST /v1/image/ideogram4/generate
49
+ ernie/ # POST /v1/image/ernie/{generate,edit,train}
50
+ seedvr2/ # POST /v1/image/seedvr2/upscale
51
+ depthpro/ # POST /v1/image/depthpro/estimate
52
+ audio/
53
+ acestep/ # POST /v1/audio/acestep/{generate,cover,repaint,extract}
54
+ audiogen/ # POST /v1/audio/audiogen/generate
55
+ video/
56
+ ltx2/ # POST /v1/video/ltx2/generate
57
+ web/ # POST /v1/web/search, GET /v1/web/fetch
58
+ files/ # POST/GET/DELETE /v1/files
59
+ jobs/ # GET/DELETE /v1/jobs
60
+ models/ # GET /v1/models, /v1/{domain}/{family}/models
61
+ health/ # GET /health
62
+ openapi # GET /openapi.json, /v1/{domain}/{family}/openapi.json
63
+ ```
64
+
65
+ ---
66
+
67
+ ## 起動フロー
68
+
69
+ ```sh
70
+ アプリ起動
71
+ → 各 capability の register() を呼ぶ
72
+ → ModelSpec を model レジストリに登録(servable モデルのカタログ)
73
+ → CapabilitySpec を capability レジストリに登録(OpenAPI の説明と docs URL)
74
+ → api 側が各 router を FastAPI app に mount
75
+ → warmup(セットアップ済みの KIAPI_WARMUP_MODELS を予算内で逐次ロードし常駐させる)
76
+ → リクエスト受付開始
77
+ ```
78
+
79
+ warmup は任意(既定は遅延ロード)で、指定モデルを起動時に確保・準備しておくことで初回リクエストのロード待ちをなくす。
80
+ warmup しないモデルは初回 `acquire` 時にロードされる。未セットアップの warmup 対象は
81
+ warning を出して skip し、サーバー起動は継続する。
82
+
83
+ ---
84
+
85
+ ## アプリ設定とユーザーディレクトリ
86
+
87
+ `core/app` は、アプリ全体の `AppContext` と、kiapi が使うユーザー別ディレクトリの
88
+ 解決を担う。ユーザー別ディレクトリは下記の優先順で決定する。
89
+
90
+ | 用途 | 設定 | 環境変数 fallback | platformdirs |
91
+ |---|---|---|---|
92
+ | cache | `KIAPI_USER_CACHE_DIR` | `XDG_CACHE_HOME/kiapi` | `PlatformDirs(appname="kiapi", appauthor="kiarina").user_cache_dir` |
93
+ | config | `KIAPI_USER_CONFIG_DIR` | `XDG_CONFIG_HOME/kiapi` | `PlatformDirs(appname="kiapi", appauthor="kiarina").user_config_dir` |
94
+ | data | `KIAPI_USER_DATA_DIR` | `XDG_DATA_HOME/kiapi` | `PlatformDirs(appname="kiapi", appauthor="kiarina").user_data_dir` |
95
+
96
+ 設定値で指定された `~` は、実行ユーザーの home directory として展開する。
97
+
98
+ ---
99
+
100
+ ## セットアップ管理
101
+
102
+ > [!NOTE] 重い初回ダウンロードを API 実行時に発生させないため、モデル重みや Docker image は事前に activate する。
103
+
104
+ 各 `ModelSpec` は `setup_resources` を持つ。resource は、モデルを実行する前に
105
+ ローカルへ準備しておく必要があるディスク上の資源を表す。
106
+
107
+ | resource | 判定 | activate | deactivate |
108
+ |---|---|---|---|
109
+ | `hf_snapshot` | `snapshot_download(..., local_files_only=True)` が成功するか | Hugging Face から snapshot download | HF cache の該当 repo revision を削除 |
110
+ | `docker_image` | `docker image inspect` が成功するか | `docker pull` | `docker image rm` |
111
+ | `local_path` | path が存在するか | no-op | path を削除 |
112
+ | `python_venv` | venv の Python で検証 import が成功するか | `uv venv` + `uv pip install` | venv directory を削除 |
113
+
114
+ CLI:
115
+
116
+ ```sh
117
+ kiapi status
118
+ kiapi activate
119
+ kiapi activate --all
120
+ kiapi activate --domain image --family chat --repo Qwen/Qwen-Image
121
+ kiapi deactivate --all
122
+ kiapi deactivate --domain image --family web --repo searxng/searxng:latest
123
+ kiapi run
124
+ ```
125
+
126
+ `kiapi activate` は引数なしの場合、`questionary` の checkbox UI で model を選択する。
127
+ `kiapi deactivate` も引数なしの場合は checkbox UI で model を選択し、削除前に確認する。
128
+
129
+ API 実行時は、handler が `ctx.ensure_model_ready(spec)` を呼び、
130
+ 未セットアップなら `SetupRequiredError` を投げる。router はこれを HTTP 503 に変換し、
131
+ `kiapi activate --repo ...` の実行ヒントを返す。
132
+
133
+ ---
134
+
135
+ ## 処理フロー
136
+
137
+ リクエストは、能力ごとの handler を Job として single-flight worker に投入して処理する。
138
+ GPU を使うモデルだけでなく、Web backend のような常駐 subprocess も同じ acquire/release
139
+ の流れに乗る。
140
+
141
+ ### 推論系 API(sync)
142
+
143
+ ```sh
144
+ リクエスト
145
+ → api router # リクエストを検証し params を組み立て、Accept を見る
146
+ → submit_and_maybe_wait
147
+ → worker(単一スレッド + キュー) # 1 ジョブずつ直列実行
148
+ → memory.acquire(model) # 期限切れ掃引 → 予算判定 → 退避/ロード
149
+ → capability handler # 生成。ProgressReporter で進捗更新
150
+ → files.put(...) # 成果物を Files に保存(job.artifacts = [file_id])
151
+ → 完了待ち(KIAPI_SYNC_TIMEOUT_S 超過でエラー)
152
+ → レスポンス # 単一成果物 → 生バイト(+ X-Kiapi-File-Id / -Job-Id ヘッダ)
153
+ # 複数 or Accept: application/json → Job JSON
154
+ ```
155
+
156
+ ### 推論系 API(async)
157
+
158
+ ```sh
159
+ リクエスト(mode=async)
160
+ → api router → worker にジョブ投入
161
+ → 即レスポンス # 202 + job_id(待たない)
162
+ ┊
163
+ worker が裏でジョブ実行(sync と同じ acquire → 生成 → files.put)
164
+ ┊
165
+ クライアントがポーリング
166
+ → GET /v1/jobs/{id} # status / progress / progress_label を観測
167
+ → GET /v1/files/{id} # 完了後に成果物メタ・本体を取得
168
+ ```
169
+
170
+ ### Web API
171
+
172
+ ```sh
173
+ リクエスト
174
+ → api router
175
+ → Job 作成
176
+ → worker(単一スレッド + キュー)
177
+ → memory.acquire(web:search | web:fetch)
178
+ → 初回のみ docker run --rm を foreground subprocess として起動
179
+ → 動的 localhost port の healthcheck を待つ
180
+ → capability handler # resident backend へ sync HTTP
181
+ → fetch は files.put(...) に保存
182
+ → レスポンス # search は JSON、fetch は raw body(+ file/job headers)
183
+ ```
184
+
185
+ SearXNG / Crawl4AI は Docker container そのものとしてではなく、kiapi が所有する
186
+ resident subprocess の payload として扱う。起動コマンドが `docker run --rm` なので、
187
+ kiapi 停止や eviction で subprocess を止めれば container も掃除される。
188
+
189
+ ---
190
+
191
+ > [!NOTE] 以降は、上記の各ステップを実現する仕組み。
192
+
193
+ ---
194
+
195
+ ## モデル
196
+
197
+ > [!NOTE] 全能力のモデルを単一のカタログ(レジストリ)で扱い、メモリ予算・解決・発見の起点にする。
198
+
199
+ 各モデルは `ModelSpec` として model レジストリに登録される。主なフィールド:
200
+
201
+ | フィールド | 意味 |
202
+ |---|---|
203
+ | `name` / `aliases` | モデルの識別子(`model` で指定する名前 = バリアント名のみ) |
204
+ | `family` / `domain` | 所属ファミリーとモダリティの括り(解決・ルーティングに使う) |
205
+ | `modalities_in` | 受け付ける入力モダリティ(text / image / audio / video) |
206
+ | `weight_gb` / `peak_headroom_gb` | 常駐重みと実行時ピークの見積り(メモリ予算が使う) |
207
+ | `framework` | クリーンアップ方式の選択(mlx / torch / 別プロセス等) |
208
+ | `resident` | 常駐型か一時型か(下記) |
209
+ | `ttl_seconds` | idle TTL(未設定はグローバル既定を継承) |
210
+ | `priority` / `default` | 退避優先度(高いほど残る)/ ファミリー既定モデルか |
211
+
212
+ - **解決**: `resolve(family, model)` でファミリー内のバリアントを引く。`model` 省略時は
213
+ `default` を使う。
214
+ - **常駐型 / 一時型**:
215
+ - **常駐型(`resident=True`)** — `acquire` でロードし、TTL/退避まで常駐させる。
216
+ 通常のモデル。
217
+ - **一時型(`resident=False`)** — 1 回の生成のためにロード→実行→即解放する。
218
+ 巨大で常駐に向かないもの(ltx2)や、ロード時に量子化/LoRA を焼き込むため常駐
219
+ モデルを使い回せないケース(zimage の LoRA・quantize 指定)。予算は `acquire`
220
+ ではなく `memory.reserve()` でピーク分だけ確保する。
221
+ - **モデルの追加 = 1 モデルモジュール(`_models/<model>.py`)+ 1 registry 行**。
222
+ 生成処理(プロンプト構築・メディア処理・サンプリング・後処理)は各モジュールに
223
+ 分割して持つ。能力ごとの詳細は各 `capabilities/{family}/README` を参照。
224
+ - **発見**: `GET /v1/models` は chat 専用(OpenAI 互換)、それ以外は
225
+ `/v1/embedding/models` / `/v1/{domain}/{family}/models` で一覧できる。
226
+
227
+ ---
228
+
229
+ ## メモリ管理
230
+
231
+ > [!NOTE] 非機能要件「メモリを管理し破綻させない」を担う。
232
+
233
+ 複数の能力にまたがる全モデルが、単一のグローバル予算 `KIAPI_MEMORY_LIMIT_GB` を
234
+ 共有する。`KIAPI_MEMORY_LIMIT_GB` が未指定の場合は、起動時に搭載メモリの 80% を
235
+ 実効予算として自動設定する。指定されている場合はその値を尊重する。値決定後、
236
+ 現在の空きメモリが実効予算を下回っている場合は warning を出す。
237
+ **常駐物(resident weights)** と **実行時ピーク(peak headroom)** を分離して管理する。
238
+
239
+ - 各常駐物は `(key, size_gb, priority, last_used, release_fn)` を登録する。
240
+ `priority` は既定 0。**値が小さいほど先に退避される**ため、小さく常駐させ続けたい
241
+ モデルには高い priority を与えて保持する。
242
+ - 全体シングルフライト(同時 1 ジョブ)なので、考慮すべき実行時ピークは常に
243
+ 1 ジョブ分のみ。ジョブ開始時の予算チェックは:
244
+
245
+ ```
246
+ Σ(常駐 weight − このジョブが使うモデル分)
247
+ + このジョブの model weight + このジョブの peak_headroom ≤ MAX
248
+ ```
249
+
250
+ - 不足時は **`(priority 昇順, last_used 昇順)`** の順で `release_fn` を呼んで退避する
251
+ (「優先度が低いもの > 使ってない順」)。
252
+ - `release_fn` はフレームワーク別のクリーンアップを担い、MLX と PyTorch/MPS の混在を
253
+ 吸収する:
254
+ - MLX 系: `del refs` → `gc.collect()` → `mx.clear_cache()`
255
+ - PyTorch/MPS 系(acestep 等): 加えて `torch.mps.empty_cache()`
256
+ - `size_gb` はレジストリの推定値から始め、初回ロード後に実測(`mx.get_active_memory`
257
+ 差分等)で補正する。
258
+ - 起動時 warmup するモデルは `KIAPI_WARMUP` / `KIAPI_WARMUP_MODELS` で指定する
259
+ (予算内で逐次ロード。既定は遅延ロード)。
260
+
261
+ ---
262
+
263
+ ## TTL(idle 自動解放)
264
+
265
+ > [!NOTE] 連続使用時の応答速度と、放置時のメモリ解放を両立する。
266
+
267
+ 各モデルは任意で idle TTL を持つ(`ttl_seconds`、未設定はグローバル既定
268
+ `KIAPI_DEFAULT_TTL_S` を継承、`0`/負値で「無期限=ピン」)。TTL を過ぎた常駐モデルは
269
+ 2 つのトリガで解放される:
270
+
271
+ 1. **リクエスト時** — `acquire` の冒頭で期限切れモデルを掃引してから予算判定(対象
272
+ モデル自身は除外)。
273
+ 2. **アイドル時** — バックグラウンドの定期掃引(`KIAPI_TTL_SWEEP_INTERVAL_S`)。
274
+
275
+ 掃引は必ず単一 worker スレッド(共有 executor)で実行し、生成と直列化・MLX の
276
+ スレッド固有性を守る。再使用のたびに `last_used` が更新され idle はリセットされる。
277
+ `GET /health` は各モデルの `idle_s` / `ttl_s` / `expires_in_s` を表示する。
278
+
279
+ ---
280
+
281
+ ## ジョブ / ワーカー
282
+
283
+ > [!NOTE] 非機能要件「GPU 処理をキューイングして 1 つずつ実行」を担う。
284
+
285
+ 全処理はグローバルな `ThreadPoolExecutor(max_workers=1)` + キュー上で実行され、
286
+ **全体で同時 1 ジョブ**に直列化される(MLX のスレッド固有性を守り、予算会計を単純に
287
+ 保つ)。並列が必要なら **kiapi を複数プロセス起動**し、用途別に MAX メモリを分割する。
288
+
289
+ - **同期・非同期を常にジョブ化**し、生成系は `mode`(sync/async) で指定する。
290
+ - async は即座に `job_id` を返す。
291
+ - sync はジョブ完了を待つ。**時間超過したらエラー**を返す(非同期へフォール
292
+ バックしない)。
293
+ - Chat / Embedding は **async 受付なし**(内部的にはジョブ化する)。
294
+ - **streaming は Chat のみ**(`stream=true` で SSE)。実行自体は同じ単一 worker 上で
295
+ 直列化される。
296
+ - **キャンセル(`DELETE /v1/jobs/{id}`)**: queued は除去できるが、実行中の生成処理は
297
+ 中断不可(ベストエフォート)。
298
+
299
+ ### ジョブモデル
300
+
301
+ ```
302
+ Job:
303
+ id: str
304
+ type: str # 例 "chat" | "embedding" | "acestep.generate" | ...
305
+ status: str # queued | running | succeeded | failed | canceled
306
+ params: dict # 入力パラメータ(再現用)
307
+ result: dict # type ごとに自由形式(成果物メタデータ)
308
+ artifacts: [file_id]
309
+ error: str | None
310
+ created_at / started_at / finished_at
311
+ progress: float | None # 実行中の進捗 [0,1]、未報告は None
312
+ progress_label: str | None # 現フェーズの短いラベル(例 "denoising")
313
+ ```
314
+
315
+ ---
316
+
317
+ ## 進捗報告
318
+
319
+ > [!NOTE] 非機能要件「非同期タスクの進捗を把握できる」を担う。
320
+
321
+ 進捗の配管は **ambient(contextvar)** で行う。全体シングルフライトなので「現在
322
+ 実行中ジョブの進捗レポータ」は一意に定まる。worker は実行直前に `ProgressReporter`
323
+ をワーカースレッド上の contextvar に束ね、capability コードは
324
+ `ProgressReporter.current()` で `update(fraction, label)` / `step(i, total)` を呼ぶ。
325
+ 未束縛時の `current()` は**サイレント no-op** を返すため、呼び出し側は条件分岐なしで
326
+ 報告でき、router/handler のシグネチャも変えずに済む。`GET /v1/jobs/{id}` で観測する。
327
+
328
+ - image 系(mflux)は per-step 進捗に対応(デノイズループフックに共有コールバックを
329
+ 冪等登録)。depthpro はループの無い単一フォワードのため粗い進捗のみ。
330
+ - 更新は時間・差分でスロットリングする。
331
+
332
+ ---
333
+
334
+ ## ファイル管理
335
+
336
+ > [!NOTE] 成果物をジョブより長命に保ち、`file_id` で参照可能にする。
337
+
338
+ 統一 Files API。`file_id` で管理し、メタデータは自己記述的(seed・params・timings を
339
+ サイドカーに保持)。ジョブの artifacts は `file_id` で参照する。**ファイルはジョブより
340
+ 長命**(ジョブはインメモリでプロセス再起動時にクリアされるが、Files API の保存先に
341
+ 残っている限り `file_id` で取得できる)。生成系の入力ファイルも file_id 参照で受け取る。
342
+
343
+ 既定の保存先は `KIAPI_FILES_ROOT=/tmp/kiapi/files`。これは運用時に生成物やアップロードが
344
+ 溜まり続けるのを避けるためで、OS の再起動や tmp cleanup で消える可能性がある。成果物を
345
+ 長期保存したい場合は、`KIAPI_FILES_ROOT=~/.kiapi/files` や外部ディスク上のディレクトリを
346
+ 指定する。
347
+
348
+ リクエスト処理中だけ使う中間ファイルは `KIAPI_TMP_ROOT=/tmp/kiapi/work` 以下に、
349
+ `chat/qwen3_omni/{entry}` や `image/zimage/{entry}` のような目的別ディレクトリを作って
350
+ 保存する。モデル重みやライブラリキャッシュは Hugging Face、mflux、Docker など各
351
+ ライブラリ・ツールの管理下に置き、kiapi の Files API / workdir とは分けて扱う。
352
+
353
+ ---
354
+
355
+ ## sync レスポンスのネゴシエーション
356
+
357
+ > [!NOTE] sync 利用を「ファイルが直接落ちてくる」体験にする。
358
+
359
+ 生成系の sync レスポンスは、**成果物が単一なら既定でその生バイト列を直接返す**
360
+ (`curl -o out.png .../generate` がそのまま機能する)。
361
+
362
+ - `file_id` / `job_id` はヘッダ `X-Kiapi-File-Id` / `X-Kiapi-Job-Id` に載せ、
363
+ seed・params・timings 等の全メタは後から `GET /v1/files/{id}` で取得できる。
364
+ - `Accept: application/json` 指定時・成果物が複数(例: acestep `extract`)・async
365
+ (`202`)の場合は Job dict(JSON)を返す。
366
+ - 実装は `api/_helpers/submit_and_maybe_wait.py` に集約され、各生成エンドポイントが
367
+ `Accept` ヘッダを渡す。chat/embedding はこの封筒処理を通らない。
368
+
369
+ ---
370
+
371
+ ## API 編成(domain / family / op)
372
+
373
+ > [!NOTE] 操作空間が収束しているかどうかで API の形を変える。
374
+
375
+ - **chat / embedding は標準モダリティ API**(`POST /v1/chat/completions`,
376
+ `POST /v1/embedding`、`model` で互換差し替え)。業界が OpenAI 形式に収束し操作が
377
+ 単一なので共通 API が成立する。
378
+ - **生成系はプロバイダ(ファミリー)軸** `POST /v1/<domain>/<family>/<op>`。モデルに
379
+ よって「できる操作」が大きく異なる(acestep は cover/repaint/extract を持つが
380
+ audiogen は generate のみ)ため、共通スキーマで削らず各ファミリーが**自分の操作
381
+ 語彙と request 形をそのまま**出す。
382
+ - `domain` — モダリティの括り(audio/video/image)。発見性・グルーピング用。
383
+ - `family` — upstream のパッケージ/モデル名を正規化した区切り無し小文字の識別子。
384
+ **dir == family** で常に一致(alias は設けない)。
385
+ - **エンドポイントを分けるか model に押し込むかの基準**: エンドポイント = 操作の
386
+ 語彙、`model` = その語彙を丸ごと同じに満たす差し替え可能なバリアント(`model` 名は
387
+ バリアント名のみ、ファミリー名を繰り返さない)。
388
+ - acestep `xl-base` / `turbo` は同じ 4 操作を同じ形で満たす → 同一ファミリー、
389
+ `model` で選択。
390
+ - acestep vs audiogen は語彙が違う → 別ファミリー = 別エンドポイント。
391
+ - **横断的な「封筒」は統一**: 全生成は `mode` を受け Job を返し、成果物は
392
+ `artifacts:[file_id]`、入力は file_id 参照、エラーコード体系・capability 別 OpenAPI・
393
+ `/v1/{domain}/{family}/models`・auth・メモリ予算・全体シングルフライトは共通。
394
+ **封筒 = 共通、payload = ファミリー固有**。
395
+
396
+ `model` によるバリアント解決とレジストリの詳細は「モデル」の節を参照。
397
+
398
+ ---
399
+
400
+ ## resident subprocess model
401
+
402
+ > [!NOTE] プロセス外に常駐する能力も、モデルと同じ acquire / release / TTL の流れに乗せる。
403
+
404
+ 一部の能力は、Python オブジェクトとして重みをロードするのではなく、別プロセスを
405
+ 起動してそのプロセス状態を resident payload として保持する。
406
+
407
+ - **acestep** — 専用 venv の Python subprocess を起動し、ACE-Step の LLM + DiT を常駐。
408
+ - **web/search** — `docker run --rm searxng/searxng` を foreground subprocess として起動。
409
+ - **web/fetch** — `docker run --rm unclecode/crawl4ai` を foreground subprocess として起動。
410
+
411
+ core から見ると、いずれも `ModelSpec.module.load(spec) -> payload` と
412
+ `release(payload)` を持つ resident model である。Docker は web module の実装詳細であり、
413
+ 起動時に空いている localhost port を選び、healthcheck 完了後にその `base_url` を payload
414
+ として handler が使う。
415
+
416
+ ---
417
+
418
+ ## 依存ライブラリ不一致の回避(acestep の venv 分割)
419
+
420
+ > [!NOTE] 1 つの venv に同居できない依存を、サブプロセスとして隔離しつつ統一管理下に置く。
421
+
422
+ 多くの能力は `transformers` 5.x 系で 1 つの venv に同居できるが、**acestep
423
+ (ace-step)は `transformers` 4.x を要求**し、chat の mlx-vlm / embedding の
424
+ mlx-embeddings(いずれも 5.x 要求)と同一プロセスに同居できない。競合は transformers
425
+ のみで、mlx / torch は互換。
426
+
427
+ - chat / embedding / 他の生成系は kiapi 本体の venv(transformers 5.x)に統合する。
428
+ - **acestep は専用 venv の常駐ワーカープロセスとして実行**し、
429
+ `kiapi activate --family acestep` で `python_venv` resource として構築する。
430
+ 既定では venv / project / checkpoints を `core/app` の user data dir 配下の
431
+ `acestep/` に置く。
432
+ kiapi 本体はこれをメモリマネージャの**常駐エントリ**として扱う(`release_fn` =
433
+ プロセス終了)。統一ジョブ / ファイル / メモリ予算 / 全体シングルフライトを維持した
434
+ まま依存衝突を隔離する。なお acestep は別プロセスだが GPU 推論を行うため**推論型**
435
+ であり、予算・TTL の管理下に置く(「別プロセスか否か」ではなく「推論か否か」で
436
+ 分類する)。
437
+ - IPC は行指向 JSON(stdin/stdout)+ 生成物はファイルパス受け渡し。実装詳細は
438
+ [acestep/README.ja.md](kiapi/capabilities/acestep/README.ja.md) を参照。
439
+
440
+ ---
441
+
442
+ ## OpenAPI
443
+
444
+ > [!NOTE] 非機能要件「API サーバー自体が LLM に使い方を説明できる」を担う。
445
+
446
+ kiapi は `GET /openapi.json`(ナビゲーション層)と
447
+ `GET /v1/{domain}/{family}/openapi.json`(操作層)の 2 層で機械可読な説明を返す。
448
+ 旧 `GET /v1/help` / `GET /v1/help/{family}` は廃止し、説明は OpenAPI に統合する。
449
+
450
+ エージェントの想定動線は次の通り:
451
+
452
+ 1. `GET /openapi.json` → capability 一覧、docs URL、共通 endpoint を読む。
453
+ 2. 目的に合う capability の `openapi.json` → `info.description`、operation
454
+ description、request/response schema を読んで実際に呼ぶ。
455
+
456
+ - **root OpenAPI("何ができて次にどこを見るか")**:
457
+ root は共通 endpoint と capability 別 docs へのリンクを持つ。各 capability の説明は
458
+ `CapabilitySpec.summary`(1 行)から生成する。
459
+ - **capability OpenAPI("実際の使い方")**:
460
+ `CapabilitySpec.description` を `info.description` に入れる。これは Markdown 形式の
461
+ 詳細説明で、モデル選び、全体 TIPS、例、注意点などを書く。endpoint の一覧は
462
+ OpenAPI paths から、request parameter の構造と細かい値は Pydantic schema から
463
+ 自動生成されるため、個別 endpoint 依存の説明は endpoint docstring と
464
+ request/response schema に置く。
465
+
466
+ `CapabilitySpec.summary` はタスク指向の 1 行にする。タスク → family のマッピングが
467
+ 成立するかはこの文の質に懸かる(例:`acestep`=音楽生成 と `audiogen`=効果音 を
468
+ 1 行で区別できること)。