kiapi 0.1.0__tar.gz → 0.2.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 (655) hide show
  1. {kiapi-0.1.0 → kiapi-0.2.0}/.gitignore +1 -0
  2. {kiapi-0.1.0 → kiapi-0.2.0}/ARCHITECTURE.ja.md +48 -0
  3. {kiapi-0.1.0 → kiapi-0.2.0}/ARCHITECTURE.md +49 -0
  4. {kiapi-0.1.0 → kiapi-0.2.0}/CHANGELOG.md +18 -0
  5. {kiapi-0.1.0 → kiapi-0.2.0}/PKG-INFO +71 -2
  6. {kiapi-0.1.0 → kiapi-0.2.0}/README.ja.md +62 -0
  7. {kiapi-0.1.0 → kiapi-0.2.0}/README.md +65 -0
  8. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/app.py +12 -1
  9. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/config/template/cli.py +4 -0
  10. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/run/cli.py +14 -1
  11. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/config/_helpers/load_user_settings.py +1 -1
  12. kiapi-0.2.0/kiapi/core/relay/__init__.py +34 -0
  13. kiapi-0.2.0/kiapi/core/relay/_instances/relay_registry.py +12 -0
  14. kiapi-0.2.0/kiapi/core/relay/_schemas/relay_file_body.py +11 -0
  15. kiapi-0.2.0/kiapi/core/relay/_schemas/relay_json_body.py +8 -0
  16. kiapi-0.2.0/kiapi/core/relay/_schemas/relay_multipart_body.py +8 -0
  17. kiapi-0.2.0/kiapi/core/relay/_schemas/relay_multipart_file.py +19 -0
  18. kiapi-0.2.0/kiapi/core/relay/_services/relay_runner.py +189 -0
  19. kiapi-0.2.0/kiapi/core/relay/_settings.py +39 -0
  20. kiapi-0.2.0/kiapi/core/relay/_types/relay.py +11 -0
  21. kiapi-0.2.0/kiapi/core/relay/_types/relay_delivery.py +17 -0
  22. kiapi-0.2.0/kiapi/core/relay/_types/relay_method.py +3 -0
  23. kiapi-0.2.0/kiapi/core/relay/_types/relay_name.py +1 -0
  24. kiapi-0.2.0/kiapi/core/relay/_types/relay_specifier.py +1 -0
  25. kiapi-0.2.0/kiapi/core/relay/_views/relay_error.py +7 -0
  26. kiapi-0.2.0/kiapi/core/relay/_views/relay_request.py +29 -0
  27. kiapi-0.2.0/kiapi/core/relay/_views/relay_response.py +13 -0
  28. kiapi-0.2.0/kiapi/relay/__init__.py +1 -0
  29. kiapi-0.2.0/kiapi/relay/gcp/README.ja.md +549 -0
  30. kiapi-0.2.0/kiapi/relay/gcp/README.md +562 -0
  31. kiapi-0.2.0/kiapi/relay/gcp/__init__.py +32 -0
  32. kiapi-0.2.0/kiapi/relay/gcp/_helpers/create_gcp_relay.py +13 -0
  33. kiapi-0.2.0/kiapi/relay/gcp/_schemas/gcp_relay_notification.py +13 -0
  34. kiapi-0.2.0/kiapi/relay/gcp/_services/gcp_relay.py +415 -0
  35. kiapi-0.2.0/kiapi/relay/gcp/_services/gcp_relay_delivery.py +40 -0
  36. kiapi-0.2.0/kiapi/relay/gcp/_settings.py +81 -0
  37. kiapi-0.2.0/kiapi/relay/local/__init__.py +35 -0
  38. kiapi-0.2.0/kiapi/relay/local/_helpers/create_local_relay.py +13 -0
  39. kiapi-0.2.0/kiapi/relay/local/_schemas/local_relay_notification.py +13 -0
  40. kiapi-0.2.0/kiapi/relay/local/_services/local_relay.py +312 -0
  41. kiapi-0.2.0/kiapi/relay/local/_services/local_relay_delivery.py +40 -0
  42. kiapi-0.2.0/kiapi/relay/local/_settings.py +52 -0
  43. {kiapi-0.1.0 → kiapi-0.2.0}/pyproject.toml +9 -2
  44. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/config/_helpers/test_load_user_settings.py +8 -0
  45. kiapi-0.2.0/tests/core/relay/_services/test_relay_runner.py +123 -0
  46. kiapi-0.2.0/tests/core/relay/_views/test_relay_request.py +63 -0
  47. kiapi-0.2.0/tests/core/setup/_services/__init__.py +1 -0
  48. kiapi-0.2.0/tests/core/workdir/__init__.py +1 -0
  49. kiapi-0.2.0/tests/core/workdir/_helpers/__init__.py +1 -0
  50. kiapi-0.2.0/tests/relay/__init__.py +1 -0
  51. kiapi-0.2.0/tests/relay/gcp/__init__.py +1 -0
  52. kiapi-0.2.0/tests/relay/gcp/_services/__init__.py +1 -0
  53. kiapi-0.2.0/tests/relay/gcp/_services/test_gcp_relay.py +133 -0
  54. kiapi-0.2.0/tests/relay/gcp/test_settings.py +25 -0
  55. kiapi-0.2.0/tests/relay/local/__init__.py +1 -0
  56. kiapi-0.2.0/tests/relay/local/_services/__init__.py +1 -0
  57. kiapi-0.2.0/tests/relay/local/_services/test_local_relay.py +166 -0
  58. kiapi-0.2.0/tests/relay/local/test_settings.py +18 -0
  59. {kiapi-0.1.0 → kiapi-0.2.0}/CONTRIBUTING.md +0 -0
  60. {kiapi-0.1.0 → kiapi-0.2.0}/LICENSE +0 -0
  61. {kiapi-0.1.0 → kiapi-0.2.0}/SECURITY.md +0 -0
  62. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/__init__.py +0 -0
  63. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/__main__.py +0 -0
  64. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/__init__.py +0 -0
  65. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_constants/require_auth.py +0 -0
  66. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/build_job_responses.py +0 -0
  67. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/build_openapi.py +0 -0
  68. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/build_train_responses.py +0 -0
  69. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/get_accept.py +0 -0
  70. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/get_ctx.py +0 -0
  71. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/get_worker.py +0 -0
  72. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/register_capability_endpoints.py +0 -0
  73. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_helpers/submit_and_maybe_wait.py +0 -0
  74. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_settings.py +0 -0
  75. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_views/async_job_response.py +0 -0
  76. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/_views/capability_model_spec.py +0 -0
  77. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/audio/acestep/_views/extract_response.py +0 -0
  78. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/audio/acestep/_views/track_response.py +0 -0
  79. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/audio/acestep/router.py +0 -0
  80. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/audio/audiogen/_views/audio_response.py +0 -0
  81. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/audio/audiogen/router.py +0 -0
  82. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/chat/_views/chat_completion_response.py +0 -0
  83. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/chat/router.py +0 -0
  84. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/embedding/_views/embedding_response.py +0 -0
  85. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/embedding/router.py +0 -0
  86. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/files/_operations/get_file.py +0 -0
  87. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/files/_operations/get_file_id.py +0 -0
  88. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/files/_views/file_delete_response.py +0 -0
  89. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/files/_views/file_list_response.py +0 -0
  90. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/files/router.py +0 -0
  91. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/health/_views/health_response.py +0 -0
  92. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/health/router.py +0 -0
  93. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/depthpro/_views/estimate_response.py +0 -0
  94. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/depthpro/router.py +0 -0
  95. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/ernie/_views/image_response.py +0 -0
  96. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/ernie/router.py +0 -0
  97. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/flux2/_views/image_response.py +0 -0
  98. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/flux2/router.py +0 -0
  99. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/ideogram4/_views/image_response.py +0 -0
  100. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/ideogram4/router.py +0 -0
  101. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/qwen/_views/image_response.py +0 -0
  102. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/qwen/router.py +0 -0
  103. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/seedvr2/_views/image_response.py +0 -0
  104. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/seedvr2/router.py +0 -0
  105. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/zimage/_views/image_response.py +0 -0
  106. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/image/zimage/router.py +0 -0
  107. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/jobs/_operations/get_job_id.py +0 -0
  108. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/jobs/_views/job_delete_response.py +0 -0
  109. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/jobs/_views/job_list_response.py +0 -0
  110. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/jobs/router.py +0 -0
  111. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/models/_schemas/openai_model_spec.py +0 -0
  112. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/models/_views/model_list_response.py +0 -0
  113. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/models/router.py +0 -0
  114. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/video/ltx2/_views/__init__.py +0 -0
  115. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/video/ltx2/_views/video_response.py +0 -0
  116. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/video/ltx2/router.py +0 -0
  117. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/web/_views/__init__.py +0 -0
  118. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/web/_views/fetch_api_request.py +0 -0
  119. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/web/_views/fetch_error_response.py +0 -0
  120. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/api/web/router.py +0 -0
  121. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/__init__.py +0 -0
  122. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/_exceptions/CapabilityError.py +0 -0
  123. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/_exceptions/ValidationError.py +0 -0
  124. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/_helpers/attach_mflux_progress.py +0 -0
  125. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/_helpers/get_file_path.py +0 -0
  126. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/_helpers/resolve_file_ref.py +0 -0
  127. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/README.ja.md +0 -0
  128. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/README.md +0 -0
  129. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/__init__.py +0 -0
  130. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_constants/description.py +0 -0
  131. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_exceptions/ace_step_engine_error.py +0 -0
  132. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_helpers/register.py +0 -0
  133. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_models/acestep.py +0 -0
  134. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/handle_cover.py +0 -0
  135. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/handle_extract.py +0 -0
  136. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/handle_generate.py +0 -0
  137. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/handle_repaint.py +0 -0
  138. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_ace_step_paths.py +0 -0
  139. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_cover_params.py +0 -0
  140. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_engine.py +0 -0
  141. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_extract_params.py +0 -0
  142. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_generate_params.py +0 -0
  143. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_operations/resolve_repaint_params.py +0 -0
  144. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_schemas/ace_step_paths.py +0 -0
  145. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_services/ace_step_engine.py +0 -0
  146. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_settings.py +0 -0
  147. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/ace_step_base.py +0 -0
  148. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/cover_params.py +0 -0
  149. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/cover_request.py +0 -0
  150. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/extract_params.py +0 -0
  151. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/extract_request.py +0 -0
  152. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/generate_params.py +0 -0
  153. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/generate_request.py +0 -0
  154. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/repaint_params.py +0 -0
  155. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/repaint_request.py +0 -0
  156. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/_views/track_params.py +0 -0
  157. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/acestep/worker_subprocess.py +0 -0
  158. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/README.ja.md +0 -0
  159. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/README.md +0 -0
  160. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/__init__.py +0 -0
  161. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_constants/description.py +0 -0
  162. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_helpers/attach_audiogen_progress.py +0 -0
  163. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_helpers/register.py +0 -0
  164. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_helpers/validate_generate.py +0 -0
  165. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_models/audiogen.py +0 -0
  166. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_operations/handle_generate.py +0 -0
  167. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_operations/resolve_generate_params.py +0 -0
  168. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_settings.py +0 -0
  169. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_views/generate_params.py +0 -0
  170. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/audiogen/_views/generate_request.py +0 -0
  171. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/README.ja.md +0 -0
  172. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/README.md +0 -0
  173. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/__init__.py +0 -0
  174. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_constants/description.py +0 -0
  175. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_helpers/register.py +0 -0
  176. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_models/qwen3_5.py +0 -0
  177. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_models/qwen3_omni.py +0 -0
  178. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/apply_template.py +0 -0
  179. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/completed_hermes_tool_call_text.py +0 -0
  180. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/emit_streaming_response.py +0 -0
  181. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/ensure_streaming_detokenizer_compat.py +0 -0
  182. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/format_response.py +0 -0
  183. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/handle_chat.py +0 -0
  184. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/parse_hermes_tool_calls.py +0 -0
  185. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/parse_json_tool_calls.py +0 -0
  186. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/parse_messages.py +0 -0
  187. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/resolve_chat_params.py +0 -0
  188. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/stream_text_from_tokens.py +0 -0
  189. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_operations/strip_tool_calls.py +0 -0
  190. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_settings.py +0 -0
  191. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_utils/apply_parallel_tool_call_policy.py +0 -0
  192. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_utils/apply_seed.py +0 -0
  193. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_utils/load_audio_mono.py +0 -0
  194. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_utils/load_mlx_vlm.py +0 -0
  195. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_utils/warmup_params.py +0 -0
  196. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_views/chat_params.py +0 -0
  197. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/chat/_views/chat_request.py +0 -0
  198. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/README.ja.md +0 -0
  199. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/README.md +0 -0
  200. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/__init__.py +0 -0
  201. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_constants/description.py +0 -0
  202. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_helpers/register.py +0 -0
  203. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_helpers/validate_estimate.py +0 -0
  204. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_models/depthpro.py +0 -0
  205. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_operations/handle_estimate.py +0 -0
  206. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_operations/is_quantize_override.py +0 -0
  207. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_operations/resolve_estimate_params.py +0 -0
  208. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_settings.py +0 -0
  209. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_views/estimate_params.py +0 -0
  210. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/depthpro/_views/estimate_request.py +0 -0
  211. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/README.ja.md +0 -0
  212. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/README.md +0 -0
  213. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/__init__.py +0 -0
  214. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_constants/description.py +0 -0
  215. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_helpers/register.py +0 -0
  216. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_models/qwen3_text.py +0 -0
  217. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_models/qwen3_vl.py +0 -0
  218. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_operations/format_response.py +0 -0
  219. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_operations/handle_embed.py +0 -0
  220. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_operations/parse_inputs.py +0 -0
  221. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_operations/resolve_embed_params.py +0 -0
  222. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_settings.py +0 -0
  223. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_utils/to_vector.py +0 -0
  224. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_views/embed_params.py +0 -0
  225. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/embedding/_views/embed_request.py +0 -0
  226. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/README.ja.md +0 -0
  227. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/README.md +0 -0
  228. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/__init__.py +0 -0
  229. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_constants/description.py +0 -0
  230. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_helpers/register.py +0 -0
  231. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_helpers/validate_edit.py +0 -0
  232. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_helpers/validate_generate.py +0 -0
  233. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_models/ernie.py +0 -0
  234. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/handle_edit.py +0 -0
  235. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/handle_generate.py +0 -0
  236. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/handle_train.py +0 -0
  237. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/is_quantize_override.py +0 -0
  238. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/resolve_edit_params.py +0 -0
  239. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/resolve_generate_params.py +0 -0
  240. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/resolve_lora_params.py +0 -0
  241. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/resolve_train_params.py +0 -0
  242. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_operations/validate_common.py +0 -0
  243. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_schemas/lora_ref.py +0 -0
  244. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_settings.py +0 -0
  245. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/edit_params.py +0 -0
  246. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/edit_request.py +0 -0
  247. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/generate_params.py +0 -0
  248. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/generate_request.py +0 -0
  249. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/train_params.py +0 -0
  250. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ernie/_views/train_request.py +0 -0
  251. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/README.ja.md +0 -0
  252. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/README.md +0 -0
  253. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/__init__.py +0 -0
  254. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_constants/description.py +0 -0
  255. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_helpers/register.py +0 -0
  256. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_helpers/validate_edit.py +0 -0
  257. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_helpers/validate_generate.py +0 -0
  258. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_models/flux2.py +0 -0
  259. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/handle_edit.py +0 -0
  260. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/handle_generate.py +0 -0
  261. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/handle_train.py +0 -0
  262. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/is_quantize_override.py +0 -0
  263. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/resolve_edit_params.py +0 -0
  264. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/resolve_generate_params.py +0 -0
  265. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/resolve_lora_params.py +0 -0
  266. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/resolve_train_params.py +0 -0
  267. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/role_spec.py +0 -0
  268. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/split_repo.py +0 -0
  269. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_operations/validate_common.py +0 -0
  270. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_schemas/lora_ref.py +0 -0
  271. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_settings.py +0 -0
  272. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/edit_params.py +0 -0
  273. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/edit_request.py +0 -0
  274. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/generate_params.py +0 -0
  275. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/generate_request.py +0 -0
  276. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/train_params.py +0 -0
  277. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/flux2/_views/train_request.py +0 -0
  278. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/README.ja.md +0 -0
  279. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/README.md +0 -0
  280. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/__init__.py +0 -0
  281. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_constants/description.py +0 -0
  282. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_helpers/register.py +0 -0
  283. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_helpers/validate_generate.py +0 -0
  284. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_models/ideogram4.py +0 -0
  285. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_operations/handle_generate.py +0 -0
  286. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_operations/is_quantize_override.py +0 -0
  287. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_operations/resolve_generate_params.py +0 -0
  288. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_settings.py +0 -0
  289. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_views/generate_params.py +0 -0
  290. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ideogram4/_views/generate_request.py +0 -0
  291. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/README.ja.md +0 -0
  292. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/README.md +0 -0
  293. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/__init__.py +0 -0
  294. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_constants/description.py +0 -0
  295. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_helpers/register.py +0 -0
  296. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_helpers/validate_generate.py +0 -0
  297. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_models/ltx2.py +0 -0
  298. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_operations/detect_mode.py +0 -0
  299. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_operations/handle_generate.py +0 -0
  300. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_operations/resolve_generate_params.py +0 -0
  301. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_settings.py +0 -0
  302. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_views/generate_params.py +0 -0
  303. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/ltx2/_views/generate_request.py +0 -0
  304. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/README.ja.md +0 -0
  305. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/README.md +0 -0
  306. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/__init__.py +0 -0
  307. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_constants/description.py +0 -0
  308. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_helpers/register.py +0 -0
  309. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_helpers/validate_edit.py +0 -0
  310. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_helpers/validate_generate.py +0 -0
  311. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_models/qwen.py +0 -0
  312. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/handle_edit.py +0 -0
  313. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/handle_generate.py +0 -0
  314. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/is_quantize_override.py +0 -0
  315. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/resolve_edit_params.py +0 -0
  316. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/resolve_generate_params.py +0 -0
  317. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/resolve_lora_params.py +0 -0
  318. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_operations/validate_common.py +0 -0
  319. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_schemas/lora_ref.py +0 -0
  320. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_settings.py +0 -0
  321. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_views/edit_params.py +0 -0
  322. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_views/edit_request.py +0 -0
  323. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_views/generate_params.py +0 -0
  324. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/qwen/_views/generate_request.py +0 -0
  325. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/README.ja.md +0 -0
  326. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/README.md +0 -0
  327. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/__init__.py +0 -0
  328. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_constants/description.py +0 -0
  329. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_helpers/register.py +0 -0
  330. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_helpers/validate_upscale.py +0 -0
  331. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_models/seedvr2.py +0 -0
  332. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_operations/handle_upscale.py +0 -0
  333. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_operations/is_quantize_override.py +0 -0
  334. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_operations/resolve_upscale_params.py +0 -0
  335. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_settings.py +0 -0
  336. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_views/upscale_params.py +0 -0
  337. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/seedvr2/_views/upscale_request.py +0 -0
  338. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/README.ja.md +0 -0
  339. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/README.md +0 -0
  340. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/__init__.py +0 -0
  341. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_constants/description.py +0 -0
  342. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_exceptions/FetchError.py +0 -0
  343. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_exceptions/SearchBackendError.py +0 -0
  344. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_helpers/register.py +0 -0
  345. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_models/crawl4ai.py +0 -0
  346. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_models/searxng.py +0 -0
  347. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_operations/handle_fetch.py +0 -0
  348. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_operations/handle_search.py +0 -0
  349. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_operations/resolve_fetch_params.py +0 -0
  350. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_operations/resolve_search_params.py +0 -0
  351. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_operations/resolve_searxng_config_dir.py +0 -0
  352. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_services/__init__.py +0 -0
  353. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_services/web_backend_process.py +0 -0
  354. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_settings.py +0 -0
  355. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/fetch_params.py +0 -0
  356. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/fetch_request.py +0 -0
  357. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/fetch_result.py +0 -0
  358. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/search_params.py +0 -0
  359. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/search_request.py +0 -0
  360. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/_views/search_response.py +0 -0
  361. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/resources/__init__.py +0 -0
  362. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/resources/searxng/__init__.py +0 -0
  363. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/web/resources/searxng/settings.yml +0 -0
  364. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/README.ja.md +0 -0
  365. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/README.md +0 -0
  366. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/__init__.py +0 -0
  367. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_constants/description.py +0 -0
  368. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_helpers/register.py +0 -0
  369. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_helpers/validate_generate.py +0 -0
  370. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_models/zimage.py +0 -0
  371. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/handle_generate.py +0 -0
  372. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/handle_train.py +0 -0
  373. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/is_quantize_override.py +0 -0
  374. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/resolve_generate_params.py +0 -0
  375. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/resolve_lora_params.py +0 -0
  376. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_operations/resolve_train_params.py +0 -0
  377. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_schemas/lora_ref.py +0 -0
  378. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_settings.py +0 -0
  379. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_views/generate_params.py +0 -0
  380. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_views/generate_request.py +0 -0
  381. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_views/train_params.py +0 -0
  382. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/capabilities/zimage/_views/train_request.py +0 -0
  383. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/__init__.py +0 -0
  384. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/_helpers/dedupe_resources.py +0 -0
  385. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/_helpers/register_all_capabilities.py +0 -0
  386. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/_helpers/run_resources.py +0 -0
  387. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/_helpers/select_specs.py +0 -0
  388. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/activate/_operations/preflight_hf_access.py +0 -0
  389. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/activate/cli.py +0 -0
  390. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_audio_acestep_turbo.py +0 -0
  391. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_audio_acestep_xl_base.py +0 -0
  392. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_audio_audiogen_medium.py +0 -0
  393. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_chat_chat_qwen3_6_27b.py +0 -0
  394. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_chat_chat_qwen3_omni.py +0 -0
  395. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_embedding_8b.py +0 -0
  396. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_vl_embedding_2b.py +0 -0
  397. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_depthpro_base.py +0 -0
  398. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_ernie_base.py +0 -0
  399. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_ernie_turbo.py +0 -0
  400. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_flux2_klein_9b.py +0 -0
  401. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_flux2_klein_base_4b.py +0 -0
  402. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_flux2_klein_base_9b.py +0 -0
  403. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_ideogram4_fp8.py +0 -0
  404. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_qwen_edit_2509.py +0 -0
  405. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_qwen_image.py +0 -0
  406. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_seedvr2_3b.py +0 -0
  407. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_seedvr2_7b.py +0 -0
  408. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_zimage_base.py +0 -0
  409. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_image_zimage_turbo.py +0 -0
  410. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_video_ltx2_distilled.py +0 -0
  411. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_web_web_fetch.py +0 -0
  412. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_helpers/check_web_web_search.py +0 -0
  413. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_operations/build_check_result.py +0 -0
  414. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_operations/check_context.py +0 -0
  415. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_operations/create_sample_image.py +0 -0
  416. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/_schemas/check_result.py +0 -0
  417. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/check/cli.py +0 -0
  418. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/cli.py +0 -0
  419. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/config/cli.py +0 -0
  420. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/config/edit/cli.py +0 -0
  421. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/config/init/cli.py +0 -0
  422. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/config/show/cli.py +0 -0
  423. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/deactivate/cli.py +0 -0
  424. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/run/asgi.py +0 -0
  425. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/__init__.py +0 -0
  426. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/_services/service_manager.py +0 -0
  427. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/cli.py +0 -0
  428. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/install/cli.py +0 -0
  429. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/start/cli.py +0 -0
  430. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/status/cli.py +0 -0
  431. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/stop/cli.py +0 -0
  432. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/service/uninstall/cli.py +0 -0
  433. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/cli/status/cli.py +0 -0
  434. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/app/__init__.py +0 -0
  435. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/app/_schemas/app_context.py +0 -0
  436. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/app/_services/user_directory.py +0 -0
  437. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/app/_settings.py +0 -0
  438. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/capability/__init__.py +0 -0
  439. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/capability/_schemas/capability_spec.py +0 -0
  440. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/capability/_services/capability_spec_registry.py +0 -0
  441. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/config/__init__.py +0 -0
  442. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/config/_exceptions/user_config_error.py +0 -0
  443. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/config/_helpers/get_user_settings_path.py +0 -0
  444. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/__init__.py +0 -0
  445. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_helpers/create_file_store.py +0 -0
  446. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_helpers/resolve_file_ref.py +0 -0
  447. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_schemas/file_data_url_ref.py +0 -0
  448. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_schemas/file_id_ref.py +0 -0
  449. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_schemas/file_record.py +0 -0
  450. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_schemas/file_url_ref.py +0 -0
  451. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_services/file_store.py +0 -0
  452. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_settings.py +0 -0
  453. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_types/file_id.py +0 -0
  454. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_types/file_ref.py +0 -0
  455. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/file/_views/resolved_file_ref.py +0 -0
  456. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/__init__.py +0 -0
  457. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_enums/job_status.py +0 -0
  458. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_helpers/creep_progress.py +0 -0
  459. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_models/job.py +0 -0
  460. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_services/job_store.py +0 -0
  461. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_services/progress_reporter.py +0 -0
  462. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_types/job_id.py +0 -0
  463. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_types/job_result.py +0 -0
  464. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/job/_types/job_type.py +0 -0
  465. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/logging/__init__.py +0 -0
  466. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/logging/_helpers/get_log_level.py +0 -0
  467. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/logging/_helpers/setup_logger.py +0 -0
  468. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/logging/_settings.py +0 -0
  469. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/logging/_types/log_level.py +0 -0
  470. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/__init__.py +0 -0
  471. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_exceptions/memory_budget_error.py +0 -0
  472. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_helpers/create_memory_manager.py +0 -0
  473. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_operations/log_memory_limit.py +0 -0
  474. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_operations/resolve_effective_memory_limit_gb.py +0 -0
  475. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_operations/resolve_framework_strategy.py +0 -0
  476. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_schemas/framework_strategy.py +0 -0
  477. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_schemas/memory_stats.py +0 -0
  478. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_schemas/resident_model.py +0 -0
  479. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_schemas/resident_model_stats.py +0 -0
  480. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_services/memory_manager.py +0 -0
  481. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_settings.py +0 -0
  482. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_types/framework_name.py +0 -0
  483. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/memory/_types/resident_key.py +0 -0
  484. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/__init__.py +0 -0
  485. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_exceptions/unknown_model_error.py +0 -0
  486. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_schemas/model_spec.py +0 -0
  487. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_services/model_registry.py +0 -0
  488. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_alias.py +0 -0
  489. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_domain.py +0 -0
  490. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_family.py +0 -0
  491. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_key.py +0 -0
  492. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_name.py +0 -0
  493. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/model/_types/model_repo.py +0 -0
  494. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/net/__init__.py +0 -0
  495. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/net/_exceptions/unsafe_url_error.py +0 -0
  496. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/net/_helpers/verify_public_url.py +0 -0
  497. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/net/_settings.py +0 -0
  498. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/__init__.py +0 -0
  499. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_exceptions/setup_required_error.py +0 -0
  500. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/docker_image_resource.py +0 -0
  501. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/hf_snapshot_resource.py +0 -0
  502. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/local_path_resource.py +0 -0
  503. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/python_package_resource.py +0 -0
  504. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/python_venv_resource.py +0 -0
  505. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/setup_status.py +0 -0
  506. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_schemas/url_file_resource.py +0 -0
  507. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_services/setup_manager.py +0 -0
  508. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_types/setup_resource.py +0 -0
  509. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/setup/_types/setup_target.py +0 -0
  510. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/workdir/__init__.py +0 -0
  511. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/workdir/_helpers/create_work_dir.py +0 -0
  512. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/workdir/_settings.py +0 -0
  513. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/worker/__init__.py +0 -0
  514. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/worker/_helpers/create_worker.py +0 -0
  515. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/worker/_services/worker.py +0 -0
  516. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/worker/_settings.py +0 -0
  517. {kiapi-0.1.0 → kiapi-0.2.0}/kiapi/core/worker/_types/job_thunk.py +0 -0
  518. {kiapi-0.1.0 → kiapi-0.2.0}/mise.toml +0 -0
  519. {kiapi-0.1.0 → kiapi-0.2.0}/tests/__init__.py +0 -0
  520. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/__init__.py +0 -0
  521. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/chat/__init__.py +0 -0
  522. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/chat/test_router.py +0 -0
  523. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/test_openapi.py +0 -0
  524. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/web/__init__.py +0 -0
  525. {kiapi-0.1.0 → kiapi-0.2.0}/tests/api/web/test_negotiate_format.py +0 -0
  526. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/__init__.py +0 -0
  527. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/_helpers/__init__.py +0 -0
  528. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/_helpers/test_attach_mflux_progress.py +0 -0
  529. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/__init__.py +0 -0
  530. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_helpers/__init__.py +0 -0
  531. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_helpers/test_register.py +0 -0
  532. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_operations/__init__.py +0 -0
  533. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_operations/test_handle_generate.py +0 -0
  534. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_operations/test_resolve_ace_step_paths.py +0 -0
  535. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_operations/test_resolve_extract_params.py +0 -0
  536. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_operations/test_resolve_generate_params.py +0 -0
  537. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_services/__init__.py +0 -0
  538. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_services/test_ace_step_engine.py +0 -0
  539. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_views/__init__.py +0 -0
  540. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/acestep/_views/test_generate_request.py +0 -0
  541. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/audiogen/__init__.py +0 -0
  542. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/audiogen/_helpers/__init__.py +0 -0
  543. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/audiogen/_helpers/test_validate_generate.py +0 -0
  544. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/audiogen/_operations/__init__.py +0 -0
  545. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/audiogen/_operations/test_resolve_generate_params.py +0 -0
  546. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/__init__.py +0 -0
  547. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_operations/__init__.py +0 -0
  548. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_operations/test_emit_streaming_response.py +0 -0
  549. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_operations/test_ensure_streaming_detokenizer_compat.py +0 -0
  550. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_operations/test_parse_messages.py +0 -0
  551. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_operations/test_stream_text_from_tokens.py +0 -0
  552. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_utils/__init__.py +0 -0
  553. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/chat/_utils/test_apply_parallel_tool_call_policy.py +0 -0
  554. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/__init__.py +0 -0
  555. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_helpers/__init__.py +0 -0
  556. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_helpers/test_register.py +0 -0
  557. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_helpers/test_validate_generate.py +0 -0
  558. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_operations/__init__.py +0 -0
  559. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_operations/test_detect_mode.py +0 -0
  560. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/ltx2/_operations/test_resolve_generate_params.py +0 -0
  561. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/__init__.py +0 -0
  562. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_operations/__init__.py +0 -0
  563. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_operations/test_resolve_fetch_params.py +0 -0
  564. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_operations/test_resolve_search_params.py +0 -0
  565. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_operations/test_resolve_searxng_config_dir.py +0 -0
  566. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_services/__init__.py +0 -0
  567. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_services/test_web_backend_process.py +0 -0
  568. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_views/__init__.py +0 -0
  569. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/_views/test_fetch_request.py +0 -0
  570. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/web/test_settings.py +0 -0
  571. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/__init__.py +0 -0
  572. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_helpers/__init__.py +0 -0
  573. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_helpers/test_validate_generate.py +0 -0
  574. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_operations/__init__.py +0 -0
  575. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_operations/test_is_quantize_override.py +0 -0
  576. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_operations/test_resolve_generate_params.py +0 -0
  577. {kiapi-0.1.0 → kiapi-0.2.0}/tests/capabilities/zimage/_operations/test_resolve_train_params.py +0 -0
  578. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/__init__.py +0 -0
  579. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/activate/__init__.py +0 -0
  580. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/activate/_operations/__init__.py +0 -0
  581. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/activate/_operations/test_preflight_hf_access.py +0 -0
  582. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/check/__init__.py +0 -0
  583. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/check/_operations/test_resolve_check_operation.py +0 -0
  584. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/__init__.py +0 -0
  585. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/conftest.py +0 -0
  586. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/edit/__init__.py +0 -0
  587. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/edit/test_cli.py +0 -0
  588. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/init/__init__.py +0 -0
  589. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/init/test_cli.py +0 -0
  590. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/show/__init__.py +0 -0
  591. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/show/test_cli.py +0 -0
  592. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/template/__init__.py +0 -0
  593. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/config/template/test_cli.py +0 -0
  594. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/__init__.py +0 -0
  595. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/conftest.py +0 -0
  596. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/install/__init__.py +0 -0
  597. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/install/test_cli.py +0 -0
  598. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/start/__init__.py +0 -0
  599. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/start/test_cli.py +0 -0
  600. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/status/__init__.py +0 -0
  601. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/status/test_cli.py +0 -0
  602. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/stop/__init__.py +0 -0
  603. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/stop/test_cli.py +0 -0
  604. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/uninstall/__init__.py +0 -0
  605. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/service/uninstall/test_cli.py +0 -0
  606. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/status/__init__.py +0 -0
  607. {kiapi-0.1.0 → kiapi-0.2.0}/tests/cli/status/test_cli.py +0 -0
  608. {kiapi-0.1.0 → kiapi-0.2.0}/tests/conftest.py +0 -0
  609. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/__init__.py +0 -0
  610. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/app/__init__.py +0 -0
  611. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/app/_schemas/test_app_context.py +0 -0
  612. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/app/_services/__init__.py +0 -0
  613. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/app/_services/test_user_directory.py +0 -0
  614. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/app/test_settings.py +0 -0
  615. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/config/__init__.py +0 -0
  616. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/config/_helpers/__init__.py +0 -0
  617. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/config/_helpers/test_get_user_settings_path.py +0 -0
  618. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/config/conftest.py +0 -0
  619. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/__init__.py +0 -0
  620. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/_helpers/test_create_file_store.py +0 -0
  621. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/_helpers/test_resolve_file_ref.py +0 -0
  622. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/_services/__init__.py +0 -0
  623. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/_services/test_file_store.py +0 -0
  624. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/file/test_settings.py +0 -0
  625. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/__init__.py +0 -0
  626. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_helpers/test_creep_progress.py +0 -0
  627. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_models/__init__.py +0 -0
  628. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_models/test_job.py +0 -0
  629. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_services/__init__.py +0 -0
  630. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_services/test_job_store.py +0 -0
  631. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/job/_services/test_progress_reporter.py +0 -0
  632. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/memory/__init__.py +0 -0
  633. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/memory/_operations/__init__.py +0 -0
  634. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/memory/_operations/test_resolve_effective_memory_limit_gb.py +0 -0
  635. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/memory/_services/__init__.py +0 -0
  636. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/memory/_services/test_memory_manager.py +0 -0
  637. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/model/__init__.py +0 -0
  638. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/model/_schemas/__init__.py +0 -0
  639. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/model/_schemas/test_model_spec.py +0 -0
  640. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/model/_services/__init__.py +0 -0
  641. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/model/_services/test_model_registry.py +0 -0
  642. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/net/__init__.py +0 -0
  643. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/net/_helpers/__init__.py +0 -0
  644. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/net/_helpers/test_verify_public_url.py +0 -0
  645. {kiapi-0.1.0/tests/core/setup → kiapi-0.2.0/tests/core/relay}/__init__.py +0 -0
  646. {kiapi-0.1.0/tests/core/setup → kiapi-0.2.0/tests/core/relay}/_services/__init__.py +0 -0
  647. {kiapi-0.1.0/tests/core/workdir → kiapi-0.2.0/tests/core/relay/_views}/__init__.py +0 -0
  648. {kiapi-0.1.0/tests/core/workdir/_helpers → kiapi-0.2.0/tests/core/setup}/__init__.py +0 -0
  649. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/setup/_services/test_setup_manager.py +0 -0
  650. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/workdir/_helpers/test_create_work_dir.py +0 -0
  651. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/workdir/test_settings.py +0 -0
  652. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/worker/__init__.py +0 -0
  653. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/worker/_services/__init__.py +0 -0
  654. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/worker/_services/test_worker.py +0 -0
  655. {kiapi-0.1.0 → kiapi-0.2.0}/tests/core/worker/test_settings.py +0 -0
@@ -5,6 +5,7 @@ build/
5
5
  dist/
6
6
  wheels/
7
7
  *.egg-info
8
+ .mypy_cache/
8
9
 
9
10
  # Virtual environments
10
11
  .venv
@@ -22,6 +22,10 @@ kiapi/
22
22
  workdir/ # 実行中の一時作業ディレクトリ管理
23
23
  net/ # ネットワークガード(ユーザー指定 URL の SSRF 検証)
24
24
  logging/ # ロギング設定
25
+ relay/ # relay 抽象、plugin registry、process 内 dispatcher
26
+
27
+ relay/
28
+ gcp/ # Firebase RTDB 通知 + GCS payload transport
25
29
 
26
30
  capabilities/ # ファミリーごとに 1 パッケージ(dir == family)
27
31
  chat/ # OpenAI 互換 chat completions(マルチモーダル / tool / stream)
@@ -186,6 +190,50 @@ SearXNG / Crawl4AI は Docker container そのものとしてではなく、kiap
186
190
  resident subprocess の payload として扱う。起動コマンドが `docker run --rm` なので、
187
191
  kiapi 停止や eviction で subprocess を止めれば container も掃除される。
188
192
 
193
+ ## Remote Job Relay
194
+
195
+ relay は `KIAPI_RELAY_DEFAULT` または `kiapi run --relay ...` で有効化する optional
196
+ background subsystem である。`core/relay` は安定した `Relay` / `RelayDelivery` protocol
197
+ と plugin registry を定義する。`relay/gcp` は GCP transport、`relay/local` は local
198
+ verification 用の filesystem-backed transport を実装する。
199
+
200
+ ```text
201
+ requester
202
+ → GCS request.json
203
+ → RTDB request notification
204
+ ┊
205
+ GCP relay SSE listener
206
+ → RTDB queued
207
+ → local relay queue
208
+ → RTDB running
209
+ → process 内 FastAPI app へ ASGI dispatch
210
+ → GCS response.body(binary のみ)
211
+ → GCS response.json(create-only generation precondition)
212
+ → atomic RTDB terminal response + request deletion
213
+ ```
214
+
215
+ listener は delivery processing と独立して動作するため、現在の request を実行中でも次の
216
+ request を local queue に積める。relay runner は delivery を直列に消費する。GPU job の
217
+ 直列化は API worker が引き続き管理し、relay progress は内部 job state ではなく bridge
218
+ の進捗を表す。
219
+
220
+ RTDB には Google OAuth credential を使う REST streaming API でアクセスする。terminal
221
+ delivery は root-level multi-location `PATCH` を使い、response 公開と request 削除を
222
+ atomic に行う。GCS は body、metadata の順で公開する。`response.json` が commit marker
223
+ であり、`if_generation_match=0` を使用する。
224
+
225
+ queued delivery の消費時に `response.json` が存在する場合、content type と size を復旧し、
226
+ terminal RTDB notification を再送して API dispatch を skip する。これにより、完了済み
227
+ 処理を意図的に繰り返さず at-least-once notification handling を実現する。同じ node ID の
228
+ kiapi process が複数あれば実行は重複し得るが、GCS commit marker を作成できるのは 1
229
+ process だけである。
230
+
231
+ LocalRelay は GCP の layout を local root directory 配下に写す。
232
+ `{root}/{prefix}/nodes/{node_id}/requests/*.json` を poll し、
233
+ `sessions/{session_id}/request.json` から request を読み、`response.body` を
234
+ `response.json` より先に書き、terminal status を書いたタイミングで request notification
235
+ を削除する。
236
+
189
237
  ---
190
238
 
191
239
  > [!NOTE] 以降は、上記の各ステップを実現する仕組み。
@@ -22,6 +22,10 @@ kiapi/
22
22
  workdir/ # temporary working directory management
23
23
  net/ # network guard for user-provided URLs
24
24
  logging/ # logging setup
25
+ relay/ # relay abstraction, plugin registry, and local dispatcher
26
+
27
+ relay/
28
+ gcp/ # Firebase RTDB notifications + GCS payload transport
25
29
 
26
30
  capabilities/ # one package per family (dir == family)
27
31
  chat/ # OpenAI-compatible chat completions (multimodal / tool / stream)
@@ -144,6 +148,51 @@ Web search/fetch also runs through the worker. `memory.acquire` starts the
144
148
  resident SearXNG or Crawl4AI Docker subprocess on first use, waits for its
145
149
  healthcheck, and passes the local backend URL to the capability handler.
146
150
 
151
+ ## Remote Job Relay
152
+
153
+ The relay is an optional background subsystem enabled by
154
+ `KIAPI_RELAY_DEFAULT` or `kiapi run --relay ...`. `core/relay` defines the
155
+ stable `Relay` / `RelayDelivery` protocols and plugin registry. `relay/gcp`
156
+ implements the GCP transport, and `relay/local` implements a filesystem-backed
157
+ transport for local verification.
158
+
159
+ ```text
160
+ requester
161
+ → GCS request.json
162
+ → RTDB request notification
163
+ ┊
164
+ GCP relay SSE listener
165
+ → RTDB queued
166
+ → local relay queue
167
+ → RTDB running
168
+ → ASGI dispatch to the in-process FastAPI app
169
+ → GCS response.body (binary only)
170
+ → GCS response.json (create-only generation precondition)
171
+ → atomic RTDB terminal response + request deletion
172
+ ```
173
+
174
+ The listener runs independently from delivery processing, so it can queue new
175
+ requests while the current request is running. The relay runner consumes
176
+ deliveries serially. The API worker still controls GPU job serialization;
177
+ relay progress represents bridge progress rather than internal job state.
178
+
179
+ RTDB uses its REST streaming API with Google OAuth credentials. Terminal
180
+ delivery uses a root-level multi-location `PATCH`, making response publication
181
+ and request deletion atomic. GCS publishes body first and metadata last.
182
+ `response.json` is the commit marker and uses `if_generation_match=0`.
183
+
184
+ If `response.json` already exists when a queued delivery is consumed, the relay
185
+ recovers its content type and size, republishes the terminal RTDB notification,
186
+ and skips API dispatch. This provides at-least-once notification handling
187
+ without intentionally repeating completed work. Duplicate kiapi processes can
188
+ still execute concurrently, but only one can create the GCS commit marker.
189
+
190
+ LocalRelay mirrors the GCP layout below a local root directory. It polls
191
+ `{root}/{prefix}/nodes/{node_id}/requests/*.json`, reads requests from
192
+ `sessions/{session_id}/request.json`, writes `response.body` before
193
+ `response.json`, and removes the request notification when the terminal status
194
+ is written.
195
+
147
196
  ## Models
148
197
 
149
198
  All servable models are registered as `ModelSpec` entries in one global model
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.0] - 2026-06-26
10
+
11
+ ### Added
12
+
13
+ - Added an optional plugin-based remote job relay with Firebase Realtime Database notifications, GCS request/response payloads, in-process ASGI dispatch, committed-response recovery, and atomic terminal delivery.
14
+ - Added a filesystem-backed LocalRelay for local relay verification without GCP services.
15
+ - Added relay verification scripts for LocalRelay, GCPRelay, and end-to-end LocalRelay capability checks.
16
+
17
+ ### Changed
18
+
19
+ - Moved GCP relay dependencies into the optional `relay-gcp` extra.
20
+ - Updated the minimum `pydantic-settings-manager` dependency to 3.7.0.
21
+
22
+ ### Fixed
23
+
24
+ - Added the OAuth scopes required by the Firebase Realtime Database REST API to GCP relay credentials.
25
+ - Added relay support for multipart file uploads such as `POST /v1/files`.
26
+
9
27
  ## [0.1.0] - 2026-06-23
10
28
 
11
29
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiapi
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Unified local inference API server for LLM agents on Apple Silicon (MLX): chat, embedding, image, music, sound-effect, and video — one process, one global memory budget, one single-flight queue, unified jobs and files.
5
5
  Project-URL: Homepage, https://github.com/kiarina/kiapi
6
6
  Project-URL: Repository, https://github.com/kiarina/kiapi
@@ -25,6 +25,7 @@ Requires-Python: <3.13,>=3.12
25
25
  Requires-Dist: click
26
26
  Requires-Dist: fastapi<0.137
27
27
  Requires-Dist: httpx
28
+ Requires-Dist: kiarina-utils-common>=2.2.0
28
29
  Requires-Dist: mflux>=0.18.0
29
30
  Requires-Dist: mlx-audiocraft>=0.1.0
30
31
  Requires-Dist: mlx-embeddings>=0.1.0
@@ -33,7 +34,7 @@ Requires-Dist: numpy<2.5
33
34
  Requires-Dist: pillow
34
35
  Requires-Dist: platformdirs
35
36
  Requires-Dist: psutil
36
- Requires-Dist: pydantic-settings-manager>=3.6.0
37
+ Requires-Dist: pydantic-settings-manager>=3.7.0
37
38
  Requires-Dist: pydantic>=2
38
39
  Requires-Dist: python-multipart
39
40
  Requires-Dist: pyyaml
@@ -43,6 +44,9 @@ Requires-Dist: torch
43
44
  Requires-Dist: torchaudio
44
45
  Requires-Dist: torchvision
45
46
  Requires-Dist: uvicorn[standard]
47
+ Provides-Extra: relay-gcp
48
+ Requires-Dist: google-cloud-storage>=3.7.0; extra == 'relay-gcp'
49
+ Requires-Dist: kiarina-lib-google>=2.2.1; extra == 'relay-gcp'
46
50
  Description-Content-Type: text/markdown
47
51
 
48
52
  # kiapi
@@ -243,6 +247,71 @@ kiapi service stop
243
247
  kiapi service uninstall
244
248
  ```
245
249
 
250
+ ## Remote Job Relay
251
+
252
+ The optional GCP relay lets a kiapi node inside a closed network receive API
253
+ work without exposing an inbound socket. Firebase Realtime Database carries
254
+ small notifications, while Cloud Storage carries request and response bodies.
255
+ Install kiapi with the `relay-gcp` extra to enable it:
256
+
257
+ ```sh
258
+ python3.12 -m pip install --upgrade "kiapi[relay-gcp]"
259
+ uv tool install --python 3.12 "kiapi[relay-gcp]"
260
+ ```
261
+
262
+ ```sh
263
+ export KIAPI_RELAY_GCP_NODE_ID="studio-1"
264
+ export KIAPI_RELAY_GCP_DATABASE_URL="https://PROJECT.firebaseio.com"
265
+ export KIAPI_RELAY_GCP_BUCKET="PRIVATE_RELAY_BUCKET"
266
+ export KIAPI_RELAY_GCP_PREFIX="private/kiapi"
267
+
268
+ # Uses Application Default Credentials by default.
269
+ kiapi run --relay gcp
270
+ ```
271
+
272
+ The requester writes
273
+ `{prefix}/sessions/{session_id}/request.json` in GCS, then writes a notification
274
+ to `{prefix}/nodes/{node_id}/requests/{session_id}` in RTDB. The relay reports
275
+ `queued`, `running`, and the terminal result below the requester node's
276
+ `responses` path.
277
+
278
+ - Requests are dispatched directly to the in-process FastAPI app and handled
279
+ one at a time by the relay.
280
+ - JSON responses use `response.json`. Binary responses write `response.body`
281
+ before `response.json`.
282
+ - `response.json` uses a GCS create-only generation precondition. A completed
283
+ response found after restart is reported without executing the API again.
284
+ - The terminal RTDB response and request deletion use one atomic multi-location
285
+ update.
286
+ - Startup installs a prefix-scoped lifecycle rule that deletes session objects
287
+ after one day. Set `KIAPI_RELAY_GCP_MANAGE_BUCKET_LIFECYCLE=false` when
288
+ infrastructure manages this rule.
289
+
290
+ Use a dedicated bucket and narrowly scoped RTDB/GCS permissions. Google
291
+ credentials are configured through
292
+ [`kiarina-lib-google`](https://github.com/kiarina/kiarina-python/tree/main/packages/kiarina-lib-google).
293
+
294
+ See [GCP Relay setup](kiapi/relay/gcp/README.md) for resource creation, IAM,
295
+ authentication, configuration, and verification steps.
296
+
297
+ For local relay verification without GCP, use `local`. It uses the same
298
+ in-process dispatch path but stores notifications and payloads under a local
299
+ directory:
300
+
301
+ ```sh
302
+ export KIAPI_RELAY_LOCAL_NODE_ID="studio-1"
303
+ export KIAPI_RELAY_LOCAL_ROOT="/tmp/kiapi/relay"
304
+ export KIAPI_RELAY_LOCAL_PREFIX="private/kiapi"
305
+
306
+ kiapi run --relay local
307
+ ```
308
+
309
+ The requester writes `{root}/{prefix}/sessions/{session_id}/request.json`, then
310
+ writes `{root}/{prefix}/nodes/{node_id}/requests/{session_id}.json` with
311
+ `{"session_id":"...","source_node_id":"..."}`. The relay writes bridge status
312
+ to `{root}/{prefix}/nodes/{source_node_id}/responses/{session_id}.json` and
313
+ stores the committed response in the session directory.
314
+
246
315
  ## Architecture
247
316
 
248
317
  > [!NOTE]
@@ -197,6 +197,68 @@ kiapi service stop
197
197
  kiapi service uninstall
198
198
  ```
199
199
 
200
+ ## Remote Job Relay
201
+
202
+ オプションの GCP relay を使うと、閉鎖ネットワーク内の kiapi node に inbound socket を
203
+ 公開せず API 処理を依頼できます。小さな通知は Firebase Realtime Database、request /
204
+ response body は Cloud Storage で受け渡します。
205
+ 有効にするには、`relay-gcp` extra 付きで kiapi をインストールしてください。
206
+
207
+ ```sh
208
+ python3.12 -m pip install --upgrade "kiapi[relay-gcp]"
209
+ uv tool install --python 3.12 "kiapi[relay-gcp]"
210
+ ```
211
+
212
+ ```sh
213
+ export KIAPI_RELAY_GCP_NODE_ID="studio-1"
214
+ export KIAPI_RELAY_GCP_DATABASE_URL="https://PROJECT.firebaseio.com"
215
+ export KIAPI_RELAY_GCP_BUCKET="PRIVATE_RELAY_BUCKET"
216
+ export KIAPI_RELAY_GCP_PREFIX="private/kiapi"
217
+
218
+ # 既定では Application Default Credentials を使用
219
+ kiapi run --relay gcp
220
+ ```
221
+
222
+ requester は GCS の
223
+ `{prefix}/sessions/{session_id}/request.json` を書き込んだ後、RTDB の
224
+ `{prefix}/nodes/{node_id}/requests/{session_id}` へ通知を書き込みます。relay は
225
+ requester node の `responses` path へ `queued`、`running`、terminal result を通知します。
226
+
227
+ - request は process 内の FastAPI app へ直接 dispatch され、relay が 1 件ずつ処理します。
228
+ - JSON response は `response.json`、binary response は `response.body` の後に
229
+ `response.json` を書き込みます。
230
+ - `response.json` は GCS の create-only generation precondition で排他します。再起動後に
231
+ 完了済み response が見つかった場合、API を再実行せず結果を再通知します。
232
+ - terminal RTDB response の通知と request 削除は 1 回の atomic multi-location update
233
+ で行います。
234
+ - 起動時に session object を 1 日後に削除する prefix 限定 lifecycle rule を設定します。
235
+ infrastructure 側で管理する場合は
236
+ `KIAPI_RELAY_GCP_MANAGE_BUCKET_LIFECYCLE=false` を指定してください。
237
+
238
+ 専用 bucket と必要最小限の RTDB / GCS 権限を使用してください。Google credential は
239
+ [`kiarina-lib-google`](https://github.com/kiarina/kiarina-python/tree/main/packages/kiarina-lib-google)
240
+ で設定します。
241
+
242
+ resource 作成、IAM、認証、設定、検証手順は
243
+ [GCP Relay setup](kiapi/relay/gcp/README.ja.md) を参照してください。
244
+
245
+ GCP を使わずに relay を検証したい場合は `local` を使えます。同じ process 内 dispatch
246
+ 経路を使い、通知と payload をローカルディレクトリ配下に保存します。
247
+
248
+ ```sh
249
+ export KIAPI_RELAY_LOCAL_NODE_ID="studio-1"
250
+ export KIAPI_RELAY_LOCAL_ROOT="/tmp/kiapi/relay"
251
+ export KIAPI_RELAY_LOCAL_PREFIX="private/kiapi"
252
+
253
+ kiapi run --relay local
254
+ ```
255
+
256
+ requester は `{root}/{prefix}/sessions/{session_id}/request.json` を書き込んだ後、
257
+ `{root}/{prefix}/nodes/{node_id}/requests/{session_id}.json` に
258
+ `{"session_id":"...","source_node_id":"..."}` を書き込みます。relay は bridge status を
259
+ `{root}/{prefix}/nodes/{source_node_id}/responses/{session_id}.json` に書き込み、
260
+ committed response を session directory に保存します。
261
+
200
262
  ## Architecture
201
263
 
202
264
  > [!NOTE]
@@ -196,6 +196,71 @@ kiapi service stop
196
196
  kiapi service uninstall
197
197
  ```
198
198
 
199
+ ## Remote Job Relay
200
+
201
+ The optional GCP relay lets a kiapi node inside a closed network receive API
202
+ work without exposing an inbound socket. Firebase Realtime Database carries
203
+ small notifications, while Cloud Storage carries request and response bodies.
204
+ Install kiapi with the `relay-gcp` extra to enable it:
205
+
206
+ ```sh
207
+ python3.12 -m pip install --upgrade "kiapi[relay-gcp]"
208
+ uv tool install --python 3.12 "kiapi[relay-gcp]"
209
+ ```
210
+
211
+ ```sh
212
+ export KIAPI_RELAY_GCP_NODE_ID="studio-1"
213
+ export KIAPI_RELAY_GCP_DATABASE_URL="https://PROJECT.firebaseio.com"
214
+ export KIAPI_RELAY_GCP_BUCKET="PRIVATE_RELAY_BUCKET"
215
+ export KIAPI_RELAY_GCP_PREFIX="private/kiapi"
216
+
217
+ # Uses Application Default Credentials by default.
218
+ kiapi run --relay gcp
219
+ ```
220
+
221
+ The requester writes
222
+ `{prefix}/sessions/{session_id}/request.json` in GCS, then writes a notification
223
+ to `{prefix}/nodes/{node_id}/requests/{session_id}` in RTDB. The relay reports
224
+ `queued`, `running`, and the terminal result below the requester node's
225
+ `responses` path.
226
+
227
+ - Requests are dispatched directly to the in-process FastAPI app and handled
228
+ one at a time by the relay.
229
+ - JSON responses use `response.json`. Binary responses write `response.body`
230
+ before `response.json`.
231
+ - `response.json` uses a GCS create-only generation precondition. A completed
232
+ response found after restart is reported without executing the API again.
233
+ - The terminal RTDB response and request deletion use one atomic multi-location
234
+ update.
235
+ - Startup installs a prefix-scoped lifecycle rule that deletes session objects
236
+ after one day. Set `KIAPI_RELAY_GCP_MANAGE_BUCKET_LIFECYCLE=false` when
237
+ infrastructure manages this rule.
238
+
239
+ Use a dedicated bucket and narrowly scoped RTDB/GCS permissions. Google
240
+ credentials are configured through
241
+ [`kiarina-lib-google`](https://github.com/kiarina/kiarina-python/tree/main/packages/kiarina-lib-google).
242
+
243
+ See [GCP Relay setup](kiapi/relay/gcp/README.md) for resource creation, IAM,
244
+ authentication, configuration, and verification steps.
245
+
246
+ For local relay verification without GCP, use `local`. It uses the same
247
+ in-process dispatch path but stores notifications and payloads under a local
248
+ directory:
249
+
250
+ ```sh
251
+ export KIAPI_RELAY_LOCAL_NODE_ID="studio-1"
252
+ export KIAPI_RELAY_LOCAL_ROOT="/tmp/kiapi/relay"
253
+ export KIAPI_RELAY_LOCAL_PREFIX="private/kiapi"
254
+
255
+ kiapi run --relay local
256
+ ```
257
+
258
+ The requester writes `{root}/{prefix}/sessions/{session_id}/request.json`, then
259
+ writes `{root}/{prefix}/nodes/{node_id}/requests/{session_id}.json` with
260
+ `{"session_id":"...","source_node_id":"..."}`. The relay writes bridge status
261
+ to `{root}/{prefix}/nodes/{source_node_id}/responses/{session_id}.json` and
262
+ stores the committed response in the session directory.
263
+
199
264
  ## Architecture
200
265
 
201
266
  > [!NOTE]
@@ -11,6 +11,8 @@ from kiapi.core.app import AppContext
11
11
  from kiapi.core.capability import capability_spec_registry
12
12
  from kiapi.core.logging import setup_logger
13
13
  from kiapi.core.model import model_registry
14
+ from kiapi.core.relay import RelayRunner, relay_registry
15
+ from kiapi.core.relay import settings_manager as relay_settings_manager
14
16
  from kiapi.core.worker import create_worker
15
17
 
16
18
  from .audio.acestep.router import router as acestep_router
@@ -65,11 +67,20 @@ async def lifespan(app: FastAPI): # type: ignore
65
67
  app.state.worker = worker
66
68
 
67
69
  worker.start()
68
-
69
70
  asyncio.create_task(worker.warmup()) # noqa: RUF006
70
71
 
72
+ relay_runner: RelayRunner | None = None
73
+
74
+ if relay_settings_manager.get_settings().default is not None:
75
+ relay_runner = RelayRunner(relay_registry.resolve(), app)
76
+ relay_runner.start()
77
+ app.state.relay_runner = relay_runner
78
+
71
79
  yield
72
80
 
81
+ if relay_runner is not None:
82
+ await relay_runner.stop()
83
+
73
84
  await worker.stop()
74
85
 
75
86
 
@@ -10,6 +10,10 @@ _SETTINGS_IMPORT_PATHS = [
10
10
  "kiapi.core.memory",
11
11
  "kiapi.core.worker",
12
12
  "kiapi.core.net",
13
+ "kiapi.core.relay",
14
+ "kiapi.relay.gcp",
15
+ "kiapi.relay.local",
16
+ "kiarina.lib.google",
13
17
  "kiapi.capabilities.chat",
14
18
  "kiapi.capabilities.embedding",
15
19
  "kiapi.capabilities.depthpro",
@@ -7,13 +7,20 @@ from kiapi.api import settings_manager as api_settings_manager
7
7
  from kiapi.cli import register_all_capabilities
8
8
  from kiapi.core.logging import get_log_level
9
9
  from kiapi.core.logging import settings_manager as logging_settings_manager
10
+ from kiapi.core.relay import settings_manager as relay_settings_manager
10
11
 
11
12
 
12
13
  @click.command()
13
14
  @click.option("--host", type=str, help="Bind socket to this host")
14
15
  @click.option("--port", type=int, help="Bind socket to this port")
16
+ @click.option("--relay", type=str, help="Start a relay, for example: gcp")
15
17
  @click.option("--debug", is_flag=True, help="Enable debug logging and hot reload")
16
- def run(host: str | None, port: int | None, debug: bool) -> None:
18
+ def run(
19
+ host: str | None,
20
+ port: int | None,
21
+ relay: str | None,
22
+ debug: bool,
23
+ ) -> None:
17
24
  """Run the kiapi API server."""
18
25
  api_cli_args: dict[str, str | int] = {}
19
26
 
@@ -25,6 +32,9 @@ def run(host: str | None, port: int | None, debug: bool) -> None:
25
32
  if api_cli_args:
26
33
  api_settings_manager.cli_args = api_cli_args
27
34
 
35
+ if relay is not None:
36
+ relay_settings_manager.cli_args = {"default": relay}
37
+
28
38
  settings = api_settings_manager.get_settings()
29
39
 
30
40
  if debug:
@@ -33,6 +43,9 @@ def run(host: str | None, port: int | None, debug: bool) -> None:
33
43
  # in-process cli_args, so propagate the log level via the environment.
34
44
  os.environ["KIAPI_LOG_LEVEL"] = "DEBUG"
35
45
 
46
+ if relay is not None:
47
+ os.environ["KIAPI_RELAY_DEFAULT"] = relay
48
+
36
49
  # Hot reload requires an import string (the worker subprocess
37
50
  # re-imports the app), so use the ASGI factory that registers
38
51
  # capabilities on import.
@@ -31,7 +31,7 @@ def load_user_settings(path: Path | None = None) -> None:
31
31
  user_configs = _normalize_user_configs(data, settings_path)
32
32
 
33
33
  try:
34
- load_user_configs(user_configs)
34
+ load_user_configs(user_configs, missing_module_policy="warn")
35
35
  except (ImportError, AttributeError, TypeError, ValueError) as exc:
36
36
  raise UserConfigError(f"Failed to load {settings_path}: {exc}") from exc
37
37
 
@@ -0,0 +1,34 @@
1
+ from ._instances.relay_registry import relay_registry
2
+ from ._schemas.relay_file_body import RelayFileBody
3
+ from ._schemas.relay_json_body import RelayJsonBody
4
+ from ._schemas.relay_multipart_body import RelayMultipartBody
5
+ from ._schemas.relay_multipart_file import RelayMultipartFile
6
+ from ._services.relay_runner import RelayRunner
7
+ from ._settings import RelaySettings, settings_manager
8
+ from ._types.relay import Relay
9
+ from ._types.relay_delivery import RelayDelivery
10
+ from ._types.relay_method import RelayMethod
11
+ from ._types.relay_name import RelayName
12
+ from ._types.relay_specifier import RelaySpecifier
13
+ from ._views.relay_error import RelayError
14
+ from ._views.relay_request import RelayRequest
15
+ from ._views.relay_response import RelayResponse
16
+
17
+ __all__ = [
18
+ "Relay",
19
+ "RelayDelivery",
20
+ "RelayError",
21
+ "RelayFileBody",
22
+ "RelayJsonBody",
23
+ "RelayMethod",
24
+ "RelayMultipartBody",
25
+ "RelayMultipartFile",
26
+ "RelayName",
27
+ "RelayRequest",
28
+ "RelayResponse",
29
+ "RelayRunner",
30
+ "RelaySettings",
31
+ "RelaySpecifier",
32
+ "relay_registry",
33
+ "settings_manager",
34
+ ]
@@ -0,0 +1,12 @@
1
+ from kiarina.utils.component_registry import ComponentRegistry
2
+
3
+ from .._settings import settings_manager
4
+ from .._types.relay import Relay
5
+
6
+ relay_registry = ComponentRegistry[Relay](
7
+ expected_type=Relay, # type: ignore[type-abstract]
8
+ component_label="Relay",
9
+ get_default=lambda: settings_manager.get_settings().default,
10
+ get_presets=lambda: settings_manager.get_settings().presets,
11
+ get_customs=lambda: settings_manager.get_settings().customs,
12
+ )
@@ -0,0 +1,11 @@
1
+ from pathlib import Path
2
+ from typing import Literal
3
+
4
+ from pydantic import BaseModel
5
+
6
+
7
+ class RelayFileBody(BaseModel):
8
+ type: Literal["file"] = "file"
9
+ path: Path
10
+ content_type: str
11
+ size: int
@@ -0,0 +1,8 @@
1
+ from typing import Any, Literal
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class RelayJsonBody(BaseModel):
7
+ type: Literal["json"] = "json"
8
+ value: Any
@@ -0,0 +1,8 @@
1
+ from pydantic import BaseModel, Field
2
+
3
+ from .relay_multipart_file import RelayMultipartFile
4
+
5
+
6
+ class RelayMultipartBody(BaseModel):
7
+ fields: dict[str, str] = Field(default_factory=dict)
8
+ files: list[RelayMultipartFile]
@@ -0,0 +1,19 @@
1
+ import base64
2
+ import binascii
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ class RelayMultipartFile(BaseModel):
8
+ field: str = "file"
9
+ filename: str
10
+ content_type: str | None = None
11
+ content_base64: str = Field(
12
+ description="Base64-encoded file bytes for a multipart/form-data part.",
13
+ )
14
+
15
+ def content(self) -> bytes:
16
+ try:
17
+ return base64.b64decode(self.content_base64, validate=True)
18
+ except binascii.Error as exc:
19
+ raise ValueError("content_base64 must be valid base64") from exc