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.
- kiapi-0.1.0/.gitignore +24 -0
- kiapi-0.1.0/ARCHITECTURE.ja.md +468 -0
- kiapi-0.1.0/ARCHITECTURE.md +324 -0
- kiapi-0.1.0/CHANGELOG.md +28 -0
- kiapi-0.1.0/CONTRIBUTING.md +74 -0
- kiapi-0.1.0/LICENSE +21 -0
- kiapi-0.1.0/PKG-INFO +337 -0
- kiapi-0.1.0/README.ja.md +288 -0
- kiapi-0.1.0/README.md +290 -0
- kiapi-0.1.0/SECURITY.md +41 -0
- kiapi-0.1.0/kiapi/__init__.py +3 -0
- kiapi-0.1.0/kiapi/__main__.py +4 -0
- kiapi-0.1.0/kiapi/api/__init__.py +26 -0
- kiapi-0.1.0/kiapi/api/_constants/require_auth.py +14 -0
- kiapi-0.1.0/kiapi/api/_helpers/build_job_responses.py +73 -0
- kiapi-0.1.0/kiapi/api/_helpers/build_openapi.py +55 -0
- kiapi-0.1.0/kiapi/api/_helpers/build_train_responses.py +21 -0
- kiapi-0.1.0/kiapi/api/_helpers/get_accept.py +20 -0
- kiapi-0.1.0/kiapi/api/_helpers/get_ctx.py +7 -0
- kiapi-0.1.0/kiapi/api/_helpers/get_worker.py +7 -0
- kiapi-0.1.0/kiapi/api/_helpers/register_capability_endpoints.py +70 -0
- kiapi-0.1.0/kiapi/api/_helpers/submit_and_maybe_wait.py +113 -0
- kiapi-0.1.0/kiapi/api/_settings.py +50 -0
- kiapi-0.1.0/kiapi/api/_views/async_job_response.py +21 -0
- kiapi-0.1.0/kiapi/api/_views/capability_model_spec.py +49 -0
- kiapi-0.1.0/kiapi/api/app.py +150 -0
- kiapi-0.1.0/kiapi/api/audio/acestep/_views/extract_response.py +57 -0
- kiapi-0.1.0/kiapi/api/audio/acestep/_views/track_response.py +57 -0
- kiapi-0.1.0/kiapi/api/audio/acestep/router.py +190 -0
- kiapi-0.1.0/kiapi/api/audio/audiogen/_views/audio_response.py +46 -0
- kiapi-0.1.0/kiapi/api/audio/audiogen/router.py +77 -0
- kiapi-0.1.0/kiapi/api/chat/_views/chat_completion_response.py +71 -0
- kiapi-0.1.0/kiapi/api/chat/router.py +253 -0
- kiapi-0.1.0/kiapi/api/embedding/_views/embedding_response.py +35 -0
- kiapi-0.1.0/kiapi/api/embedding/router.py +82 -0
- kiapi-0.1.0/kiapi/api/files/_operations/get_file.py +14 -0
- kiapi-0.1.0/kiapi/api/files/_operations/get_file_id.py +18 -0
- kiapi-0.1.0/kiapi/api/files/_views/file_delete_response.py +14 -0
- kiapi-0.1.0/kiapi/api/files/_views/file_list_response.py +15 -0
- kiapi-0.1.0/kiapi/api/files/router.py +105 -0
- kiapi-0.1.0/kiapi/api/health/_views/health_response.py +26 -0
- kiapi-0.1.0/kiapi/api/health/router.py +28 -0
- kiapi-0.1.0/kiapi/api/image/depthpro/_views/estimate_response.py +70 -0
- kiapi-0.1.0/kiapi/api/image/depthpro/router.py +81 -0
- kiapi-0.1.0/kiapi/api/image/ernie/_views/image_response.py +50 -0
- kiapi-0.1.0/kiapi/api/image/ernie/router.py +181 -0
- kiapi-0.1.0/kiapi/api/image/flux2/_views/image_response.py +53 -0
- kiapi-0.1.0/kiapi/api/image/flux2/router.py +197 -0
- kiapi-0.1.0/kiapi/api/image/ideogram4/_views/image_response.py +55 -0
- kiapi-0.1.0/kiapi/api/image/ideogram4/router.py +87 -0
- kiapi-0.1.0/kiapi/api/image/qwen/_views/image_response.py +47 -0
- kiapi-0.1.0/kiapi/api/image/qwen/router.py +141 -0
- kiapi-0.1.0/kiapi/api/image/seedvr2/_views/image_response.py +50 -0
- kiapi-0.1.0/kiapi/api/image/seedvr2/router.py +83 -0
- kiapi-0.1.0/kiapi/api/image/zimage/_views/image_response.py +49 -0
- kiapi-0.1.0/kiapi/api/image/zimage/router.py +131 -0
- kiapi-0.1.0/kiapi/api/jobs/_operations/get_job_id.py +18 -0
- kiapi-0.1.0/kiapi/api/jobs/_views/job_delete_response.py +19 -0
- kiapi-0.1.0/kiapi/api/jobs/_views/job_list_response.py +15 -0
- kiapi-0.1.0/kiapi/api/jobs/router.py +62 -0
- kiapi-0.1.0/kiapi/api/models/_schemas/openai_model_spec.py +26 -0
- kiapi-0.1.0/kiapi/api/models/_views/model_list_response.py +15 -0
- kiapi-0.1.0/kiapi/api/models/router.py +29 -0
- kiapi-0.1.0/kiapi/api/video/ltx2/_views/__init__.py +1 -0
- kiapi-0.1.0/kiapi/api/video/ltx2/_views/video_response.py +59 -0
- kiapi-0.1.0/kiapi/api/video/ltx2/router.py +89 -0
- kiapi-0.1.0/kiapi/api/web/_views/__init__.py +7 -0
- kiapi-0.1.0/kiapi/api/web/_views/fetch_api_request.py +26 -0
- kiapi-0.1.0/kiapi/api/web/_views/fetch_error_response.py +25 -0
- kiapi-0.1.0/kiapi/api/web/router.py +302 -0
- kiapi-0.1.0/kiapi/capabilities/__init__.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/_exceptions/CapabilityError.py +2 -0
- kiapi-0.1.0/kiapi/capabilities/_exceptions/ValidationError.py +2 -0
- kiapi-0.1.0/kiapi/capabilities/_helpers/attach_mflux_progress.py +50 -0
- kiapi-0.1.0/kiapi/capabilities/_helpers/get_file_path.py +20 -0
- kiapi-0.1.0/kiapi/capabilities/_helpers/resolve_file_ref.py +16 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/README.ja.md +174 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/README.md +167 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/__init__.py +37 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_constants/description.py +122 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_exceptions/ace_step_engine_error.py +2 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_helpers/register.py +96 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_models/acestep.py +105 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_cover.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_extract.py +38 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_generate.py +18 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/handle_repaint.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_ace_step_paths.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_cover_params.py +21 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_engine.py +10 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_extract_params.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_generate_params.py +18 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_operations/resolve_repaint_params.py +22 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_schemas/ace_step_paths.py +29 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_services/ace_step_engine.py +143 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_settings.py +82 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/ace_step_base.py +61 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/cover_params.py +26 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/cover_request.py +49 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/extract_params.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/extract_request.py +33 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/generate_params.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/generate_request.py +54 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/repaint_params.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/repaint_request.py +51 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/_views/track_params.py +7 -0
- kiapi-0.1.0/kiapi/capabilities/acestep/worker_subprocess.py +247 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/README.ja.md +49 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/README.md +48 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/__init__.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_constants/description.py +60 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/attach_audiogen_progress.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/register.py +42 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_helpers/validate_generate.py +14 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_models/audiogen.py +98 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_operations/handle_generate.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_operations/resolve_generate_params.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_settings.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_views/generate_params.py +14 -0
- kiapi-0.1.0/kiapi/capabilities/audiogen/_views/generate_request.py +96 -0
- kiapi-0.1.0/kiapi/capabilities/chat/README.ja.md +822 -0
- kiapi-0.1.0/kiapi/capabilities/chat/README.md +806 -0
- kiapi-0.1.0/kiapi/capabilities/chat/__init__.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_constants/description.py +163 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_helpers/register.py +67 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_models/qwen3_5.py +183 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_models/qwen3_omni.py +242 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/apply_template.py +74 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/completed_hermes_tool_call_text.py +9 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/emit_streaming_response.py +297 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/ensure_streaming_detokenizer_compat.py +49 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/format_response.py +72 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/handle_chat.py +25 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_hermes_tool_calls.py +63 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_json_tool_calls.py +66 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/parse_messages.py +326 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/resolve_chat_params.py +50 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/stream_text_from_tokens.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_operations/strip_tool_calls.py +15 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_settings.py +74 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_utils/apply_parallel_tool_call_policy.py +17 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_utils/apply_seed.py +8 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_utils/load_audio_mono.py +31 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_utils/load_mlx_vlm.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_utils/warmup_params.py +26 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_views/chat_params.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/chat/_views/chat_request.py +153 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/README.ja.md +131 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/README.md +124 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/__init__.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_constants/description.py +39 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_helpers/register.py +46 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_helpers/validate_estimate.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_models/depthpro.py +144 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/handle_estimate.py +50 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/is_quantize_override.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_operations/resolve_estimate_params.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_settings.py +46 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_views/estimate_params.py +21 -0
- kiapi-0.1.0/kiapi/capabilities/depthpro/_views/estimate_request.py +63 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/README.ja.md +137 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/README.md +128 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/__init__.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_constants/description.py +47 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_helpers/register.py +66 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_models/qwen3_text.py +53 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_models/qwen3_vl.py +97 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_operations/format_response.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_operations/handle_embed.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_operations/parse_inputs.py +108 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_operations/resolve_embed_params.py +18 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_settings.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_utils/to_vector.py +20 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_views/embed_params.py +17 -0
- kiapi-0.1.0/kiapi/capabilities/embedding/_views/embed_request.py +39 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/README.ja.md +242 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/README.md +223 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/__init__.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_constants/description.py +71 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/register.py +60 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/validate_edit.py +19 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_helpers/validate_generate.py +8 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_models/ernie.py +356 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_edit.py +39 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_generate.py +38 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/handle_train.py +77 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/is_quantize_override.py +16 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_edit_params.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_generate_params.py +40 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_lora_params.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/resolve_train_params.py +43 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_operations/validate_common.py +33 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_schemas/lora_ref.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_settings.py +151 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/edit_params.py +36 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/edit_request.py +142 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/generate_params.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/generate_request.py +127 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/train_params.py +28 -0
- kiapi-0.1.0/kiapi/capabilities/ernie/_views/train_request.py +96 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/README.ja.md +260 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/README.md +241 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/__init__.py +36 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_constants/description.py +81 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/register.py +98 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/validate_edit.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_helpers/validate_generate.py +8 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_models/flux2.py +396 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_edit.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_generate.py +46 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/handle_train.py +105 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/is_quantize_override.py +16 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_edit_params.py +43 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_generate_params.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_lora_params.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/resolve_train_params.py +42 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/role_spec.py +13 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/split_repo.py +11 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_operations/validate_common.py +35 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_schemas/lora_ref.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_settings.py +181 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/edit_params.py +36 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/edit_request.py +145 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/generate_params.py +36 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/generate_request.py +150 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/train_params.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/flux2/_views/train_request.py +102 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/README.ja.md +230 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/README.md +219 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/__init__.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_constants/description.py +65 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_helpers/register.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_helpers/validate_generate.py +31 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_models/ideogram4.py +120 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/handle_generate.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/is_quantize_override.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_operations/resolve_generate_params.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_settings.py +89 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_views/generate_params.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/ideogram4/_views/generate_request.py +118 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/README.ja.md +287 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/README.md +274 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/__init__.py +26 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_constants/description.py +81 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_helpers/register.py +58 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_helpers/validate_generate.py +42 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_models/ltx2.py +106 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/detect_mode.py +19 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/handle_generate.py +52 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_operations/resolve_generate_params.py +31 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_settings.py +93 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_views/generate_params.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/ltx2/_views/generate_request.py +151 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/README.ja.md +251 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/README.md +235 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/__init__.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_constants/description.py +53 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/register.py +60 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/validate_edit.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_helpers/validate_generate.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_models/qwen.py +224 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/handle_edit.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/handle_generate.py +46 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/is_quantize_override.py +15 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_edit_params.py +35 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_generate_params.py +39 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/resolve_lora_params.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_operations/validate_common.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_schemas/lora_ref.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_settings.py +107 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_views/edit_params.py +36 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_views/edit_request.py +138 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_views/generate_params.py +37 -0
- kiapi-0.1.0/kiapi/capabilities/qwen/_views/generate_request.py +149 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/README.ja.md +234 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/README.md +219 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/__init__.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_constants/description.py +46 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_helpers/register.py +60 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_helpers/validate_upscale.py +52 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_models/seedvr2.py +140 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/handle_upscale.py +42 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/is_quantize_override.py +12 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_operations/resolve_upscale_params.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_settings.py +74 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_views/upscale_params.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/seedvr2/_views/upscale_request.py +94 -0
- kiapi-0.1.0/kiapi/capabilities/web/README.ja.md +187 -0
- kiapi-0.1.0/kiapi/capabilities/web/README.md +171 -0
- kiapi-0.1.0/kiapi/capabilities/web/__init__.py +30 -0
- kiapi-0.1.0/kiapi/capabilities/web/_constants/description.py +38 -0
- kiapi-0.1.0/kiapi/capabilities/web/_exceptions/FetchError.py +24 -0
- kiapi-0.1.0/kiapi/capabilities/web/_exceptions/SearchBackendError.py +11 -0
- kiapi-0.1.0/kiapi/capabilities/web/_helpers/register.py +59 -0
- kiapi-0.1.0/kiapi/capabilities/web/_models/crawl4ai.py +32 -0
- kiapi-0.1.0/kiapi/capabilities/web/_models/searxng.py +44 -0
- kiapi-0.1.0/kiapi/capabilities/web/_operations/handle_fetch.py +145 -0
- kiapi-0.1.0/kiapi/capabilities/web/_operations/handle_search.py +56 -0
- kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_fetch_params.py +19 -0
- kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_search_params.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/web/_operations/resolve_searxng_config_dir.py +21 -0
- kiapi-0.1.0/kiapi/capabilities/web/_services/__init__.py +1 -0
- kiapi-0.1.0/kiapi/capabilities/web/_services/web_backend_process.py +144 -0
- kiapi-0.1.0/kiapi/capabilities/web/_settings.py +138 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_params.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_request.py +29 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/fetch_result.py +20 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/search_params.py +43 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/search_request.py +93 -0
- kiapi-0.1.0/kiapi/capabilities/web/_views/search_response.py +49 -0
- kiapi-0.1.0/kiapi/capabilities/web/resources/__init__.py +0 -0
- kiapi-0.1.0/kiapi/capabilities/web/resources/searxng/__init__.py +0 -0
- kiapi-0.1.0/kiapi/capabilities/web/resources/searxng/settings.yml +11 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/README.ja.md +249 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/README.md +231 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/__init__.py +34 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_constants/description.py +73 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_helpers/register.py +62 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_helpers/validate_generate.py +37 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_models/zimage.py +278 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/handle_generate.py +38 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/handle_train.py +78 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/is_quantize_override.py +11 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_generate_params.py +39 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_lora_params.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_operations/resolve_train_params.py +38 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_schemas/lora_ref.py +27 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_settings.py +166 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_views/generate_params.py +23 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_views/generate_request.py +127 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_views/train_params.py +22 -0
- kiapi-0.1.0/kiapi/capabilities/zimage/_views/train_request.py +101 -0
- kiapi-0.1.0/kiapi/cli/__init__.py +11 -0
- kiapi-0.1.0/kiapi/cli/_helpers/dedupe_resources.py +12 -0
- kiapi-0.1.0/kiapi/cli/_helpers/register_all_capabilities.py +36 -0
- kiapi-0.1.0/kiapi/cli/_helpers/run_resources.py +24 -0
- kiapi-0.1.0/kiapi/cli/_helpers/select_specs.py +67 -0
- kiapi-0.1.0/kiapi/cli/activate/_operations/preflight_hf_access.py +129 -0
- kiapi-0.1.0/kiapi/cli/activate/cli.py +37 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_acestep_turbo.py +22 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_acestep_xl_base.py +22 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_audio_audiogen_medium.py +24 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_chat_chat_qwen3_6_27b.py +19 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_chat_chat_qwen3_omni.py +19 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_embedding_8b.py +14 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_embedding_embedding_qwen3_vl_embedding_2b.py +19 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_depthpro_base.py +21 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ernie_base.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ernie_turbo.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_9b.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_base_4b.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_flux2_klein_base_9b.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_ideogram4_fp8.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_qwen_edit_2509.py +27 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_qwen_image.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_seedvr2_3b.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_seedvr2_7b.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_zimage_base.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_image_zimage_turbo.py +23 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_video_ltx2_distilled.py +26 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_web_web_fetch.py +14 -0
- kiapi-0.1.0/kiapi/cli/check/_helpers/check_web_web_search.py +14 -0
- kiapi-0.1.0/kiapi/cli/check/_operations/build_check_result.py +20 -0
- kiapi-0.1.0/kiapi/cli/check/_operations/check_context.py +10 -0
- kiapi-0.1.0/kiapi/cli/check/_operations/create_sample_image.py +46 -0
- kiapi-0.1.0/kiapi/cli/check/_schemas/check_result.py +12 -0
- kiapi-0.1.0/kiapi/cli/check/cli.py +89 -0
- kiapi-0.1.0/kiapi/cli/cli.py +29 -0
- kiapi-0.1.0/kiapi/cli/config/cli.py +17 -0
- kiapi-0.1.0/kiapi/cli/config/edit/cli.py +32 -0
- kiapi-0.1.0/kiapi/cli/config/init/cli.py +33 -0
- kiapi-0.1.0/kiapi/cli/config/show/cli.py +13 -0
- kiapi-0.1.0/kiapi/cli/config/template/cli.py +36 -0
- kiapi-0.1.0/kiapi/cli/deactivate/cli.py +49 -0
- kiapi-0.1.0/kiapi/cli/run/asgi.py +16 -0
- kiapi-0.1.0/kiapi/cli/run/cli.py +59 -0
- kiapi-0.1.0/kiapi/cli/service/__init__.py +5 -0
- kiapi-0.1.0/kiapi/cli/service/_services/service_manager.py +107 -0
- kiapi-0.1.0/kiapi/cli/service/cli.py +19 -0
- kiapi-0.1.0/kiapi/cli/service/install/cli.py +17 -0
- kiapi-0.1.0/kiapi/cli/service/start/cli.py +22 -0
- kiapi-0.1.0/kiapi/cli/service/status/cli.py +81 -0
- kiapi-0.1.0/kiapi/cli/service/stop/cli.py +19 -0
- kiapi-0.1.0/kiapi/cli/service/uninstall/cli.py +16 -0
- kiapi-0.1.0/kiapi/cli/status/cli.py +226 -0
- kiapi-0.1.0/kiapi/core/app/__init__.py +16 -0
- kiapi-0.1.0/kiapi/core/app/_schemas/app_context.py +28 -0
- kiapi-0.1.0/kiapi/core/app/_services/user_directory.py +59 -0
- kiapi-0.1.0/kiapi/core/app/_settings.py +46 -0
- kiapi-0.1.0/kiapi/core/capability/__init__.py +11 -0
- kiapi-0.1.0/kiapi/core/capability/_schemas/capability_spec.py +17 -0
- kiapi-0.1.0/kiapi/core/capability/_services/capability_spec_registry.py +21 -0
- kiapi-0.1.0/kiapi/core/config/__init__.py +11 -0
- kiapi-0.1.0/kiapi/core/config/_exceptions/user_config_error.py +2 -0
- kiapi-0.1.0/kiapi/core/config/_helpers/get_user_settings_path.py +7 -0
- kiapi-0.1.0/kiapi/core/config/_helpers/load_user_settings.py +54 -0
- kiapi-0.1.0/kiapi/core/file/__init__.py +37 -0
- kiapi-0.1.0/kiapi/core/file/_helpers/create_file_store.py +7 -0
- kiapi-0.1.0/kiapi/core/file/_helpers/resolve_file_ref.py +90 -0
- kiapi-0.1.0/kiapi/core/file/_schemas/file_data_url_ref.py +19 -0
- kiapi-0.1.0/kiapi/core/file/_schemas/file_id_ref.py +16 -0
- kiapi-0.1.0/kiapi/core/file/_schemas/file_record.py +46 -0
- kiapi-0.1.0/kiapi/core/file/_schemas/file_url_ref.py +16 -0
- kiapi-0.1.0/kiapi/core/file/_services/file_store.py +138 -0
- kiapi-0.1.0/kiapi/core/file/_settings.py +22 -0
- kiapi-0.1.0/kiapi/core/file/_types/file_id.py +2 -0
- kiapi-0.1.0/kiapi/core/file/_types/file_ref.py +12 -0
- kiapi-0.1.0/kiapi/core/file/_views/resolved_file_ref.py +16 -0
- kiapi-0.1.0/kiapi/core/job/__init__.py +24 -0
- kiapi-0.1.0/kiapi/core/job/_enums/job_status.py +9 -0
- kiapi-0.1.0/kiapi/core/job/_helpers/creep_progress.py +123 -0
- kiapi-0.1.0/kiapi/core/job/_models/job.py +121 -0
- kiapi-0.1.0/kiapi/core/job/_services/job_store.py +33 -0
- kiapi-0.1.0/kiapi/core/job/_services/progress_reporter.py +79 -0
- kiapi-0.1.0/kiapi/core/job/_types/job_id.py +3 -0
- kiapi-0.1.0/kiapi/core/job/_types/job_result.py +5 -0
- kiapi-0.1.0/kiapi/core/job/_types/job_type.py +4 -0
- kiapi-0.1.0/kiapi/core/logging/__init__.py +14 -0
- kiapi-0.1.0/kiapi/core/logging/_helpers/get_log_level.py +8 -0
- kiapi-0.1.0/kiapi/core/logging/_helpers/setup_logger.py +14 -0
- kiapi-0.1.0/kiapi/core/logging/_settings.py +34 -0
- kiapi-0.1.0/kiapi/core/logging/_types/log_level.py +3 -0
- kiapi-0.1.0/kiapi/core/memory/__init__.py +21 -0
- kiapi-0.1.0/kiapi/core/memory/_exceptions/memory_budget_error.py +2 -0
- kiapi-0.1.0/kiapi/core/memory/_helpers/create_memory_manager.py +17 -0
- kiapi-0.1.0/kiapi/core/memory/_operations/log_memory_limit.py +29 -0
- kiapi-0.1.0/kiapi/core/memory/_operations/resolve_effective_memory_limit_gb.py +13 -0
- kiapi-0.1.0/kiapi/core/memory/_operations/resolve_framework_strategy.py +42 -0
- kiapi-0.1.0/kiapi/core/memory/_schemas/framework_strategy.py +14 -0
- kiapi-0.1.0/kiapi/core/memory/_schemas/memory_stats.py +24 -0
- kiapi-0.1.0/kiapi/core/memory/_schemas/resident_model.py +14 -0
- kiapi-0.1.0/kiapi/core/memory/_schemas/resident_model_stats.py +49 -0
- kiapi-0.1.0/kiapi/core/memory/_services/memory_manager.py +257 -0
- kiapi-0.1.0/kiapi/core/memory/_settings.py +36 -0
- kiapi-0.1.0/kiapi/core/memory/_types/framework_name.py +4 -0
- kiapi-0.1.0/kiapi/core/memory/_types/resident_key.py +4 -0
- kiapi-0.1.0/kiapi/core/model/__init__.py +36 -0
- kiapi-0.1.0/kiapi/core/model/_exceptions/unknown_model_error.py +2 -0
- kiapi-0.1.0/kiapi/core/model/_schemas/model_spec.py +145 -0
- kiapi-0.1.0/kiapi/core/model/_services/model_registry.py +85 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_alias.py +2 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_domain.py +6 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_family.py +5 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_key.py +8 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_name.py +4 -0
- kiapi-0.1.0/kiapi/core/model/_types/model_repo.py +3 -0
- kiapi-0.1.0/kiapi/core/net/__init__.py +16 -0
- kiapi-0.1.0/kiapi/core/net/_exceptions/unsafe_url_error.py +7 -0
- kiapi-0.1.0/kiapi/core/net/_helpers/verify_public_url.py +68 -0
- kiapi-0.1.0/kiapi/core/net/_settings.py +28 -0
- kiapi-0.1.0/kiapi/core/setup/__init__.py +25 -0
- kiapi-0.1.0/kiapi/core/setup/_exceptions/setup_required_error.py +2 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/docker_image_resource.py +37 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/hf_snapshot_resource.py +50 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/local_path_resource.py +43 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/python_package_resource.py +58 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/python_venv_resource.py +63 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/setup_status.py +7 -0
- kiapi-0.1.0/kiapi/core/setup/_schemas/url_file_resource.py +43 -0
- kiapi-0.1.0/kiapi/core/setup/_services/setup_manager.py +331 -0
- kiapi-0.1.0/kiapi/core/setup/_types/setup_resource.py +21 -0
- kiapi-0.1.0/kiapi/core/setup/_types/setup_target.py +11 -0
- kiapi-0.1.0/kiapi/core/workdir/__init__.py +8 -0
- kiapi-0.1.0/kiapi/core/workdir/_helpers/create_work_dir.py +11 -0
- kiapi-0.1.0/kiapi/core/workdir/_settings.py +21 -0
- kiapi-0.1.0/kiapi/core/worker/__init__.py +23 -0
- kiapi-0.1.0/kiapi/core/worker/_helpers/create_worker.py +9 -0
- kiapi-0.1.0/kiapi/core/worker/_services/worker.py +165 -0
- kiapi-0.1.0/kiapi/core/worker/_settings.py +36 -0
- kiapi-0.1.0/kiapi/core/worker/_types/job_thunk.py +6 -0
- kiapi-0.1.0/mise.toml +3 -0
- kiapi-0.1.0/pyproject.toml +168 -0
- kiapi-0.1.0/tests/__init__.py +0 -0
- kiapi-0.1.0/tests/api/__init__.py +0 -0
- kiapi-0.1.0/tests/api/chat/__init__.py +0 -0
- kiapi-0.1.0/tests/api/chat/test_router.py +71 -0
- kiapi-0.1.0/tests/api/test_openapi.py +355 -0
- kiapi-0.1.0/tests/api/web/__init__.py +0 -0
- kiapi-0.1.0/tests/api/web/test_negotiate_format.py +31 -0
- kiapi-0.1.0/tests/capabilities/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/_helpers/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/_helpers/test_attach_mflux_progress.py +79 -0
- kiapi-0.1.0/tests/capabilities/acestep/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/acestep/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/acestep/_helpers/test_register.py +46 -0
- kiapi-0.1.0/tests/capabilities/acestep/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/acestep/_operations/test_handle_generate.py +52 -0
- kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_ace_step_paths.py +47 -0
- kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_extract_params.py +37 -0
- kiapi-0.1.0/tests/capabilities/acestep/_operations/test_resolve_generate_params.py +30 -0
- kiapi-0.1.0/tests/capabilities/acestep/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/acestep/_services/test_ace_step_engine.py +121 -0
- kiapi-0.1.0/tests/capabilities/acestep/_views/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/acestep/_views/test_generate_request.py +18 -0
- kiapi-0.1.0/tests/capabilities/audiogen/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/audiogen/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/audiogen/_helpers/test_validate_generate.py +19 -0
- kiapi-0.1.0/tests/capabilities/audiogen/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/audiogen/_operations/test_resolve_generate_params.py +41 -0
- kiapi-0.1.0/tests/capabilities/chat/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/chat/_operations/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/chat/_operations/test_emit_streaming_response.py +232 -0
- kiapi-0.1.0/tests/capabilities/chat/_operations/test_ensure_streaming_detokenizer_compat.py +30 -0
- kiapi-0.1.0/tests/capabilities/chat/_operations/test_parse_messages.py +74 -0
- kiapi-0.1.0/tests/capabilities/chat/_operations/test_stream_text_from_tokens.py +51 -0
- kiapi-0.1.0/tests/capabilities/chat/_utils/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/chat/_utils/test_apply_parallel_tool_call_policy.py +15 -0
- kiapi-0.1.0/tests/capabilities/ltx2/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_helpers/test_register.py +30 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_helpers/test_validate_generate.py +31 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_operations/test_detect_mode.py +76 -0
- kiapi-0.1.0/tests/capabilities/ltx2/_operations/test_resolve_generate_params.py +62 -0
- kiapi-0.1.0/tests/capabilities/web/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/web/_operations/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_fetch_params.py +38 -0
- kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_search_params.py +91 -0
- kiapi-0.1.0/tests/capabilities/web/_operations/test_resolve_searxng_config_dir.py +39 -0
- kiapi-0.1.0/tests/capabilities/web/_services/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/web/_services/test_web_backend_process.py +70 -0
- kiapi-0.1.0/tests/capabilities/web/_views/__init__.py +0 -0
- kiapi-0.1.0/tests/capabilities/web/_views/test_fetch_request.py +27 -0
- kiapi-0.1.0/tests/capabilities/web/test_settings.py +7 -0
- kiapi-0.1.0/tests/capabilities/zimage/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/zimage/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/zimage/_helpers/test_validate_generate.py +28 -0
- kiapi-0.1.0/tests/capabilities/zimage/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/capabilities/zimage/_operations/test_is_quantize_override.py +30 -0
- kiapi-0.1.0/tests/capabilities/zimage/_operations/test_resolve_generate_params.py +55 -0
- kiapi-0.1.0/tests/capabilities/zimage/_operations/test_resolve_train_params.py +47 -0
- kiapi-0.1.0/tests/cli/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/activate/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/activate/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/activate/_operations/test_preflight_hf_access.py +157 -0
- kiapi-0.1.0/tests/cli/check/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/check/_operations/test_resolve_check_operation.py +16 -0
- kiapi-0.1.0/tests/cli/config/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/config/conftest.py +12 -0
- kiapi-0.1.0/tests/cli/config/edit/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/config/edit/test_cli.py +40 -0
- kiapi-0.1.0/tests/cli/config/init/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/config/init/test_cli.py +47 -0
- kiapi-0.1.0/tests/cli/config/show/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/config/show/test_cli.py +22 -0
- kiapi-0.1.0/tests/cli/config/template/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/config/template/test_cli.py +19 -0
- kiapi-0.1.0/tests/cli/service/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/conftest.py +35 -0
- kiapi-0.1.0/tests/cli/service/install/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/install/test_cli.py +24 -0
- kiapi-0.1.0/tests/cli/service/start/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/start/test_cli.py +60 -0
- kiapi-0.1.0/tests/cli/service/status/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/status/test_cli.py +35 -0
- kiapi-0.1.0/tests/cli/service/stop/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/stop/test_cli.py +18 -0
- kiapi-0.1.0/tests/cli/service/uninstall/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/service/uninstall/test_cli.py +26 -0
- kiapi-0.1.0/tests/cli/status/__init__.py +1 -0
- kiapi-0.1.0/tests/cli/status/test_cli.py +146 -0
- kiapi-0.1.0/tests/conftest.py +12 -0
- kiapi-0.1.0/tests/core/__init__.py +0 -0
- kiapi-0.1.0/tests/core/app/__init__.py +0 -0
- kiapi-0.1.0/tests/core/app/_schemas/test_app_context.py +7 -0
- kiapi-0.1.0/tests/core/app/_services/__init__.py +1 -0
- kiapi-0.1.0/tests/core/app/_services/test_user_directory.py +45 -0
- kiapi-0.1.0/tests/core/app/test_settings.py +11 -0
- kiapi-0.1.0/tests/core/config/__init__.py +1 -0
- kiapi-0.1.0/tests/core/config/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/core/config/_helpers/test_get_user_settings_path.py +14 -0
- kiapi-0.1.0/tests/core/config/_helpers/test_load_user_settings.py +46 -0
- kiapi-0.1.0/tests/core/config/conftest.py +12 -0
- kiapi-0.1.0/tests/core/file/__init__.py +0 -0
- kiapi-0.1.0/tests/core/file/_helpers/test_create_file_store.py +7 -0
- kiapi-0.1.0/tests/core/file/_helpers/test_resolve_file_ref.py +46 -0
- kiapi-0.1.0/tests/core/file/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/core/file/_services/test_file_store.py +137 -0
- kiapi-0.1.0/tests/core/file/test_settings.py +7 -0
- kiapi-0.1.0/tests/core/job/__init__.py +0 -0
- kiapi-0.1.0/tests/core/job/_helpers/test_creep_progress.py +111 -0
- kiapi-0.1.0/tests/core/job/_models/__init__.py +0 -0
- kiapi-0.1.0/tests/core/job/_models/test_job.py +74 -0
- kiapi-0.1.0/tests/core/job/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/core/job/_services/test_job_store.py +53 -0
- kiapi-0.1.0/tests/core/job/_services/test_progress_reporter.py +74 -0
- kiapi-0.1.0/tests/core/memory/__init__.py +0 -0
- kiapi-0.1.0/tests/core/memory/_operations/__init__.py +1 -0
- kiapi-0.1.0/tests/core/memory/_operations/test_resolve_effective_memory_limit_gb.py +43 -0
- kiapi-0.1.0/tests/core/memory/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/core/memory/_services/test_memory_manager.py +281 -0
- kiapi-0.1.0/tests/core/model/__init__.py +0 -0
- kiapi-0.1.0/tests/core/model/_schemas/__init__.py +0 -0
- kiapi-0.1.0/tests/core/model/_schemas/test_model_spec.py +52 -0
- kiapi-0.1.0/tests/core/model/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/core/model/_services/test_model_registry.py +165 -0
- kiapi-0.1.0/tests/core/net/__init__.py +0 -0
- kiapi-0.1.0/tests/core/net/_helpers/__init__.py +0 -0
- kiapi-0.1.0/tests/core/net/_helpers/test_verify_public_url.py +74 -0
- kiapi-0.1.0/tests/core/setup/__init__.py +1 -0
- kiapi-0.1.0/tests/core/setup/_services/__init__.py +1 -0
- kiapi-0.1.0/tests/core/setup/_services/test_setup_manager.py +538 -0
- kiapi-0.1.0/tests/core/workdir/__init__.py +1 -0
- kiapi-0.1.0/tests/core/workdir/_helpers/__init__.py +1 -0
- kiapi-0.1.0/tests/core/workdir/_helpers/test_create_work_dir.py +15 -0
- kiapi-0.1.0/tests/core/workdir/test_settings.py +15 -0
- kiapi-0.1.0/tests/core/worker/__init__.py +0 -0
- kiapi-0.1.0/tests/core/worker/_services/__init__.py +0 -0
- kiapi-0.1.0/tests/core/worker/_services/test_worker.py +153 -0
- 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 行で区別できること)。
|