gpuai-sdk 0.3.7__tar.gz → 0.3.9__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 (208) hide show
  1. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/PKG-INFO +3 -2
  2. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/README.md +2 -1
  3. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/__init__.py +1 -1
  4. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/fine_tuning_api.py +276 -0
  5. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api_client.py +1 -1
  6. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/configuration.py +1 -1
  7. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_instance_request.py +3 -1
  8. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/instance.py +6 -2
  9. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/model.py +6 -2
  10. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk.egg-info/PKG-INFO +3 -2
  11. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/pyproject.toml +1 -1
  12. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/setup.py +1 -1
  13. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/LICENSE +0 -0
  14. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/__init__.py +0 -0
  15. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/billing_api.py +0 -0
  16. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/community_api.py +0 -0
  17. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/environments_api.py +0 -0
  18. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/gpu_types_api.py +0 -0
  19. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/inference_api.py +0 -0
  20. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/instances_api.py +0 -0
  21. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/meta_api.py +0 -0
  22. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/operations_api.py +0 -0
  23. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/pricing_api.py +0 -0
  24. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/registry_credentials_api.py +0 -0
  25. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/ssh_keys_api.py +0 -0
  26. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/templates_api.py +0 -0
  27. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/usage_api.py +0 -0
  28. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api/webhooks_api.py +0 -0
  29. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/api_response.py +0 -0
  30. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/exceptions.py +0 -0
  31. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/__init__.py +0 -0
  32. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/chat_choice.py +0 -0
  33. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/chat_completion_request.py +0 -0
  34. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/chat_completion_response.py +0 -0
  35. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/chat_message.py +0 -0
  36. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_earnings.py +0 -0
  37. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_earnings_entry.py +0 -0
  38. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_machine.py +0 -0
  39. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_machine_delist_result.py +0 -0
  40. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_machine_registration.py +0 -0
  41. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/community_supplier.py +0 -0
  42. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_crypto_deposit_request.py +0 -0
  43. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_fine_tuning_job_request.py +0 -0
  44. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_fine_tuning_job_request_gpuai.py +0 -0
  45. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_fine_tuning_job_request_method.py +0 -0
  46. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_fine_tuning_job_request_method_lora.py +0 -0
  47. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_instance_request_ports_inner.py +0 -0
  48. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_registry_credential_request.py +0 -0
  49. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_ssh_key_request.py +0 -0
  50. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/create_webhook_endpoint_request.py +0 -0
  51. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/crypto_deposit.py +0 -0
  52. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/environments.py +0 -0
  53. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/file_object.py +0 -0
  54. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job.py +0 -0
  55. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job_error.py +0 -0
  56. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job_event.py +0 -0
  57. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job_event_list.py +0 -0
  58. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job_list.py +0 -0
  59. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/fine_tuning_job_method.py +0 -0
  60. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/framework_version.py +0 -0
  61. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/get_health200_response.py +0 -0
  62. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/gpu_type.py +0 -0
  63. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/gpu_type_page.py +0 -0
  64. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/images_generations_request.py +0 -0
  65. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/images_response.py +0 -0
  66. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/images_response_data_inner.py +0 -0
  67. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/images_response_usage.py +0 -0
  68. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/include_item.py +0 -0
  69. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/instance_connection.py +0 -0
  70. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/instance_page.py +0 -0
  71. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/list_community_machines200_response.py +0 -0
  72. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/list_deposits200_response.py +0 -0
  73. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/list_registry_credentials200_response.py +0 -0
  74. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/model_list.py +0 -0
  75. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/model_parameters_inner.py +0 -0
  76. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/model_pricing.py +0 -0
  77. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/open_ai_error_envelope.py +0 -0
  78. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/open_ai_error_envelope_error.py +0 -0
  79. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/operation.py +0 -0
  80. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/operation_error.py +0 -0
  81. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/operation_result.py +0 -0
  82. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/pricing.py +0 -0
  83. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/pricing_page.py +0 -0
  84. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/problem.py +0 -0
  85. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/register_community_machine_request.py +0 -0
  86. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/registry_credential.py +0 -0
  87. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/spending_limit.py +0 -0
  88. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/ssh_key.py +0 -0
  89. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/ssh_key_page.py +0 -0
  90. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/stream_options.py +0 -0
  91. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/supplier_machine_view.py +0 -0
  92. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/template.py +0 -0
  93. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/template_env_inner.py +0 -0
  94. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/template_list.py +0 -0
  95. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/template_ports_inner.py +0 -0
  96. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/update_community_machine_request.py +0 -0
  97. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/update_instance_request.py +0 -0
  98. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/update_spending_limit_request.py +0 -0
  99. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/usage.py +0 -0
  100. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/usage_bucket.py +0 -0
  101. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/usage_page.py +0 -0
  102. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/video_create_request.py +0 -0
  103. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/video_job.py +0 -0
  104. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/video_list.py +0 -0
  105. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/vm_image.py +0 -0
  106. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/webhook_endpoint.py +0 -0
  107. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/models/webhook_endpoint_page.py +0 -0
  108. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/py.typed +0 -0
  109. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk/rest.py +0 -0
  110. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk.egg-info/SOURCES.txt +0 -0
  111. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk.egg-info/dependency_links.txt +0 -0
  112. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk.egg-info/requires.txt +0 -0
  113. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/gpuai_sdk.egg-info/top_level.txt +0 -0
  114. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/setup.cfg +0 -0
  115. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_billing_api.py +0 -0
  116. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_chat_choice.py +0 -0
  117. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_chat_completion_request.py +0 -0
  118. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_chat_completion_response.py +0 -0
  119. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_chat_message.py +0 -0
  120. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_api.py +0 -0
  121. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_earnings.py +0 -0
  122. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_earnings_entry.py +0 -0
  123. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_machine.py +0 -0
  124. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_machine_delist_result.py +0 -0
  125. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_machine_registration.py +0 -0
  126. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_community_supplier.py +0 -0
  127. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_crypto_deposit_request.py +0 -0
  128. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_fine_tuning_job_request.py +0 -0
  129. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_fine_tuning_job_request_gpuai.py +0 -0
  130. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_fine_tuning_job_request_method.py +0 -0
  131. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_fine_tuning_job_request_method_lora.py +0 -0
  132. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_instance_request.py +0 -0
  133. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_instance_request_ports_inner.py +0 -0
  134. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_registry_credential_request.py +0 -0
  135. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_ssh_key_request.py +0 -0
  136. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_create_webhook_endpoint_request.py +0 -0
  137. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_crypto_deposit.py +0 -0
  138. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_environments.py +0 -0
  139. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_environments_api.py +0 -0
  140. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_file_object.py +0 -0
  141. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_api.py +0 -0
  142. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job.py +0 -0
  143. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job_error.py +0 -0
  144. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job_event.py +0 -0
  145. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job_event_list.py +0 -0
  146. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job_list.py +0 -0
  147. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_fine_tuning_job_method.py +0 -0
  148. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_framework_version.py +0 -0
  149. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_get_health200_response.py +0 -0
  150. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_gpu_type.py +0 -0
  151. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_gpu_type_page.py +0 -0
  152. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_gpu_types_api.py +0 -0
  153. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_images_generations_request.py +0 -0
  154. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_images_response.py +0 -0
  155. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_images_response_data_inner.py +0 -0
  156. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_images_response_usage.py +0 -0
  157. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_include_item.py +0 -0
  158. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_inference_api.py +0 -0
  159. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_instance.py +0 -0
  160. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_instance_connection.py +0 -0
  161. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_instance_page.py +0 -0
  162. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_instances_api.py +0 -0
  163. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_list_community_machines200_response.py +0 -0
  164. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_list_deposits200_response.py +0 -0
  165. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_list_registry_credentials200_response.py +0 -0
  166. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_meta_api.py +0 -0
  167. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_model.py +0 -0
  168. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_model_list.py +0 -0
  169. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_model_parameters_inner.py +0 -0
  170. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_model_pricing.py +0 -0
  171. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_open_ai_error_envelope.py +0 -0
  172. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_open_ai_error_envelope_error.py +0 -0
  173. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_operation.py +0 -0
  174. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_operation_error.py +0 -0
  175. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_operation_result.py +0 -0
  176. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_operations_api.py +0 -0
  177. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_pricing.py +0 -0
  178. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_pricing_api.py +0 -0
  179. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_pricing_page.py +0 -0
  180. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_problem.py +0 -0
  181. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_register_community_machine_request.py +0 -0
  182. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_registry_credential.py +0 -0
  183. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_registry_credentials_api.py +0 -0
  184. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_spending_limit.py +0 -0
  185. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_ssh_key.py +0 -0
  186. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_ssh_key_page.py +0 -0
  187. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_ssh_keys_api.py +0 -0
  188. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_stream_options.py +0 -0
  189. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_supplier_machine_view.py +0 -0
  190. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_template.py +0 -0
  191. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_template_env_inner.py +0 -0
  192. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_template_list.py +0 -0
  193. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_template_ports_inner.py +0 -0
  194. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_templates_api.py +0 -0
  195. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_update_community_machine_request.py +0 -0
  196. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_update_instance_request.py +0 -0
  197. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_update_spending_limit_request.py +0 -0
  198. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_usage.py +0 -0
  199. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_usage_api.py +0 -0
  200. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_usage_bucket.py +0 -0
  201. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_usage_page.py +0 -0
  202. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_video_create_request.py +0 -0
  203. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_video_job.py +0 -0
  204. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_video_list.py +0 -0
  205. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_vm_image.py +0 -0
  206. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_webhook_endpoint.py +0 -0
  207. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_webhook_endpoint_page.py +0 -0
  208. {gpuai_sdk-0.3.7 → gpuai_sdk-0.3.9}/test/test_webhooks_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpuai-sdk
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: GPU.ai Public Developer API
5
5
  Home-page:
6
6
  Author: GPU.ai Support
@@ -26,7 +26,7 @@ the dashboard. See https://gpu.ai/docs for details.
26
26
  This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
27
27
 
28
28
  - API version: 1.0.0
29
- - Package version: 0.3.7
29
+ - Package version: 0.3.9
30
30
  - Generator version: 7.24.0
31
31
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
32
32
 
@@ -136,6 +136,7 @@ Class | Method | HTTP request | Description
136
136
  *FineTuningApi* | [**get_fine_tuning_job**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#get_fine_tuning_job) | **GET** /fine_tuning/jobs/{id} | Retrieve a fine-tuning job (OpenAI-compatible)
137
137
  *FineTuningApi* | [**list_fine_tuning_job_events**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_job_events) | **GET** /fine_tuning/jobs/{id}/events | List fine-tuning job events (OpenAI-compatible)
138
138
  *FineTuningApi* | [**list_fine_tuning_jobs**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_jobs) | **GET** /fine_tuning/jobs | List fine-tuning jobs (OpenAI-compatible)
139
+ *FineTuningApi* | [**retrieve_file**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#retrieve_file) | **GET** /files/{id} | Retrieve a file (OpenAI-compatible)
139
140
  *GpuTypesApi* | [**list_gpu_types**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/GpuTypesApi.md#list_gpu_types) | **GET** /gpu-types | List available GPU types (no auth required)
140
141
  *InferenceApi* | [**cancel_video**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#cancel_video) | **POST** /videos/{id}/cancel | Cancel a video generation job
141
142
  *InferenceApi* | [**create_chat_completion**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#create_chat_completion) | **POST** /chat/completions | Create a chat completion (OpenAI-compatible)
@@ -6,7 +6,7 @@ the dashboard. See https://gpu.ai/docs for details.
6
6
  This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
7
7
 
8
8
  - API version: 1.0.0
9
- - Package version: 0.3.7
9
+ - Package version: 0.3.9
10
10
  - Generator version: 7.24.0
11
11
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
12
12
 
@@ -116,6 +116,7 @@ Class | Method | HTTP request | Description
116
116
  *FineTuningApi* | [**get_fine_tuning_job**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#get_fine_tuning_job) | **GET** /fine_tuning/jobs/{id} | Retrieve a fine-tuning job (OpenAI-compatible)
117
117
  *FineTuningApi* | [**list_fine_tuning_job_events**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_job_events) | **GET** /fine_tuning/jobs/{id}/events | List fine-tuning job events (OpenAI-compatible)
118
118
  *FineTuningApi* | [**list_fine_tuning_jobs**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_jobs) | **GET** /fine_tuning/jobs | List fine-tuning jobs (OpenAI-compatible)
119
+ *FineTuningApi* | [**retrieve_file**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#retrieve_file) | **GET** /files/{id} | Retrieve a file (OpenAI-compatible)
119
120
  *GpuTypesApi* | [**list_gpu_types**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/GpuTypesApi.md#list_gpu_types) | **GET** /gpu-types | List available GPU types (no auth required)
120
121
  *InferenceApi* | [**cancel_video**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#cancel_video) | **POST** /videos/{id}/cancel | Cancel a video generation job
121
122
  *InferenceApi* | [**create_chat_completion**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#create_chat_completion) | **POST** /chat/completions | Create a chat completion (OpenAI-compatible)
@@ -15,7 +15,7 @@
15
15
  """ # noqa: E501
16
16
 
17
17
 
18
- __version__ = "0.3.7"
18
+ __version__ = "0.3.9"
19
19
 
20
20
  # Define package exports
21
21
  __all__ = [
@@ -1767,3 +1767,279 @@ class FineTuningApi:
1767
1767
  )
1768
1768
 
1769
1769
 
1770
+
1771
+
1772
+ @validate_call
1773
+ def retrieve_file(
1774
+ self,
1775
+ id: Annotated[StrictStr, Field(description="The file id returned by the upload, e.g. `file-9f2c1a...`.")],
1776
+ _request_timeout: Union[
1777
+ None,
1778
+ Annotated[StrictFloat, Field(gt=0)],
1779
+ Tuple[
1780
+ Annotated[StrictFloat, Field(gt=0)],
1781
+ Annotated[StrictFloat, Field(gt=0)]
1782
+ ]
1783
+ ] = None,
1784
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1785
+ _content_type: Optional[StrictStr] = None,
1786
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1787
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1788
+ ) -> FileObject:
1789
+ """Retrieve a file (OpenAI-compatible)
1790
+
1791
+ Returns the metadata for one of your uploaded files. The lookup is scoped to the organization the API key belongs to: a file id that does not exist and one that belongs to another organization both return the same 404, so this route cannot be used to probe for other tenants' ids. Use it to check that a `training_file` is present and usable BEFORE creating a fine-tuning job — the create path performs the identical ownership check, so a file this route returns is a file that create will accept.
1792
+
1793
+ :param id: The file id returned by the upload, e.g. `file-9f2c1a...`. (required)
1794
+ :type id: str
1795
+ :param _request_timeout: timeout setting for this request. If one
1796
+ number provided, it will be total request
1797
+ timeout. It can also be a pair (tuple) of
1798
+ (connection, read) timeouts.
1799
+ :type _request_timeout: int, tuple(int, int), optional
1800
+ :param _request_auth: set to override the auth_settings for an a single
1801
+ request; this effectively ignores the
1802
+ authentication in the spec for a single request.
1803
+ :type _request_auth: dict, optional
1804
+ :param _content_type: force content-type for the request.
1805
+ :type _content_type: str, Optional
1806
+ :param _headers: set to override the headers for a single
1807
+ request; this effectively ignores the headers
1808
+ in the spec for a single request.
1809
+ :type _headers: dict, optional
1810
+ :param _host_index: set to override the host_index for a single
1811
+ request; this effectively ignores the host_index
1812
+ in the spec for a single request.
1813
+ :type _host_index: int, optional
1814
+ :return: Returns the result object.
1815
+ """ # noqa: E501
1816
+
1817
+ _param = self._retrieve_file_serialize(
1818
+ id=id,
1819
+ _request_auth=_request_auth,
1820
+ _content_type=_content_type,
1821
+ _headers=_headers,
1822
+ _host_index=_host_index
1823
+ )
1824
+
1825
+ _response_types_map: Dict[str, Optional[str]] = {
1826
+ '200': "FileObject",
1827
+ '401': "OpenAIErrorEnvelope",
1828
+ '403': "OpenAIErrorEnvelope",
1829
+ '404': "OpenAIErrorEnvelope",
1830
+ '429': "OpenAIErrorEnvelope",
1831
+ '500': "OpenAIErrorEnvelope",
1832
+ }
1833
+ response_data = self.api_client.call_api(
1834
+ *_param,
1835
+ _request_timeout=_request_timeout
1836
+ )
1837
+ response_data.read()
1838
+ return self.api_client.response_deserialize(
1839
+ response_data=response_data,
1840
+ response_types_map=_response_types_map,
1841
+ ).data
1842
+
1843
+
1844
+ @validate_call
1845
+ def retrieve_file_with_http_info(
1846
+ self,
1847
+ id: Annotated[StrictStr, Field(description="The file id returned by the upload, e.g. `file-9f2c1a...`.")],
1848
+ _request_timeout: Union[
1849
+ None,
1850
+ Annotated[StrictFloat, Field(gt=0)],
1851
+ Tuple[
1852
+ Annotated[StrictFloat, Field(gt=0)],
1853
+ Annotated[StrictFloat, Field(gt=0)]
1854
+ ]
1855
+ ] = None,
1856
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1857
+ _content_type: Optional[StrictStr] = None,
1858
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1859
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1860
+ ) -> ApiResponse[FileObject]:
1861
+ """Retrieve a file (OpenAI-compatible)
1862
+
1863
+ Returns the metadata for one of your uploaded files. The lookup is scoped to the organization the API key belongs to: a file id that does not exist and one that belongs to another organization both return the same 404, so this route cannot be used to probe for other tenants' ids. Use it to check that a `training_file` is present and usable BEFORE creating a fine-tuning job — the create path performs the identical ownership check, so a file this route returns is a file that create will accept.
1864
+
1865
+ :param id: The file id returned by the upload, e.g. `file-9f2c1a...`. (required)
1866
+ :type id: str
1867
+ :param _request_timeout: timeout setting for this request. If one
1868
+ number provided, it will be total request
1869
+ timeout. It can also be a pair (tuple) of
1870
+ (connection, read) timeouts.
1871
+ :type _request_timeout: int, tuple(int, int), optional
1872
+ :param _request_auth: set to override the auth_settings for an a single
1873
+ request; this effectively ignores the
1874
+ authentication in the spec for a single request.
1875
+ :type _request_auth: dict, optional
1876
+ :param _content_type: force content-type for the request.
1877
+ :type _content_type: str, Optional
1878
+ :param _headers: set to override the headers for a single
1879
+ request; this effectively ignores the headers
1880
+ in the spec for a single request.
1881
+ :type _headers: dict, optional
1882
+ :param _host_index: set to override the host_index for a single
1883
+ request; this effectively ignores the host_index
1884
+ in the spec for a single request.
1885
+ :type _host_index: int, optional
1886
+ :return: Returns the result object.
1887
+ """ # noqa: E501
1888
+
1889
+ _param = self._retrieve_file_serialize(
1890
+ id=id,
1891
+ _request_auth=_request_auth,
1892
+ _content_type=_content_type,
1893
+ _headers=_headers,
1894
+ _host_index=_host_index
1895
+ )
1896
+
1897
+ _response_types_map: Dict[str, Optional[str]] = {
1898
+ '200': "FileObject",
1899
+ '401': "OpenAIErrorEnvelope",
1900
+ '403': "OpenAIErrorEnvelope",
1901
+ '404': "OpenAIErrorEnvelope",
1902
+ '429': "OpenAIErrorEnvelope",
1903
+ '500': "OpenAIErrorEnvelope",
1904
+ }
1905
+ response_data = self.api_client.call_api(
1906
+ *_param,
1907
+ _request_timeout=_request_timeout
1908
+ )
1909
+ response_data.read()
1910
+ return self.api_client.response_deserialize(
1911
+ response_data=response_data,
1912
+ response_types_map=_response_types_map,
1913
+ )
1914
+
1915
+
1916
+ @validate_call
1917
+ def retrieve_file_without_preload_content(
1918
+ self,
1919
+ id: Annotated[StrictStr, Field(description="The file id returned by the upload, e.g. `file-9f2c1a...`.")],
1920
+ _request_timeout: Union[
1921
+ None,
1922
+ Annotated[StrictFloat, Field(gt=0)],
1923
+ Tuple[
1924
+ Annotated[StrictFloat, Field(gt=0)],
1925
+ Annotated[StrictFloat, Field(gt=0)]
1926
+ ]
1927
+ ] = None,
1928
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1929
+ _content_type: Optional[StrictStr] = None,
1930
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1931
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1932
+ ) -> RESTResponseType:
1933
+ """Retrieve a file (OpenAI-compatible)
1934
+
1935
+ Returns the metadata for one of your uploaded files. The lookup is scoped to the organization the API key belongs to: a file id that does not exist and one that belongs to another organization both return the same 404, so this route cannot be used to probe for other tenants' ids. Use it to check that a `training_file` is present and usable BEFORE creating a fine-tuning job — the create path performs the identical ownership check, so a file this route returns is a file that create will accept.
1936
+
1937
+ :param id: The file id returned by the upload, e.g. `file-9f2c1a...`. (required)
1938
+ :type id: str
1939
+ :param _request_timeout: timeout setting for this request. If one
1940
+ number provided, it will be total request
1941
+ timeout. It can also be a pair (tuple) of
1942
+ (connection, read) timeouts.
1943
+ :type _request_timeout: int, tuple(int, int), optional
1944
+ :param _request_auth: set to override the auth_settings for an a single
1945
+ request; this effectively ignores the
1946
+ authentication in the spec for a single request.
1947
+ :type _request_auth: dict, optional
1948
+ :param _content_type: force content-type for the request.
1949
+ :type _content_type: str, Optional
1950
+ :param _headers: set to override the headers for a single
1951
+ request; this effectively ignores the headers
1952
+ in the spec for a single request.
1953
+ :type _headers: dict, optional
1954
+ :param _host_index: set to override the host_index for a single
1955
+ request; this effectively ignores the host_index
1956
+ in the spec for a single request.
1957
+ :type _host_index: int, optional
1958
+ :return: Returns the result object.
1959
+ """ # noqa: E501
1960
+
1961
+ _param = self._retrieve_file_serialize(
1962
+ id=id,
1963
+ _request_auth=_request_auth,
1964
+ _content_type=_content_type,
1965
+ _headers=_headers,
1966
+ _host_index=_host_index
1967
+ )
1968
+
1969
+ _response_types_map: Dict[str, Optional[str]] = {
1970
+ '200': "FileObject",
1971
+ '401': "OpenAIErrorEnvelope",
1972
+ '403': "OpenAIErrorEnvelope",
1973
+ '404': "OpenAIErrorEnvelope",
1974
+ '429': "OpenAIErrorEnvelope",
1975
+ '500': "OpenAIErrorEnvelope",
1976
+ }
1977
+ response_data = self.api_client.call_api(
1978
+ *_param,
1979
+ _request_timeout=_request_timeout
1980
+ )
1981
+ return response_data.response
1982
+
1983
+
1984
+ def _retrieve_file_serialize(
1985
+ self,
1986
+ id,
1987
+ _request_auth,
1988
+ _content_type,
1989
+ _headers,
1990
+ _host_index,
1991
+ ) -> RequestSerialized:
1992
+
1993
+ _host = None
1994
+
1995
+ _collection_formats: Dict[str, str] = {
1996
+ }
1997
+
1998
+ _path_params: Dict[str, str] = {}
1999
+ _query_params: List[Tuple[str, str]] = []
2000
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2001
+ _form_params: List[Tuple[str, str]] = []
2002
+ _files: Dict[
2003
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2004
+ ] = {}
2005
+ _body_params: Optional[bytes] = None
2006
+
2007
+ # process the path parameters
2008
+ if id is not None:
2009
+ _path_params['id'] = id
2010
+ # process the query parameters
2011
+ # process the header parameters
2012
+ # process the form parameters
2013
+ # process the body parameter
2014
+
2015
+
2016
+ # set the HTTP header `Accept`
2017
+ if 'Accept' not in _header_params:
2018
+ _header_params['Accept'] = self.api_client.select_header_accept(
2019
+ [
2020
+ 'application/json'
2021
+ ]
2022
+ )
2023
+
2024
+
2025
+ # authentication setting
2026
+ _auth_settings: List[str] = [
2027
+ 'bearerAuth'
2028
+ ]
2029
+
2030
+ return self.api_client.param_serialize(
2031
+ method='GET',
2032
+ resource_path='/files/{id}',
2033
+ path_params=_path_params,
2034
+ query_params=_query_params,
2035
+ header_params=_header_params,
2036
+ body=_body_params,
2037
+ post_params=_form_params,
2038
+ files=_files,
2039
+ auth_settings=_auth_settings,
2040
+ collection_formats=_collection_formats,
2041
+ _host=_host,
2042
+ _request_auth=_request_auth
2043
+ )
2044
+
2045
+
@@ -92,7 +92,7 @@ class ApiClient:
92
92
  self.default_headers[header_name] = header_value
93
93
  self.cookie = cookie
94
94
  # Set default User-Agent.
95
- self.user_agent = 'OpenAPI-Generator/0.3.7/python'
95
+ self.user_agent = 'OpenAPI-Generator/0.3.9/python'
96
96
  self.client_side_validation = configuration.client_side_validation
97
97
 
98
98
  def __enter__(self):
@@ -552,7 +552,7 @@ class Configuration:
552
552
  "OS: {env}\n"\
553
553
  "Python Version: {pyversion}\n"\
554
554
  "Version of the API: 1.0.0\n"\
555
- "SDK Package Version: 0.3.7".\
555
+ "SDK Package Version: 0.3.9".\
556
556
  format(env=sys.platform, pyversion=sys.version)
557
557
 
558
558
  def get_host_settings(self) -> List[HostSetting]:
@@ -42,13 +42,14 @@ class CreateInstanceRequest(BaseModel):
42
42
  environment: Optional[StrictStr] = Field(default=None, description="Launch environment. Omit for the provider default (the GPU.ai Certified Image where supported). Accepted values: `certified` (the GPU.ai Certified base image), `certified:<framework>` (a framework layer — see GET /v1/environments for the roster, e.g. `certified:pytorch`), `certified:<framework>@<version>` (a specific framework version, e.g. `certified:pytorch@2.13`), `raw_vm` (root VM, provider default OS), `raw_vm:<os>` (root VM with a chosen OS, e.g. `raw_vm:ubuntu-24.04`), or `provider_template` (the provider's own image). A well-formed value the placed machine can't serve returns 422 `environment_unavailable`.", json_schema_extra={"examples": ["certified:pytorch@2.13"]})
43
43
  offering_id: Optional[StrictStr] = Field(default=None, description="Pin the launch to one exact offering (from GET /v1/pricing) so the engine never substitutes a pricier one. If that offering is gone, the launch fails explicitly rather than silently placing elsewhere.")
44
44
  disk_gb: Optional[Annotated[int, Field(strict=True, ge=10)]] = Field(default=None, description="Requested instance filesystem size in GB. Omit for the platform default (100 GB), which never narrows placement. Setting it is a hard requirement: placement narrows to capacity that can honor it (see `disk_configurable` on GET /v1/pricing), and a request no offering of the gpu_type can honor returns 422 `disk_unavailable` rather than launching with a different size. When the launch also pins an exact `offering_id`, a disk_gb larger than that offering's displayed `storage_gb` returns 422 `disk_exceeds_offering` rather than launching with a clamped filesystem. Disk beyond the included allowance (100 GB) is billed at the offering's `disk_price_per_gb_hour` (GET /v1/pricing), folded into the instance's single hourly rate. Bounds: at least 10, at most the platform ceiling (currently 1000) — outside them returns 422 `validation_failed`.", json_schema_extra={"examples": [200]})
45
+ auto_terminate_hours: Optional[Annotated[int, Field(le=720, strict=True, ge=1)]] = Field(default=None, description="Terminate this instance automatically after this many hours of runtime. Omit for no limit (the default). The countdown starts when the instance reaches `running`, not when you call this — provisioning is neither billed nor counted against the limit — and the resolved deadline is returned as `auto_terminate_at` on every read. Enforcement is server-side and survives your process: this is the safety net for an unattended run whose client dies without cleaning up. When it fires the instance is terminated exactly as a DELETE would terminate it (billing stops, the `instance.terminated` webhook fires) and `status_reason` records that the limit was reached. Bounds: at least 1, at most 720 (30 days) — outside them returns 422 `validation_failed`. An explicit `0` is rejected rather than read as \"no limit\"; omit the field for that.", json_schema_extra={"examples": [8]})
45
46
  env: Optional[Dict[str, StrictStr]] = Field(default=None, description="Environment variables. With `template_id`: per-deploy overrides — only keys the template marks user_overridable are accepted (others 422), and secret values are redacted from operation metadata. With `image`: plain container env vars — keys must be POSIX names and the platform's reserved namespace (`PUBLIC_KEY`, `GPUAI_*`) is refused (422).")
46
47
  image: Optional[StrictStr] = Field(default=None, description="Launch from your own container image, e.g. `pytorch/pytorch:2.4.1-cuda12.4-cudnn9-devel` or `ghcr.io/acme/trainer:v1`. The image must be publicly pullable (private registries are not yet supported) and provide linux/amd64 — both are verified synchronously before anything is provisioned: an unknown image returns 422 `image_unavailable` and a registry outage 502 `registry_unreachable`, with no operation created and nothing billed. The launch is pinned to the exact manifest digest verified, so a tag re-push cannot change what boots. After SSH/tunnel setup the image's own ENTRYPOINT/CMD is started (its output is in /var/log/gpuai-entrypoint.log on the instance); an image with neither is a plain SSH environment. Placement prefers container-native capacity (the image runs natively; SSH lands inside it) and falls back to VM capacity (the image runs as a container beside the host's SSH — inspect with `docker logs gpuai-workload`); private images stay container-native. A gpu_type with no capable capacity returns 422 `image_unavailable`. Mutually exclusive with `template_id` and `environment` (422). A malformed reference (bad charset, localhost/private-IP registry) returns 400. On-demand only for now: `tier: spot` with `image` is refused (422 `validation_failed`) because a preemption re-route cannot yet carry a custom image.", json_schema_extra={"examples": ["ghcr.io/acme/trainer:v1"]})
47
48
  registry_credential_id: Optional[StrictStr] = Field(default=None, description="Stored registry-credential id (POST /v1/registry-credentials) for pulling a PRIVATE `image`. The credential's registry must match the image's registry (422 otherwise); wrong logins fail the pre-flight with 422 `image_unavailable` before anything is provisioned. Requires `image`.")
48
49
  entrypoint: Optional[List[StrictStr]] = Field(default=None, description="Override the image's ENTRYPOINT (docker semantics — also drops the image CMD unless `cmd` is given). Omit to use the image's own. At most 32 arguments / 4KB. Requires `image`.")
49
50
  cmd: Optional[List[StrictStr]] = Field(default=None, description="Override the image's CMD. Omit to use the image's own (or none, when `entrypoint` is overridden). Requires `image`.")
50
51
  ports: Optional[List[CreateInstanceRequestPortsInner]] = Field(default=None, description="Container ports to expose on a custom-image launch (at most 10; port 22 is reserved). At most one entry may be `primary` — it must be http and is served at the instance's app URL (`https://<id>.apps.gpu.ai`) behind the per-instance basic-auth login. Requires `image`.")
51
- __properties: ClassVar[List[str]] = ["gpu_type", "gpu_count", "region", "tier", "ssh_key_ids", "name", "max_price_per_hour", "viewed_price_per_hour", "template_id", "environment", "offering_id", "disk_gb", "env", "image", "registry_credential_id", "entrypoint", "cmd", "ports"]
52
+ __properties: ClassVar[List[str]] = ["gpu_type", "gpu_count", "region", "tier", "ssh_key_ids", "name", "max_price_per_hour", "viewed_price_per_hour", "template_id", "environment", "offering_id", "disk_gb", "auto_terminate_hours", "env", "image", "registry_credential_id", "entrypoint", "cmd", "ports"]
52
53
 
53
54
  @field_validator('tier')
54
55
  def tier_validate_enum(cls, value):
@@ -127,6 +128,7 @@ class CreateInstanceRequest(BaseModel):
127
128
  "environment": obj.get("environment"),
128
129
  "offering_id": obj.get("offering_id"),
129
130
  "disk_gb": obj.get("disk_gb"),
131
+ "auto_terminate_hours": obj.get("auto_terminate_hours"),
130
132
  "env": obj.get("env"),
131
133
  "image": obj.get("image"),
132
134
  "registry_credential_id": obj.get("registry_credential_id"),
@@ -42,13 +42,15 @@ class Instance(BaseModel):
42
42
  connection: Optional[InstanceConnection] = None
43
43
  disk_gb: Optional[StrictInt] = Field(default=None, description="Instance filesystem size in GB that the platform configured for this launch. Present only where the placed capacity honors a configured disk size; absent means the machine's disk is provider-determined (its own flavor volume).")
44
44
  image: Optional[StrictStr] = Field(default=None, description="The customer-supplied container image this instance was launched from, digest-pinned at verification time (e.g. `ghcr.io/acme/trainer:v1@sha256:…`). Present only on custom-image launches; template and certified launches never expose their images here.")
45
- status_reason: Optional[StrictStr] = Field(default=None, description="Why the instance is in the error state, e.g. \"provisioning stalled: the instance started but never became reachable\". Present only on errored instances.")
45
+ auto_terminate_hours: Optional[StrictInt] = Field(default=None, description="The runtime limit this instance was launched with, in hours (the `auto_terminate_hours` you sent). Absent means the instance runs until something stops it. It stays present after the limit has fired, so a terminated instance still explains itself.", json_schema_extra={"examples": [8]})
46
+ auto_terminate_at: Optional[datetime] = Field(default=None, description="When the runtime limit expires and the platform terminates this instance. Computed when the instance became running (ready_at + auto_terminate_hours), so the countdown covers usable runtime, not the time spent provisioning. Absent when no limit was set, when the instance is not running yet, or once the platform has begun acting on an elapsed limit.")
47
+ status_reason: Optional[StrictStr] = Field(default=None, description="Why the instance stopped or failed, e.g. \"provisioning stalled: the instance started but never became reachable\", or — when a runtime limit fired — \"Terminated: this instance reached the 8-hour runtime limit set at launch\". Present only when the platform has something to explain.")
46
48
  created_at: datetime
47
49
  ready_at: Optional[datetime] = None
48
50
  terminated_at: Optional[datetime] = None
49
51
  last_reachable_at: Optional[datetime] = Field(default=None, description="Last time the platform verified the SSH path to this instance end-to-end through the tunnel. Absent means the instance has not been probed yet (freshly launched, or no tunnel) — it does NOT mean unreachable. An instance whose status is still \"running\" while this timestamp stops advancing is one whose SSH has died even though the machine is up.")
50
52
  unreachable_since: Optional[datetime] = Field(default=None, description="Start of the confirmed tunnel outage the instance is currently in. Present exactly when status is \"unreachable\", absent otherwise. It is the timestamp the auto-credit for the dead window is computed from, so a ledger credit can be reconciled against it.")
51
- __properties: ClassVar[List[str]] = ["id", "name", "status", "gpu_type", "gpu_count", "region", "tier", "price_per_hour", "connection", "disk_gb", "image", "status_reason", "created_at", "ready_at", "terminated_at", "last_reachable_at", "unreachable_since"]
53
+ __properties: ClassVar[List[str]] = ["id", "name", "status", "gpu_type", "gpu_count", "region", "tier", "price_per_hour", "connection", "disk_gb", "image", "auto_terminate_hours", "auto_terminate_at", "status_reason", "created_at", "ready_at", "terminated_at", "last_reachable_at", "unreachable_since"]
52
54
 
53
55
  @field_validator('status')
54
56
  def status_validate_enum(cls, value):
@@ -129,6 +131,8 @@ class Instance(BaseModel):
129
131
  "connection": InstanceConnection.from_dict(obj["connection"]) if obj.get("connection") is not None else None,
130
132
  "disk_gb": obj.get("disk_gb"),
131
133
  "image": obj.get("image"),
134
+ "auto_terminate_hours": obj.get("auto_terminate_hours"),
135
+ "auto_terminate_at": obj.get("auto_terminate_at"),
132
136
  "status_reason": obj.get("status_reason"),
133
137
  "created_at": obj.get("created_at"),
134
138
  "ready_at": obj.get("ready_at"),
@@ -18,7 +18,7 @@ import pprint
18
18
  import re # noqa: F401
19
19
  import json
20
20
 
21
- from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator
22
22
  from typing import Any, ClassVar, Dict, List, Optional
23
23
  from gpuai_sdk.models.model_parameters_inner import ModelParametersInner
24
24
  from gpuai_sdk.models.model_pricing import ModelPricing
@@ -42,8 +42,10 @@ class Model(BaseModel):
42
42
  parameters: Optional[List[ModelParametersInner]] = Field(default=None, description="Typed parameter descriptors for media (image/video) models — name, type, enum/bounds/default. Playgrounds render input forms from these.")
43
43
  pricing: ModelPricing
44
44
  aliases: Optional[List[StrictStr]] = None
45
+ fine_tunable: Optional[StrictBool] = Field(default=None, description="Whether this model can be used as the base of a managed fine-tuning job. The tunable allowlist is operator-curated and much narrower than the serving catalog, so this is false for almost every model. Absent means false.")
46
+ fine_tune_base_model: Optional[StrictStr] = Field(default=None, description="The exact id to send as `model` when creating a fine-tuning job for this entry. Present only when `fine_tunable` is true, and deliberately distinct from `id`: the allowlist matches the customer-facing base id (e.g. `qwen2.5-7b-instruct`), which a served model normally carries as an alias rather than as its namespaced catalog id.")
45
47
  status: StrictStr
46
- __properties: ClassVar[List[str]] = ["id", "object", "created", "owned_by", "author", "modality", "category", "context_length", "supported_parameters", "parameters", "pricing", "aliases", "status"]
48
+ __properties: ClassVar[List[str]] = ["id", "object", "created", "owned_by", "author", "modality", "category", "context_length", "supported_parameters", "parameters", "pricing", "aliases", "fine_tunable", "fine_tune_base_model", "status"]
47
49
 
48
50
  @field_validator('object')
49
51
  def object_validate_enum(cls, value):
@@ -139,6 +141,8 @@ class Model(BaseModel):
139
141
  "parameters": [ModelParametersInner.from_dict(_item) for _item in obj["parameters"]] if obj.get("parameters") is not None else None,
140
142
  "pricing": ModelPricing.from_dict(obj["pricing"]) if obj.get("pricing") is not None else None,
141
143
  "aliases": obj.get("aliases"),
144
+ "fine_tunable": obj.get("fine_tunable"),
145
+ "fine_tune_base_model": obj.get("fine_tune_base_model"),
142
146
  "status": obj.get("status")
143
147
  })
144
148
  return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpuai-sdk
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: GPU.ai Public Developer API
5
5
  Home-page:
6
6
  Author: GPU.ai Support
@@ -26,7 +26,7 @@ the dashboard. See https://gpu.ai/docs for details.
26
26
  This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
27
27
 
28
28
  - API version: 1.0.0
29
- - Package version: 0.3.7
29
+ - Package version: 0.3.9
30
30
  - Generator version: 7.24.0
31
31
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
32
32
 
@@ -136,6 +136,7 @@ Class | Method | HTTP request | Description
136
136
  *FineTuningApi* | [**get_fine_tuning_job**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#get_fine_tuning_job) | **GET** /fine_tuning/jobs/{id} | Retrieve a fine-tuning job (OpenAI-compatible)
137
137
  *FineTuningApi* | [**list_fine_tuning_job_events**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_job_events) | **GET** /fine_tuning/jobs/{id}/events | List fine-tuning job events (OpenAI-compatible)
138
138
  *FineTuningApi* | [**list_fine_tuning_jobs**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#list_fine_tuning_jobs) | **GET** /fine_tuning/jobs | List fine-tuning jobs (OpenAI-compatible)
139
+ *FineTuningApi* | [**retrieve_file**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/FineTuningApi.md#retrieve_file) | **GET** /files/{id} | Retrieve a file (OpenAI-compatible)
139
140
  *GpuTypesApi* | [**list_gpu_types**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/GpuTypesApi.md#list_gpu_types) | **GET** /gpu-types | List available GPU types (no auth required)
140
141
  *InferenceApi* | [**cancel_video**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#cancel_video) | **POST** /videos/{id}/cancel | Cancel a video generation job
141
142
  *InferenceApi* | [**create_chat_completion**](https://github.com/gpuai-dev/gpuai-python-sdk/blob/main/docs/InferenceApi.md#create_chat_completion) | **POST** /chat/completions | Create a chat completion (OpenAI-compatible)
@@ -6,7 +6,7 @@ name = "gpuai-sdk"
6
6
  # injected tree. This file is ignore-protected (see .openapi-generator-ignore)
7
7
  # so the placeholder survives regeneration; sdk/release/assert-placeholder.sh
8
8
  # fails CI if a real version ever lands here.
9
- version = "0.3.7"
9
+ version = "0.3.9"
10
10
  description = "GPU.ai Public Developer API"
11
11
  authors = [
12
12
  {name = "GPU.ai Support",email = "support@gpu.ai"},
@@ -20,7 +20,7 @@ from setuptools import setup, find_packages # noqa: H301
20
20
  # prerequisite: setuptools
21
21
  # http://pypi.python.org/pypi/setuptools
22
22
  NAME = "gpuai-sdk"
23
- VERSION = "0.3.7"
23
+ VERSION = "0.3.9"
24
24
  PYTHON_REQUIRES = ">= 3.10"
25
25
  REQUIRES = [
26
26
  "urllib3 >= 2.6.3, < 3.0.0",
File without changes