From 1d385c2e41de238804b73512314ad214aea7db68 Mon Sep 17 00:00:00 2001 From: kunwar-vp <213688385+kunwar-vp@users.noreply.github.com> Date: Fri, 23 Oct 2026 09:03:11 +0000 Subject: [PATCH] chore(spec): regenerate _generated/ from upstream openapi.yaml --- .../admin_create_billing_invoice.py | 195 ++++++++++ .../admin_discount_billing_invoice.py | 209 +++++++++++ .../admin_get_billing_invoice.py | 184 ++++++++++ .../admin_list_billing_invoice_revisions.py | 213 +++++++++++ .../admin_list_billing_invoices.py | 191 ++++++++++ .../admin_list_billing_statements.py | 193 ++++++++++ .../admin_preview_billing_invoice.py | 195 ++++++++++ .../admin_preview_invoice_payment.py | 195 ++++++++++ .../admin_record_invoice_payment.py | 218 ++++++++++++ .../admin_void_billing_invoice.py | 209 +++++++++++ .../api/billing/get_billing_invoice.py | 38 +- .../api/billing/get_billing_statement.py | 169 +++++++++ .../api/billing/list_billing_invoices.py | 8 +- .../api/billing/list_billing_statements.py | 178 ++++++++++ .../_generated/api/connections/__init__.py | 1 + .../api/connections/authorize_connection.py | 218 ++++++++++++ .../call_managed_connection_tool.py | 238 +++++++++++++ .../complete_connection_authorization.py | 237 +++++++++++++ .../api/connections/create_connection.py | 197 +++++++++++ .../api/connections/disconnect_connection.py | 195 ++++++++++ .../api/connections/get_connection.py | 185 ++++++++++ .../api/connections/list_connections.py | 202 +++++++++++ .../api/connections/list_integrations.py | 134 +++++++ .../receive_gmail_pub_sub_event.py | 191 ++++++++++ .../attach_custom_model_adapter.py | 333 ++++++++++++++++++ .../api/custom_models/create_custom_model.py | 16 +- .../api/custom_models/delete_custom_model.py | 33 ++ .../api/custom_models/get_custom_model.py | 12 +- .../list_custom_model_adapters.py | 206 +++++++++++ .../api/custom_models/list_custom_models.py | 25 ++ .../api/custom_models/refresh_custom_model.py | 17 + .../api/custom_models/update_custom_model.py | 17 + .../api/custom_models/wake_custom_model.py | 45 ++- .../api/inference_routers/__init__.py | 1 + .../create_inference_router.py | 197 +++++++++++ .../create_inference_router_lane.py | 203 +++++++++++ .../delete_inference_router.py | 173 +++++++++ .../delete_inference_router_lane.py | 190 ++++++++++ .../inference_routers/get_inference_router.py | 175 +++++++++ .../get_inference_router_analytics.py | 258 ++++++++++++++ .../get_inference_router_lane.py | 175 +++++++++ .../list_inference_router_lanes.py | 161 +++++++++ .../list_inference_routers.py | 202 +++++++++++ .../publish_inference_router.py | 214 +++++++++++ .../update_inference_router.py | 206 +++++++++++ .../update_inference_router_lane.py | 218 ++++++++++++ .../validate_inference_router.py | 180 ++++++++++ .../api/invitations/accept_invitation.py | 16 + .../api/invitations/list_my_invitations.py | 12 + .../get_knowledgebase_document_media.py | 225 ++++++++++++ .../api/knowledgebases/list_knowledgebases.py | 142 ++++++-- .../_generated/api/objects/post_object.py | 16 +- src/graphn/_generated/client.py | 20 +- src/graphn/_generated/models/__init__.py | 232 +++++++++++- .../models/admin_billing_grant_request.py | 3 +- .../models/admin_billing_overrides.py | 23 +- .../_generated/models/admin_billing_state.py | 32 +- .../models/admin_invoice_create_request.py | 97 +++++ .../models/admin_invoice_create_response.py | 136 +++++++ .../models/admin_invoice_discount.py | 162 +++++++++ .../models/admin_invoice_discount_request.py | 104 ++++++ .../admin_invoice_discount_request_type.py | 9 + .../models/admin_invoice_discount_response.py | 160 +++++++++ .../admin_invoice_payment_preview_response.py | 160 +++++++++ .../models/admin_invoice_preview_request.py | 82 +++++ .../models/admin_invoice_preview_response.py | 103 ++++++ .../_generated/models/admin_invoice_quote.py | 107 ++++++ .../models/admin_invoice_quote_line_item.py | 69 ++++ .../admin_invoice_record_payment_request.py | 69 ++++ .../admin_invoice_record_payment_response.py | 109 ++++++ .../models/admin_invoice_response.py | 67 ++++ .../models/admin_invoice_revision.py | 159 +++++++++ .../admin_invoice_revisions_response.py | 100 ++++++ .../models/admin_invoice_void_request.py | 78 ++++ .../models/admin_invoice_void_response.py | 113 ++++++ .../models/admin_invoices_response.py | 96 +++++ ...> admin_invoices_response_empty_reason.py} | 4 +- ...in_list_billing_statements_response_200.py | 98 ++++++ ...ng_statements_response_200_empty_reason.py | 9 + src/graphn/_generated/models/agent.py | 3 +- src/graphn/_generated/models/agent_create.py | 3 +- src/graphn/_generated/models/agent_list.py | 3 +- .../_generated/models/agent_run_request.py | 3 +- src/graphn/_generated/models/agent_spec.py | 3 +- .../models/agent_spec_output_schema.py | 5 +- src/graphn/_generated/models/agent_update.py | 3 +- src/graphn/_generated/models/api_key.py | 3 +- .../_generated/models/api_key_create.py | 3 +- .../_generated/models/api_key_created.py | 3 +- src/graphn/_generated/models/api_key_list.py | 3 +- .../_generated/models/architecture_info.py | 3 +- src/graphn/_generated/models/async_run.py | 3 +- .../_generated/models/async_run_error.py | 5 +- .../_generated/models/async_run_list.py | 3 +- .../_generated/models/async_run_metadata.py | 5 +- .../_generated/models/async_run_output.py | 5 +- .../models/async_run_result_error.py | 5 +- .../_generated/models/async_run_usage.py | 5 +- .../_generated/models/async_submit_request.py | 3 +- .../models/async_submit_request_input.py | 5 +- .../models/async_submit_request_metadata.py | 5 +- .../models/async_submit_request_parameters.py | 5 +- .../models/async_submit_response.py | 3 +- src/graphn/_generated/models/batch.py | 3 +- .../models/batch_document_result.py | 3 +- .../models/batch_documents_response.py | 3 +- .../_generated/models/batch_file_ref.py | 3 +- .../_generated/models/batch_input_item.py | 3 +- .../models/batch_input_item_input.py | 5 +- src/graphn/_generated/models/batch_item.py | 3 +- .../_generated/models/batch_item_error.py | 5 +- .../_generated/models/batch_item_list.py | 3 +- .../_generated/models/batch_item_output.py | 5 +- .../models/batch_knowledgebase_result.py | 3 +- .../models/batch_knowledgebases_response.py | 3 +- src/graphn/_generated/models/batch_list.py | 3 +- .../_generated/models/batch_request_counts.py | 3 +- .../_generated/models/batch_submit_request.py | 3 +- .../models/batch_submit_request_metadata.py | 5 +- .../models/batch_submit_request_parameters.py | 5 +- .../models/batch_submit_response.py | 3 +- .../_generated/models/batch_update_item.py | 3 +- .../batch_update_knowledgebases_request.py | 3 +- .../_generated/models/billing_account.py | 3 +- .../_generated/models/billing_entitlements.py | 3 +- .../_generated/models/billing_grant_result.py | 3 +- .../models/billing_grant_result_new_status.py | 4 +- .../models/billing_settings_update.py | 3 +- .../models/billing_statement_detail.py | 214 +++++++++++ .../models/billing_statement_summary.py | 152 ++++++++ .../models/billing_top_up_request.py | 3 +- src/graphn/_generated/models/billing_usage.py | 3 +- .../models/billing_usage_time_series_item.py | 3 +- src/graphn/_generated/models/blueprint.py | 3 +- .../models/blueprint_agents_item.py | 5 +- .../models/blueprint_deploy_request.py | 3 +- .../models/blueprint_deploy_resource_i_ds.py | 58 +++ .../models/blueprint_deploy_response.py | 17 +- .../models/blueprint_functions_item.py | 5 +- .../_generated/models/blueprint_list.py | 3 +- .../models/blueprint_mcp_servers_item.py | 5 +- .../_generated/models/blueprint_summary.py | 3 +- .../models/builtin_function_info.py | 3 +- ...builtin_function_info_parameters_schema.py | 5 +- .../models/builtin_function_list.py | 3 +- .../models/builtin_function_list_functions.py | 5 +- .../_generated/models/bundle_resource_item.py | 3 +- .../models/bundle_resource_item_spec.py | 5 +- src/graphn/_generated/models/capability.py | 4 +- .../models/chat_completion_request.py | 3 +- ...chat_completion_request_response_format.py | 5 +- ...t_completion_request_tool_choice_type_1.py | 5 +- .../chat_completion_request_tools_item.py | 5 +- .../models/chat_completion_response.py | 3 +- .../chat_completion_response_choices_item.py | 3 +- .../models/chat_completion_response_object.py | 4 +- .../models/chat_completion_response_usage.py | 3 +- src/graphn/_generated/models/chat_message.py | 3 +- .../_generated/models/chat_message_role.py | 4 +- .../models/chat_message_tool_calls_item.py | 5 +- src/graphn/_generated/models/connection.py | 254 +++++++++++++ .../models/connection_account_metadata.py | 45 +++ .../connection_authorization_challenge.py | 51 +++ .../models/connection_authorization_start.py | 53 +++ .../_generated/models/connection_create.py | 70 ++++ .../models/connection_create_kind.py | 9 + .../_generated/models/connection_kind.py | 9 + .../_generated/models/connection_list.py | 75 ++++ .../_generated/models/connection_status.py | 12 + .../models/connection_watch_status.py | 11 + ...reate_billing_setup_intent_response_200.py | 3 +- src/graphn/_generated/models/custom_model.py | 55 ++- .../_generated/models/custom_model_access.py | 3 +- .../models/custom_model_adapter_attach.py | 139 ++++++++ .../models/custom_model_artifact_type.py | 4 +- .../_generated/models/custom_model_create.py | 40 ++- .../custom_model_create_max_lora_rank.py | 9 + .../custom_model_create_quantization.py | 4 +- .../_generated/models/custom_model_list.py | 3 +- .../models/custom_model_quantization.py | 4 +- .../_generated/models/custom_model_status.py | 4 +- .../_generated/models/custom_model_update.py | 3 +- .../discover_imported_models_request.py | 3 +- .../discover_imported_models_response.py | 3 +- .../models/discovered_imported_model.py | 3 +- .../_generated/models/document_media.py | 70 ++++ src/graphn/_generated/models/embed_request.py | 3 +- .../_generated/models/embed_response.py | 3 +- .../_generated/models/embedding_model.py | 3 +- .../_generated/models/embedding_model_list.py | 3 +- src/graphn/_generated/models/error.py | 3 +- src/graphn/_generated/models/execution.py | 3 +- .../_generated/models/free_grant_result.py | 3 +- src/graphn/_generated/models/function.py | 3 +- .../_generated/models/function_create.py | 19 +- .../models/function_create_files.py | 5 +- .../function_create_parameters_schema.py | 5 +- .../_generated/models/function_create_type.py | 9 + .../models/function_dry_run_request.py | 3 +- .../models/function_dry_run_request_files.py | 5 +- .../models/function_dry_run_request_input.py | 5 +- src/graphn/_generated/models/function_list.py | 3 +- src/graphn/_generated/models/function_spec.py | 19 +- .../_generated/models/function_spec_files.py | 5 +- .../models/function_spec_parameters_schema.py | 5 +- .../_generated/models/function_spec_type.py | 9 + .../models/function_test_request.py | 3 +- .../models/function_test_request_input.py | 5 +- .../models/function_test_response.py | 3 +- .../_generated/models/function_update.py | 3 +- .../models/function_update_files.py | 5 +- .../function_update_parameters_schema.py | 5 +- .../get_billing_invoice_response_200.py | 17 +- ...et_billing_invoice_response_200_invoice.py | 175 +++++++++ .../get_billing_statement_response_200.py | 67 ++++ .../models/get_billing_usage_filter.py | 4 +- ...get_inference_router_analytics_interval.py | 9 + .../models/google_pub_sub_envelope.py | 75 ++++ .../models/google_pub_sub_envelope_message.py | 69 ++++ .../_generated/models/gpu_hours_response.py | 26 +- .../_generated/models/id_list_request.py | 3 +- .../_generated/models/imported_model.py | 3 +- .../models/imported_model_create.py | 3 +- .../_generated/models/imported_model_list.py | 3 +- .../models/imported_model_update.py | 3 +- .../_generated/models/inference_error.py | 3 +- .../models/inference_error_error.py | 3 +- .../_generated/models/inference_router.py | 236 +++++++++++++ .../models/inference_router_analytics.py | 291 +++++++++++++++ .../inference_router_analytics_breakdown.py | 99 ++++++ .../inference_router_analytics_interval.py | 9 + .../inference_router_analytics_metrics.py | 194 ++++++++++ .../inference_router_analytics_point.py | 80 +++++ ...alytics_shared_candidate_runtime_status.py | 10 + .../models/inference_router_candidate.py | 66 ++++ .../models/inference_router_config.py | 90 +++++ ...inference_router_config_fallback_policy.py | 9 + .../models/inference_router_config_preset.py | 8 + .../models/inference_router_create.py | 106 ++++++ ...inference_router_create_fallback_policy.py | 9 + .../models/inference_router_create_preset.py | 8 + .../models/inference_router_lane.py | 140 ++++++++ .../models/inference_router_lane_create.py | 79 +++++ .../inference_router_lane_create_match.py | 9 + .../models/inference_router_lane_list.py | 83 +++++ .../models/inference_router_lane_match.py | 9 + .../models/inference_router_lane_update.py | 90 +++++ .../inference_router_lane_update_match.py | 9 + .../models/inference_router_list.py | 94 +++++ .../models/inference_router_revision.py | 181 ++++++++++ ...e_router_revision_shard_placements_item.py | 92 +++++ ...ter_revision_shard_placements_item_role.py | 9 + ...er_revision_shard_placements_item_state.py | 10 + .../inference_router_revision_status.py | 11 + .../models/inference_router_scope.py | 9 + .../models/inference_router_status.py | 13 + .../models/inference_router_update.py | 118 +++++++ ...inference_router_update_fallback_policy.py | 9 + .../models/inference_router_update_preset.py | 8 + .../models/inference_router_validation.py | 77 ++++ src/graphn/_generated/models/ingest_item.py | 3 +- .../_generated/models/ingest_item_input.py | 3 +- .../models/ingest_item_input_metadata.py | 5 +- .../_generated/models/ingest_item_list.py | 3 +- src/graphn/_generated/models/ingest_job.py | 3 +- .../_generated/models/ingest_job_list.py | 3 +- .../_generated/models/ingest_job_summary.py | 3 +- src/graphn/_generated/models/integration.py | 119 +++++++ .../models/integration_auth_mode.py | 8 + .../models/integration_capability.py | 61 ++++ .../_generated/models/integration_event.py | 70 ++++ .../_generated/models/integration_kind.py | 9 + .../_generated/models/integration_list.py | 64 ++++ src/graphn/_generated/models/invitation.py | 3 +- .../models/invitation_accept_result.py | 3 +- .../_generated/models/invitation_create.py | 3 +- .../models/invitation_create_role.py | 4 +- .../_generated/models/invitation_list.py | 3 +- .../_generated/models/invitation_role.py | 4 +- .../models/invitation_scope_type.py | 4 +- .../_generated/models/invitation_status.py | 4 +- src/graphn/_generated/models/invoice.py | 88 ++--- .../_generated/models/invoice_status.py | 12 +- .../_generated/models/kb_batch_error.py | 3 +- src/graphn/_generated/models/kb_document.py | 37 +- .../_generated/models/kb_document_metadata.py | 5 +- .../_generated/models/knowledge_base.py | 3 +- .../models/knowledge_base_create.py | 3 +- .../models/knowledge_base_list_response.py | 84 +++++ .../_generated/models/knowledge_base_stats.py | 3 +- .../models/knowledge_base_update.py | 3 +- .../list_billing_invoices_response_200.py | 24 +- ...st_billing_payment_methods_response_200.py | 3 +- .../list_billing_statements_response_200.py | 96 +++++ ...ng_statements_response_200_empty_reason.py | 9 + .../models/list_custom_models_include.py | 8 + .../models/list_knowledgebases_order.py | 9 + .../models/list_knowledgebases_sort.py | 8 + .../models/list_knowledgebases_status.py | 10 + .../models/list_tts_voices_response_200.py | 5 +- .../models/managed_connection_tool_call.py | 68 ++++ .../managed_connection_tool_call_arguments.py | 45 +++ .../models/managed_connection_tool_result.py | 53 +++ .../models/mcp_discover_tools_request.py | 3 +- .../mcp_discover_tools_request_files.py | 5 +- .../models/mcp_discover_tools_response.py | 3 +- .../models/mcp_dry_run_test_request.py | 3 +- .../models/mcp_dry_run_test_request_files.py | 5 +- .../models/mcp_dry_run_test_request_input.py | 5 +- .../models/mcp_save_version_request.py | 3 +- .../models/mcp_save_version_request_files.py | 5 +- src/graphn/_generated/models/mcp_server.py | 3 +- .../_generated/models/mcp_server_create.py | 19 +- .../models/mcp_server_create_files.py | 5 +- .../models/mcp_server_create_secrets.py | 5 +- .../models/mcp_server_create_type.py | 9 + .../_generated/models/mcp_server_list.py | 3 +- .../_generated/models/mcp_server_spec.py | 59 +++- .../models/mcp_server_spec_files.py | 5 +- .../models/mcp_server_spec_secrets.py | 5 +- .../mcp_server_spec_tool_capabilities.py | 52 +++ .../_generated/models/mcp_server_spec_type.py | 10 + .../_generated/models/mcp_server_status.py | 3 +- .../_generated/models/mcp_server_update.py | 3 +- .../models/mcp_server_update_files.py | 5 +- .../models/mcp_server_update_secrets.py | 5 +- .../models/mcp_server_version_list.py | 3 +- src/graphn/_generated/models/member.py | 3 +- src/graphn/_generated/models/member_list.py | 3 +- src/graphn/_generated/models/member_role.py | 4 +- .../_generated/models/member_role_update.py | 3 +- .../models/member_role_update_role.py | 4 +- src/graphn/_generated/models/model.py | 3 +- src/graphn/_generated/models/model_list.py | 3 +- .../_generated/models/model_list_object.py | 4 +- src/graphn/_generated/models/model_object.py | 4 +- .../_generated/models/model_owned_by.py | 4 +- .../_generated/models/model_settings.py | 3 +- .../_generated/models/mpu_complete_request.py | 3 +- src/graphn/_generated/models/mpu_part.py | 3 +- src/graphn/_generated/models/opaque_object.py | 3 +- src/graphn/_generated/models/organization.py | 3 +- .../_generated/models/organization_create.py | 3 +- .../models/organization_create_type.py | 4 +- .../_generated/models/organization_list.py | 3 +- .../_generated/models/organization_type.py | 4 +- .../_generated/models/organization_update.py | 3 +- .../_generated/models/payment_method.py | 3 +- .../_generated/models/post_object_type.py | 4 +- src/graphn/_generated/models/presigned_url.py | 3 +- .../models/publish_inference_router_body.py | 61 ++++ .../_generated/models/publish_message.py | 3 +- .../models/published_router_candidate.py | 141 ++++++++ .../models/published_router_custom_lane.py | 79 +++++ .../published_router_custom_lane_match.py | 9 + .../models/published_router_decision.py | 98 ++++++ .../models/published_router_revision.py | 171 +++++++++ .../models/published_router_revision_state.py | 9 + .../_generated/models/resource_version_ref.py | 3 +- .../_generated/models/search_request.py | 7 +- .../models/search_request_metadata_filter.py | 5 +- .../_generated/models/search_response.py | 3 +- src/graphn/_generated/models/search_result.py | 38 +- .../models/search_result_metadata.py | 5 +- src/graphn/_generated/models/secret.py | 3 +- src/graphn/_generated/models/secret_create.py | 3 +- src/graphn/_generated/models/secret_list.py | 3 +- src/graphn/_generated/models/secret_update.py | 3 +- src/graphn/_generated/models/storage.py | 3 +- .../_generated/models/storage_create.py | 3 +- src/graphn/_generated/models/storage_file.py | 3 +- .../_generated/models/storage_file_list.py | 3 +- src/graphn/_generated/models/storage_list.py | 3 +- .../_generated/models/storage_post_result.py | 3 +- src/graphn/_generated/models/storage_stats.py | 3 +- .../_generated/models/storage_upload.py | 3 +- .../models/submit_ingest_job_request.py | 3 +- .../models/supported_architectures.py | 3 +- .../models/test_connection_request.py | 3 +- .../models/test_connection_response.py | 3 +- .../models/test_connection_response_usage.py | 3 +- .../_generated/models/tool_definition.py | 3 +- .../models/tool_definition_input_schema.py | 5 +- .../_generated/models/tool_reference.py | 3 +- .../_generated/models/tool_test_request.py | 3 +- .../models/tool_test_request_input.py | 5 +- .../_generated/models/tool_test_response.py | 3 +- src/graphn/_generated/models/trigger.py | 21 +- .../_generated/models/trigger_create.py | 30 +- .../_generated/models/trigger_create_input.py | 5 +- .../models/trigger_create_nested.py | 30 +- .../models/trigger_create_nested_input.py | 5 +- src/graphn/_generated/models/trigger_input.py | 5 +- src/graphn/_generated/models/trigger_list.py | 3 +- .../_generated/models/trigger_update.py | 21 +- .../_generated/models/trigger_update_input.py | 5 +- src/graphn/_generated/models/tts_request.py | 3 +- .../models/tts_request_response_format.py | 4 +- .../upload_document_from_url_request.py | 3 +- ...load_document_from_url_request_metadata.py | 5 +- ...pload_knowledgebase_document_files_body.py | 3 +- .../models/upload_storage_file_body.py | 3 +- src/graphn/_generated/models/usage_day.py | 70 ++++ src/graphn/_generated/models/usage_week.py | 78 ++++ .../models/validate_model_request.py | 3 +- .../validate_model_request_quantization.py | 4 +- .../validate_model_request_weight_source.py | 4 +- .../models/validate_model_response.py | 3 +- .../validate_model_response_artifact_type.py | 4 +- src/graphn/_generated/models/weight_source.py | 4 +- src/graphn/_generated/models/workflow.py | 3 +- .../_generated/models/workflow_bundle.py | 3 +- .../models/workflow_bundle_agents_item.py | 5 +- .../models/workflow_bundle_functions_item.py | 5 +- .../workflow_bundle_mcp_servers_item.py | 5 +- .../_generated/models/workflow_bundle_save.py | 3 +- .../models/workflow_bundle_save_response.py | 3 +- ...rkflow_bundle_save_response_agents_item.py | 5 +- ...low_bundle_save_response_functions_item.py | 5 +- ...w_bundle_save_response_mcp_servers_item.py | 5 +- ...orkflow_bundle_save_response_validation.py | 3 +- ...le_save_response_validation_errors_item.py | 5 +- .../_generated/models/workflow_create.py | 3 +- .../models/workflow_create_input_schema.py | 5 +- .../models/workflow_create_layout.py | 5 +- .../models/workflow_create_output_schema.py | 5 +- .../models/workflow_create_source.py | 5 +- .../models/workflow_input_schema.py | 5 +- .../_generated/models/workflow_layout.py | 5 +- src/graphn/_generated/models/workflow_list.py | 3 +- .../models/workflow_output_schema.py | 5 +- .../_generated/models/workflow_run_request.py | 3 +- .../models/workflow_run_request_input.py | 5 +- .../_generated/models/workflow_run_result.py | 3 +- .../workflow_run_result_node_results_item.py | 5 +- ...flow_run_result_resources_accessed_item.py | 5 +- .../models/workflow_run_result_trace.py | 5 +- .../_generated/models/workflow_source.py | 5 +- .../_generated/models/workflow_update.py | 3 +- .../models/workflow_update_input_schema.py | 5 +- .../models/workflow_update_layout.py | 5 +- .../models/workflow_update_output_schema.py | 5 +- .../models/workflow_version_detail.py | 3 +- .../workflow_version_detail_resource_pins.py | 5 +- ...kflow_version_detail_resource_snapshots.py | 5 +- .../models/workflow_version_list.py | 3 +- src/graphn/_generated/models/workspace.py | 3 +- .../_generated/models/workspace_create.py | 3 +- .../_generated/models/workspace_list.py | 3 +- .../_generated/models/workspace_update.py | 3 +- .../_generated/models/workspace_usage.py | 3 +- 451 files changed, 16317 insertions(+), 932 deletions(-) create mode 100644 src/graphn/_generated/api/admin_billing/admin_create_billing_invoice.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_discount_billing_invoice.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_get_billing_invoice.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_list_billing_invoice_revisions.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_list_billing_invoices.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_list_billing_statements.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_preview_billing_invoice.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_preview_invoice_payment.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_record_invoice_payment.py create mode 100644 src/graphn/_generated/api/admin_billing/admin_void_billing_invoice.py create mode 100644 src/graphn/_generated/api/billing/get_billing_statement.py create mode 100644 src/graphn/_generated/api/billing/list_billing_statements.py create mode 100644 src/graphn/_generated/api/connections/__init__.py create mode 100644 src/graphn/_generated/api/connections/authorize_connection.py create mode 100644 src/graphn/_generated/api/connections/call_managed_connection_tool.py create mode 100644 src/graphn/_generated/api/connections/complete_connection_authorization.py create mode 100644 src/graphn/_generated/api/connections/create_connection.py create mode 100644 src/graphn/_generated/api/connections/disconnect_connection.py create mode 100644 src/graphn/_generated/api/connections/get_connection.py create mode 100644 src/graphn/_generated/api/connections/list_connections.py create mode 100644 src/graphn/_generated/api/connections/list_integrations.py create mode 100644 src/graphn/_generated/api/connections/receive_gmail_pub_sub_event.py create mode 100644 src/graphn/_generated/api/custom_models/attach_custom_model_adapter.py create mode 100644 src/graphn/_generated/api/custom_models/list_custom_model_adapters.py create mode 100644 src/graphn/_generated/api/inference_routers/__init__.py create mode 100644 src/graphn/_generated/api/inference_routers/create_inference_router.py create mode 100644 src/graphn/_generated/api/inference_routers/create_inference_router_lane.py create mode 100644 src/graphn/_generated/api/inference_routers/delete_inference_router.py create mode 100644 src/graphn/_generated/api/inference_routers/delete_inference_router_lane.py create mode 100644 src/graphn/_generated/api/inference_routers/get_inference_router.py create mode 100644 src/graphn/_generated/api/inference_routers/get_inference_router_analytics.py create mode 100644 src/graphn/_generated/api/inference_routers/get_inference_router_lane.py create mode 100644 src/graphn/_generated/api/inference_routers/list_inference_router_lanes.py create mode 100644 src/graphn/_generated/api/inference_routers/list_inference_routers.py create mode 100644 src/graphn/_generated/api/inference_routers/publish_inference_router.py create mode 100644 src/graphn/_generated/api/inference_routers/update_inference_router.py create mode 100644 src/graphn/_generated/api/inference_routers/update_inference_router_lane.py create mode 100644 src/graphn/_generated/api/inference_routers/validate_inference_router.py create mode 100644 src/graphn/_generated/api/knowledgebases/get_knowledgebase_document_media.py create mode 100644 src/graphn/_generated/models/admin_invoice_create_request.py create mode 100644 src/graphn/_generated/models/admin_invoice_create_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_discount.py create mode 100644 src/graphn/_generated/models/admin_invoice_discount_request.py create mode 100644 src/graphn/_generated/models/admin_invoice_discount_request_type.py create mode 100644 src/graphn/_generated/models/admin_invoice_discount_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_payment_preview_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_preview_request.py create mode 100644 src/graphn/_generated/models/admin_invoice_preview_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_quote.py create mode 100644 src/graphn/_generated/models/admin_invoice_quote_line_item.py create mode 100644 src/graphn/_generated/models/admin_invoice_record_payment_request.py create mode 100644 src/graphn/_generated/models/admin_invoice_record_payment_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_revision.py create mode 100644 src/graphn/_generated/models/admin_invoice_revisions_response.py create mode 100644 src/graphn/_generated/models/admin_invoice_void_request.py create mode 100644 src/graphn/_generated/models/admin_invoice_void_response.py create mode 100644 src/graphn/_generated/models/admin_invoices_response.py rename src/graphn/_generated/models/{list_billing_invoices_response_200_empty_reason.py => admin_invoices_response_empty_reason.py} (68%) create mode 100644 src/graphn/_generated/models/admin_list_billing_statements_response_200.py create mode 100644 src/graphn/_generated/models/admin_list_billing_statements_response_200_empty_reason.py create mode 100644 src/graphn/_generated/models/billing_statement_detail.py create mode 100644 src/graphn/_generated/models/billing_statement_summary.py create mode 100644 src/graphn/_generated/models/blueprint_deploy_resource_i_ds.py create mode 100644 src/graphn/_generated/models/connection.py create mode 100644 src/graphn/_generated/models/connection_account_metadata.py create mode 100644 src/graphn/_generated/models/connection_authorization_challenge.py create mode 100644 src/graphn/_generated/models/connection_authorization_start.py create mode 100644 src/graphn/_generated/models/connection_create.py create mode 100644 src/graphn/_generated/models/connection_create_kind.py create mode 100644 src/graphn/_generated/models/connection_kind.py create mode 100644 src/graphn/_generated/models/connection_list.py create mode 100644 src/graphn/_generated/models/connection_status.py create mode 100644 src/graphn/_generated/models/connection_watch_status.py create mode 100644 src/graphn/_generated/models/custom_model_adapter_attach.py create mode 100644 src/graphn/_generated/models/custom_model_create_max_lora_rank.py create mode 100644 src/graphn/_generated/models/document_media.py create mode 100644 src/graphn/_generated/models/function_create_type.py create mode 100644 src/graphn/_generated/models/function_spec_type.py create mode 100644 src/graphn/_generated/models/get_billing_invoice_response_200_invoice.py create mode 100644 src/graphn/_generated/models/get_billing_statement_response_200.py create mode 100644 src/graphn/_generated/models/get_inference_router_analytics_interval.py create mode 100644 src/graphn/_generated/models/google_pub_sub_envelope.py create mode 100644 src/graphn/_generated/models/google_pub_sub_envelope_message.py create mode 100644 src/graphn/_generated/models/inference_router.py create mode 100644 src/graphn/_generated/models/inference_router_analytics.py create mode 100644 src/graphn/_generated/models/inference_router_analytics_breakdown.py create mode 100644 src/graphn/_generated/models/inference_router_analytics_interval.py create mode 100644 src/graphn/_generated/models/inference_router_analytics_metrics.py create mode 100644 src/graphn/_generated/models/inference_router_analytics_point.py create mode 100644 src/graphn/_generated/models/inference_router_analytics_shared_candidate_runtime_status.py create mode 100644 src/graphn/_generated/models/inference_router_candidate.py create mode 100644 src/graphn/_generated/models/inference_router_config.py create mode 100644 src/graphn/_generated/models/inference_router_config_fallback_policy.py create mode 100644 src/graphn/_generated/models/inference_router_config_preset.py create mode 100644 src/graphn/_generated/models/inference_router_create.py create mode 100644 src/graphn/_generated/models/inference_router_create_fallback_policy.py create mode 100644 src/graphn/_generated/models/inference_router_create_preset.py create mode 100644 src/graphn/_generated/models/inference_router_lane.py create mode 100644 src/graphn/_generated/models/inference_router_lane_create.py create mode 100644 src/graphn/_generated/models/inference_router_lane_create_match.py create mode 100644 src/graphn/_generated/models/inference_router_lane_list.py create mode 100644 src/graphn/_generated/models/inference_router_lane_match.py create mode 100644 src/graphn/_generated/models/inference_router_lane_update.py create mode 100644 src/graphn/_generated/models/inference_router_lane_update_match.py create mode 100644 src/graphn/_generated/models/inference_router_list.py create mode 100644 src/graphn/_generated/models/inference_router_revision.py create mode 100644 src/graphn/_generated/models/inference_router_revision_shard_placements_item.py create mode 100644 src/graphn/_generated/models/inference_router_revision_shard_placements_item_role.py create mode 100644 src/graphn/_generated/models/inference_router_revision_shard_placements_item_state.py create mode 100644 src/graphn/_generated/models/inference_router_revision_status.py create mode 100644 src/graphn/_generated/models/inference_router_scope.py create mode 100644 src/graphn/_generated/models/inference_router_status.py create mode 100644 src/graphn/_generated/models/inference_router_update.py create mode 100644 src/graphn/_generated/models/inference_router_update_fallback_policy.py create mode 100644 src/graphn/_generated/models/inference_router_update_preset.py create mode 100644 src/graphn/_generated/models/inference_router_validation.py create mode 100644 src/graphn/_generated/models/integration.py create mode 100644 src/graphn/_generated/models/integration_auth_mode.py create mode 100644 src/graphn/_generated/models/integration_capability.py create mode 100644 src/graphn/_generated/models/integration_event.py create mode 100644 src/graphn/_generated/models/integration_kind.py create mode 100644 src/graphn/_generated/models/integration_list.py create mode 100644 src/graphn/_generated/models/knowledge_base_list_response.py create mode 100644 src/graphn/_generated/models/list_billing_statements_response_200.py create mode 100644 src/graphn/_generated/models/list_billing_statements_response_200_empty_reason.py create mode 100644 src/graphn/_generated/models/list_custom_models_include.py create mode 100644 src/graphn/_generated/models/list_knowledgebases_order.py create mode 100644 src/graphn/_generated/models/list_knowledgebases_sort.py create mode 100644 src/graphn/_generated/models/list_knowledgebases_status.py create mode 100644 src/graphn/_generated/models/managed_connection_tool_call.py create mode 100644 src/graphn/_generated/models/managed_connection_tool_call_arguments.py create mode 100644 src/graphn/_generated/models/managed_connection_tool_result.py create mode 100644 src/graphn/_generated/models/mcp_server_create_type.py create mode 100644 src/graphn/_generated/models/mcp_server_spec_tool_capabilities.py create mode 100644 src/graphn/_generated/models/mcp_server_spec_type.py create mode 100644 src/graphn/_generated/models/publish_inference_router_body.py create mode 100644 src/graphn/_generated/models/published_router_candidate.py create mode 100644 src/graphn/_generated/models/published_router_custom_lane.py create mode 100644 src/graphn/_generated/models/published_router_custom_lane_match.py create mode 100644 src/graphn/_generated/models/published_router_decision.py create mode 100644 src/graphn/_generated/models/published_router_revision.py create mode 100644 src/graphn/_generated/models/published_router_revision_state.py create mode 100644 src/graphn/_generated/models/usage_day.py create mode 100644 src/graphn/_generated/models/usage_week.py diff --git a/src/graphn/_generated/api/admin_billing/admin_create_billing_invoice.py b/src/graphn/_generated/api/admin_billing/admin_create_billing_invoice.py new file mode 100644 index 0000000..80bd3c6 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_create_billing_invoice.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_create_request import AdminInvoiceCreateRequest +from ...models.admin_invoice_create_response import AdminInvoiceCreateResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + *, + body: AdminInvoiceCreateRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/admin/orgs/{org_id}/invoices".format( + org_id=quote(str(org_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceCreateResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceCreateResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceCreateResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceCreateRequest, +) -> Response[AdminInvoiceCreateResponse | Any | Error]: + """Create or replay an immutable invoice + + Args: + org_id (str): + body (AdminInvoiceCreateRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceCreateResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceCreateRequest, +) -> AdminInvoiceCreateResponse | Any | Error | None: + """Create or replay an immutable invoice + + Args: + org_id (str): + body (AdminInvoiceCreateRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceCreateResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceCreateRequest, +) -> Response[AdminInvoiceCreateResponse | Any | Error]: + """Create or replay an immutable invoice + + Args: + org_id (str): + body (AdminInvoiceCreateRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceCreateResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceCreateRequest, +) -> AdminInvoiceCreateResponse | Any | Error | None: + """Create or replay an immutable invoice + + Args: + org_id (str): + body (AdminInvoiceCreateRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceCreateResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_discount_billing_invoice.py b/src/graphn/_generated/api/admin_billing/admin_discount_billing_invoice.py new file mode 100644 index 0000000..bf27be1 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_discount_billing_invoice.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_discount_request import AdminInvoiceDiscountRequest +from ...models.admin_invoice_discount_response import AdminInvoiceDiscountResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + invoice_id: str, + *, + body: AdminInvoiceDiscountRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/admin/orgs/{org_id}/invoices/{invoice_id}/discount".format( + org_id=quote(str(org_id), safe=""), + invoice_id=quote(str(invoice_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceDiscountResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceDiscountResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceDiscountResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceDiscountRequest, +) -> Response[AdminInvoiceDiscountResponse | Any | Error]: + """Apply an admin discount and replace an invoice revision + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceDiscountRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceDiscountResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceDiscountRequest, +) -> AdminInvoiceDiscountResponse | Any | Error | None: + """Apply an admin discount and replace an invoice revision + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceDiscountRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceDiscountResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceDiscountRequest, +) -> Response[AdminInvoiceDiscountResponse | Any | Error]: + """Apply an admin discount and replace an invoice revision + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceDiscountRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceDiscountResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceDiscountRequest, +) -> AdminInvoiceDiscountResponse | Any | Error | None: + """Apply an admin discount and replace an invoice revision + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceDiscountRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceDiscountResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_get_billing_invoice.py b/src/graphn/_generated/api/admin_billing/admin_get_billing_invoice.py new file mode 100644 index 0000000..8e8700a --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_get_billing_invoice.py @@ -0,0 +1,184 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_response import AdminInvoiceResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + invoice_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/admin/orgs/{org_id}/invoices/{invoice_id}".format( + org_id=quote(str(org_id), safe=""), + invoice_id=quote(str(invoice_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[AdminInvoiceResponse | Any | Error]: + """Get one immutable billing invoice detail + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> AdminInvoiceResponse | Any | Error | None: + """Get one immutable billing invoice detail + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + ).parsed + + +async def asyncio_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[AdminInvoiceResponse | Any | Error]: + """Get one immutable billing invoice detail + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> AdminInvoiceResponse | Any | Error | None: + """Get one immutable billing invoice detail + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_list_billing_invoice_revisions.py b/src/graphn/_generated/api/admin_billing/admin_list_billing_invoice_revisions.py new file mode 100644 index 0000000..78195d2 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_list_billing_invoice_revisions.py @@ -0,0 +1,213 @@ +import datetime +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_revisions_response import AdminInvoiceRevisionsResponse +from ...models.error import Error +from ...types import UNSET, Response + + +def _get_kwargs( + org_id: str, + *, + from_: datetime.datetime, + to: datetime.datetime, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + json_from_ = from_.isoformat() + params["from"] = json_from_ + + json_to = to.isoformat() + params["to"] = json_to + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/admin/orgs/{org_id}/invoices/revisions".format( + org_id=quote(str(org_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceRevisionsResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceRevisionsResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceRevisionsResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + from_: datetime.datetime, + to: datetime.datetime, +) -> Response[AdminInvoiceRevisionsResponse | Any | Error]: + """List immutable invoice revisions for a period + + Args: + org_id (str): + from_ (datetime.datetime): + to (datetime.datetime): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceRevisionsResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + from_=from_, + to=to, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + from_: datetime.datetime, + to: datetime.datetime, +) -> AdminInvoiceRevisionsResponse | Any | Error | None: + """List immutable invoice revisions for a period + + Args: + org_id (str): + from_ (datetime.datetime): + to (datetime.datetime): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceRevisionsResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + client=client, + from_=from_, + to=to, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + from_: datetime.datetime, + to: datetime.datetime, +) -> Response[AdminInvoiceRevisionsResponse | Any | Error]: + """List immutable invoice revisions for a period + + Args: + org_id (str): + from_ (datetime.datetime): + to (datetime.datetime): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceRevisionsResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + from_=from_, + to=to, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + from_: datetime.datetime, + to: datetime.datetime, +) -> AdminInvoiceRevisionsResponse | Any | Error | None: + """List immutable invoice revisions for a period + + Args: + org_id (str): + from_ (datetime.datetime): + to (datetime.datetime): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceRevisionsResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + from_=from_, + to=to, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_list_billing_invoices.py b/src/graphn/_generated/api/admin_billing/admin_list_billing_invoices.py new file mode 100644 index 0000000..ba47b36 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_list_billing_invoices.py @@ -0,0 +1,191 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoices_response import AdminInvoicesResponse +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + org_id: str, + *, + limit: int | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["limit"] = limit + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/admin/orgs/{org_id}/invoices".format( + org_id=quote(str(org_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoicesResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoicesResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoicesResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[AdminInvoicesResponse | Any | Error]: + """List immutable billing invoices for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicesResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> AdminInvoicesResponse | Any | Error | None: + """List immutable billing invoices for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicesResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + client=client, + limit=limit, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[AdminInvoicesResponse | Any | Error]: + """List immutable billing invoices for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicesResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> AdminInvoicesResponse | Any | Error | None: + """List immutable billing invoices for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicesResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + limit=limit, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_list_billing_statements.py b/src/graphn/_generated/api/admin_billing/admin_list_billing_statements.py new file mode 100644 index 0000000..5de13e0 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_list_billing_statements.py @@ -0,0 +1,193 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_list_billing_statements_response_200 import ( + AdminListBillingStatementsResponse200, +) +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + org_id: str, + *, + limit: int | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["limit"] = limit + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/admin/orgs/{org_id}/statements".format( + org_id=quote(str(org_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminListBillingStatementsResponse200 | Any | Error | None: + if response.status_code == 200: + response_200 = AdminListBillingStatementsResponse200.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminListBillingStatementsResponse200 | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[AdminListBillingStatementsResponse200 | Any | Error]: + """List billing statements for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminListBillingStatementsResponse200 | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> AdminListBillingStatementsResponse200 | Any | Error | None: + """List billing statements for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminListBillingStatementsResponse200 | Any | Error + """ + + return sync_detailed( + org_id=org_id, + client=client, + limit=limit, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[AdminListBillingStatementsResponse200 | Any | Error]: + """List billing statements for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminListBillingStatementsResponse200 | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> AdminListBillingStatementsResponse200 | Any | Error | None: + """List billing statements for an organization + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminListBillingStatementsResponse200 | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + limit=limit, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_preview_billing_invoice.py b/src/graphn/_generated/api/admin_billing/admin_preview_billing_invoice.py new file mode 100644 index 0000000..35360ee --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_preview_billing_invoice.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_preview_request import AdminInvoicePreviewRequest +from ...models.admin_invoice_preview_response import AdminInvoicePreviewResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + *, + body: AdminInvoicePreviewRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/admin/orgs/{org_id}/invoices/preview".format( + org_id=quote(str(org_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoicePreviewResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoicePreviewResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoicePreviewResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoicePreviewRequest, +) -> Response[AdminInvoicePreviewResponse | Any | Error]: + """Preview immutable invoice window and manifest + + Args: + org_id (str): + body (AdminInvoicePreviewRequest): Preview always requires explicit [from, to) bounds. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicePreviewResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoicePreviewRequest, +) -> AdminInvoicePreviewResponse | Any | Error | None: + """Preview immutable invoice window and manifest + + Args: + org_id (str): + body (AdminInvoicePreviewRequest): Preview always requires explicit [from, to) bounds. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicePreviewResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoicePreviewRequest, +) -> Response[AdminInvoicePreviewResponse | Any | Error]: + """Preview immutable invoice window and manifest + + Args: + org_id (str): + body (AdminInvoicePreviewRequest): Preview always requires explicit [from, to) bounds. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicePreviewResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoicePreviewRequest, +) -> AdminInvoicePreviewResponse | Any | Error | None: + """Preview immutable invoice window and manifest + + Args: + org_id (str): + body (AdminInvoicePreviewRequest): Preview always requires explicit [from, to) bounds. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicePreviewResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_preview_invoice_payment.py b/src/graphn/_generated/api/admin_billing/admin_preview_invoice_payment.py new file mode 100644 index 0000000..a9079b6 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_preview_invoice_payment.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_payment_preview_response import ( + AdminInvoicePaymentPreviewResponse, +) +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + invoice_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/admin/orgs/{org_id}/invoices/{invoice_id}/payment-preview".format( + org_id=quote(str(org_id), safe=""), + invoice_id=quote(str(invoice_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoicePaymentPreviewResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoicePaymentPreviewResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoicePaymentPreviewResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[AdminInvoicePaymentPreviewResponse | Any | Error]: + """Preview a paid-invoice journal import + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicePaymentPreviewResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> AdminInvoicePaymentPreviewResponse | Any | Error | None: + """Preview a paid-invoice journal import + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicePaymentPreviewResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + ).parsed + + +async def asyncio_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[AdminInvoicePaymentPreviewResponse | Any | Error]: + """Preview a paid-invoice journal import + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoicePaymentPreviewResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, +) -> AdminInvoicePaymentPreviewResponse | Any | Error | None: + """Preview a paid-invoice journal import + + Args: + org_id (str): + invoice_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoicePaymentPreviewResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_record_invoice_payment.py b/src/graphn/_generated/api/admin_billing/admin_record_invoice_payment.py new file mode 100644 index 0000000..7d01ac5 --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_record_invoice_payment.py @@ -0,0 +1,218 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_record_payment_request import ( + AdminInvoiceRecordPaymentRequest, +) +from ...models.admin_invoice_record_payment_response import ( + AdminInvoiceRecordPaymentResponse, +) +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + invoice_id: str, + *, + body: AdminInvoiceRecordPaymentRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/admin/orgs/{org_id}/invoices/{invoice_id}/record-payment".format( + org_id=quote(str(org_id), safe=""), + invoice_id=quote(str(invoice_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceRecordPaymentResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceRecordPaymentResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceRecordPaymentResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceRecordPaymentRequest, +) -> Response[AdminInvoiceRecordPaymentResponse | Any | Error]: + """Append a paid-invoice journal payment record + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceRecordPaymentRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceRecordPaymentResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceRecordPaymentRequest, +) -> AdminInvoiceRecordPaymentResponse | Any | Error | None: + """Append a paid-invoice journal payment record + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceRecordPaymentRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceRecordPaymentResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceRecordPaymentRequest, +) -> Response[AdminInvoiceRecordPaymentResponse | Any | Error]: + """Append a paid-invoice journal payment record + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceRecordPaymentRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceRecordPaymentResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceRecordPaymentRequest, +) -> AdminInvoiceRecordPaymentResponse | Any | Error | None: + """Append a paid-invoice journal payment record + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceRecordPaymentRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceRecordPaymentResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/admin_billing/admin_void_billing_invoice.py b/src/graphn/_generated/api/admin_billing/admin_void_billing_invoice.py new file mode 100644 index 0000000..aac8eba --- /dev/null +++ b/src/graphn/_generated/api/admin_billing/admin_void_billing_invoice.py @@ -0,0 +1,209 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.admin_invoice_void_request import AdminInvoiceVoidRequest +from ...models.admin_invoice_void_response import AdminInvoiceVoidResponse +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + org_id: str, + invoice_id: str, + *, + body: AdminInvoiceVoidRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/admin/orgs/{org_id}/invoices/{invoice_id}/void".format( + org_id=quote(str(org_id), safe=""), + invoice_id=quote(str(invoice_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AdminInvoiceVoidResponse | Any | Error | None: + if response.status_code == 200: + response_200 = AdminInvoiceVoidResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = cast(Any, None) + return response_409 + + if response.status_code == 502: + response_502 = cast(Any, None) + return response_502 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AdminInvoiceVoidResponse | Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceVoidRequest, +) -> Response[AdminInvoiceVoidResponse | Any | Error]: + """Void an existing immutable invoice + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceVoidRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceVoidResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceVoidRequest, +) -> AdminInvoiceVoidResponse | Any | Error | None: + """Void an existing immutable invoice + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceVoidRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceVoidResponse | Any | Error + """ + + return sync_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceVoidRequest, +) -> Response[AdminInvoiceVoidResponse | Any | Error]: + """Void an existing immutable invoice + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceVoidRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AdminInvoiceVoidResponse | Any | Error] + """ + + kwargs = _get_kwargs( + org_id=org_id, + invoice_id=invoice_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + invoice_id: str, + *, + client: AuthenticatedClient | Client, + body: AdminInvoiceVoidRequest, +) -> AdminInvoiceVoidResponse | Any | Error | None: + """Void an existing immutable invoice + + Args: + org_id (str): + invoice_id (str): + body (AdminInvoiceVoidRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AdminInvoiceVoidResponse | Any | Error + """ + + return ( + await asyncio_detailed( + org_id=org_id, + invoice_id=invoice_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/billing/get_billing_invoice.py b/src/graphn/_generated/api/billing/get_billing_invoice.py index 769e112..c69cfa2 100644 --- a/src/graphn/_generated/api/billing/get_billing_invoice.py +++ b/src/graphn/_generated/api/billing/get_billing_invoice.py @@ -12,14 +12,14 @@ def _get_kwargs( org_id: str, - period_start: str, + invoice_id: str, ) -> dict[str, Any]: _kwargs: dict[str, Any] = { "method": "get", - "url": "/v1/{org_id}/billing/invoices/{period_start}".format( + "url": "/v1/{org_id}/billing/invoices/{invoice_id}".format( org_id=quote(str(org_id), safe=""), - period_start=quote(str(period_start), safe=""), + invoice_id=quote(str(invoice_id), safe=""), ), } @@ -53,15 +53,15 @@ def _build_response( def sync_detailed( org_id: str, - period_start: str, + invoice_id: str, *, client: AuthenticatedClient | Client, ) -> Response[GetBillingInvoiceResponse200]: - """Get billing statement detail + """Get billing invoice detail Args: org_id (str): - period_start (str): + invoice_id (str): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -73,7 +73,7 @@ def sync_detailed( kwargs = _get_kwargs( org_id=org_id, - period_start=period_start, + invoice_id=invoice_id, ) response = client.get_httpx_client().request( @@ -85,15 +85,15 @@ def sync_detailed( def sync( org_id: str, - period_start: str, + invoice_id: str, *, client: AuthenticatedClient | Client, ) -> GetBillingInvoiceResponse200 | None: - """Get billing statement detail + """Get billing invoice detail Args: org_id (str): - period_start (str): + invoice_id (str): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -105,22 +105,22 @@ def sync( return sync_detailed( org_id=org_id, - period_start=period_start, + invoice_id=invoice_id, client=client, ).parsed async def asyncio_detailed( org_id: str, - period_start: str, + invoice_id: str, *, client: AuthenticatedClient | Client, ) -> Response[GetBillingInvoiceResponse200]: - """Get billing statement detail + """Get billing invoice detail Args: org_id (str): - period_start (str): + invoice_id (str): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -132,7 +132,7 @@ async def asyncio_detailed( kwargs = _get_kwargs( org_id=org_id, - period_start=period_start, + invoice_id=invoice_id, ) response = await client.get_async_httpx_client().request(**kwargs) @@ -142,15 +142,15 @@ async def asyncio_detailed( async def asyncio( org_id: str, - period_start: str, + invoice_id: str, *, client: AuthenticatedClient | Client, ) -> GetBillingInvoiceResponse200 | None: - """Get billing statement detail + """Get billing invoice detail Args: org_id (str): - period_start (str): + invoice_id (str): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -163,7 +163,7 @@ async def asyncio( return ( await asyncio_detailed( org_id=org_id, - period_start=period_start, + invoice_id=invoice_id, client=client, ) ).parsed diff --git a/src/graphn/_generated/api/billing/get_billing_statement.py b/src/graphn/_generated/api/billing/get_billing_statement.py new file mode 100644 index 0000000..19f12e9 --- /dev/null +++ b/src/graphn/_generated/api/billing/get_billing_statement.py @@ -0,0 +1,169 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.get_billing_statement_response_200 import GetBillingStatementResponse200 +from ...types import Response + + +def _get_kwargs( + org_id: str, + period_start: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{org_id}/billing/statements/{period_start}".format( + org_id=quote(str(org_id), safe=""), + period_start=quote(str(period_start), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> GetBillingStatementResponse200 | None: + if response.status_code == 200: + response_200 = GetBillingStatementResponse200.from_dict(response.json()) + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[GetBillingStatementResponse200]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + period_start: str, + *, + client: AuthenticatedClient | Client, +) -> Response[GetBillingStatementResponse200]: + """Get billing statement detail + + Args: + org_id (str): + period_start (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GetBillingStatementResponse200] + """ + + kwargs = _get_kwargs( + org_id=org_id, + period_start=period_start, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + period_start: str, + *, + client: AuthenticatedClient | Client, +) -> GetBillingStatementResponse200 | None: + """Get billing statement detail + + Args: + org_id (str): + period_start (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GetBillingStatementResponse200 + """ + + return sync_detailed( + org_id=org_id, + period_start=period_start, + client=client, + ).parsed + + +async def asyncio_detailed( + org_id: str, + period_start: str, + *, + client: AuthenticatedClient | Client, +) -> Response[GetBillingStatementResponse200]: + """Get billing statement detail + + Args: + org_id (str): + period_start (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[GetBillingStatementResponse200] + """ + + kwargs = _get_kwargs( + org_id=org_id, + period_start=period_start, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + period_start: str, + *, + client: AuthenticatedClient | Client, +) -> GetBillingStatementResponse200 | None: + """Get billing statement detail + + Args: + org_id (str): + period_start (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + GetBillingStatementResponse200 + """ + + return ( + await asyncio_detailed( + org_id=org_id, + period_start=period_start, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/billing/list_billing_invoices.py b/src/graphn/_generated/api/billing/list_billing_invoices.py index c84ae39..7da5e86 100644 --- a/src/graphn/_generated/api/billing/list_billing_invoices.py +++ b/src/graphn/_generated/api/billing/list_billing_invoices.py @@ -64,7 +64,7 @@ def sync_detailed( client: AuthenticatedClient | Client, limit: int | Unset = UNSET, ) -> Response[ListBillingInvoicesResponse200]: - """List billing statements + """List billing invoices Args: org_id (str): @@ -96,7 +96,7 @@ def sync( client: AuthenticatedClient | Client, limit: int | Unset = UNSET, ) -> ListBillingInvoicesResponse200 | None: - """List billing statements + """List billing invoices Args: org_id (str): @@ -123,7 +123,7 @@ async def asyncio_detailed( client: AuthenticatedClient | Client, limit: int | Unset = UNSET, ) -> Response[ListBillingInvoicesResponse200]: - """List billing statements + """List billing invoices Args: org_id (str): @@ -153,7 +153,7 @@ async def asyncio( client: AuthenticatedClient | Client, limit: int | Unset = UNSET, ) -> ListBillingInvoicesResponse200 | None: - """List billing statements + """List billing invoices Args: org_id (str): diff --git a/src/graphn/_generated/api/billing/list_billing_statements.py b/src/graphn/_generated/api/billing/list_billing_statements.py new file mode 100644 index 0000000..b98619a --- /dev/null +++ b/src/graphn/_generated/api/billing/list_billing_statements.py @@ -0,0 +1,178 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.list_billing_statements_response_200 import ( + ListBillingStatementsResponse200, +) +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + org_id: str, + *, + limit: int | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["limit"] = limit + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{org_id}/billing/statements".format( + org_id=quote(str(org_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ListBillingStatementsResponse200 | None: + if response.status_code == 200: + response_200 = ListBillingStatementsResponse200.from_dict(response.json()) + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ListBillingStatementsResponse200]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[ListBillingStatementsResponse200]: + """List billing statements + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ListBillingStatementsResponse200] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> ListBillingStatementsResponse200 | None: + """List billing statements + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ListBillingStatementsResponse200 + """ + + return sync_detailed( + org_id=org_id, + client=client, + limit=limit, + ).parsed + + +async def asyncio_detailed( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> Response[ListBillingStatementsResponse200]: + """List billing statements + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ListBillingStatementsResponse200] + """ + + kwargs = _get_kwargs( + org_id=org_id, + limit=limit, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + org_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = UNSET, +) -> ListBillingStatementsResponse200 | None: + """List billing statements + + Args: + org_id (str): + limit (int | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ListBillingStatementsResponse200 + """ + + return ( + await asyncio_detailed( + org_id=org_id, + client=client, + limit=limit, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/__init__.py b/src/graphn/_generated/api/connections/__init__.py new file mode 100644 index 0000000..2d7c0b2 --- /dev/null +++ b/src/graphn/_generated/api/connections/__init__.py @@ -0,0 +1 @@ +"""Contains endpoint functions for accessing the API""" diff --git a/src/graphn/_generated/api/connections/authorize_connection.py b/src/graphn/_generated/api/connections/authorize_connection.py new file mode 100644 index 0000000..8641d50 --- /dev/null +++ b/src/graphn/_generated/api/connections/authorize_connection.py @@ -0,0 +1,218 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.connection_authorization_challenge import ( + ConnectionAuthorizationChallenge, +) +from ...models.connection_authorization_start import ConnectionAuthorizationStart +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + connection_id: str, + *, + body: ConnectionAuthorizationStart, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/connections/{connection_id}/authorize".format( + workspace_id=quote(str(workspace_id), safe=""), + connection_id=quote(str(connection_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ConnectionAuthorizationChallenge | Error | None: + if response.status_code == 200: + response_200 = ConnectionAuthorizationChallenge.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 503: + response_503 = Error.from_dict(response.json()) + + return response_503 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ConnectionAuthorizationChallenge | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionAuthorizationStart, +) -> Response[ConnectionAuthorizationChallenge | Error]: + """Start or restart provider authorization + + Args: + workspace_id (str): + connection_id (str): + body (ConnectionAuthorizationStart): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectionAuthorizationChallenge | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionAuthorizationStart, +) -> ConnectionAuthorizationChallenge | Error | None: + """Start or restart provider authorization + + Args: + workspace_id (str): + connection_id (str): + body (ConnectionAuthorizationStart): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectionAuthorizationChallenge | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionAuthorizationStart, +) -> Response[ConnectionAuthorizationChallenge | Error]: + """Start or restart provider authorization + + Args: + workspace_id (str): + connection_id (str): + body (ConnectionAuthorizationStart): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectionAuthorizationChallenge | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionAuthorizationStart, +) -> ConnectionAuthorizationChallenge | Error | None: + """Start or restart provider authorization + + Args: + workspace_id (str): + connection_id (str): + body (ConnectionAuthorizationStart): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectionAuthorizationChallenge | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/call_managed_connection_tool.py b/src/graphn/_generated/api/connections/call_managed_connection_tool.py new file mode 100644 index 0000000..212c96d --- /dev/null +++ b/src/graphn/_generated/api/connections/call_managed_connection_tool.py @@ -0,0 +1,238 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.managed_connection_tool_call import ManagedConnectionToolCall +from ...models.managed_connection_tool_result import ManagedConnectionToolResult +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + connection_id: str, + tool_name: str, + *, + body: ManagedConnectionToolCall, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/internal/workspaces/{workspace_id}/connections/{connection_id}/tools/{tool_name}/call".format( + workspace_id=quote(str(workspace_id), safe=""), + connection_id=quote(str(connection_id), safe=""), + tool_name=quote(str(tool_name), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | ManagedConnectionToolResult | None: + if response.status_code == 200: + response_200 = ManagedConnectionToolResult.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | ManagedConnectionToolResult]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + connection_id: str, + tool_name: str, + *, + client: AuthenticatedClient, + body: ManagedConnectionToolCall, +) -> Response[Error | ManagedConnectionToolResult]: + """Invoke a GraphN-managed MCP tool + + Internal service-to-service endpoint used by Agent Foundry. + + Args: + workspace_id (str): + connection_id (str): + tool_name (str): + body (ManagedConnectionToolCall): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | ManagedConnectionToolResult] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + tool_name=tool_name, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + connection_id: str, + tool_name: str, + *, + client: AuthenticatedClient, + body: ManagedConnectionToolCall, +) -> Error | ManagedConnectionToolResult | None: + """Invoke a GraphN-managed MCP tool + + Internal service-to-service endpoint used by Agent Foundry. + + Args: + workspace_id (str): + connection_id (str): + tool_name (str): + body (ManagedConnectionToolCall): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | ManagedConnectionToolResult + """ + + return sync_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + tool_name=tool_name, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + connection_id: str, + tool_name: str, + *, + client: AuthenticatedClient, + body: ManagedConnectionToolCall, +) -> Response[Error | ManagedConnectionToolResult]: + """Invoke a GraphN-managed MCP tool + + Internal service-to-service endpoint used by Agent Foundry. + + Args: + workspace_id (str): + connection_id (str): + tool_name (str): + body (ManagedConnectionToolCall): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | ManagedConnectionToolResult] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + tool_name=tool_name, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + connection_id: str, + tool_name: str, + *, + client: AuthenticatedClient, + body: ManagedConnectionToolCall, +) -> Error | ManagedConnectionToolResult | None: + """Invoke a GraphN-managed MCP tool + + Internal service-to-service endpoint used by Agent Foundry. + + Args: + workspace_id (str): + connection_id (str): + tool_name (str): + body (ManagedConnectionToolCall): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | ManagedConnectionToolResult + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + tool_name=tool_name, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/complete_connection_authorization.py b/src/graphn/_generated/api/connections/complete_connection_authorization.py new file mode 100644 index 0000000..0e666b5 --- /dev/null +++ b/src/graphn/_generated/api/connections/complete_connection_authorization.py @@ -0,0 +1,237 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + provider_id: str, + *, + state: str, + code: str | Unset = UNSET, + error: str | Unset = UNSET, + error_description: str | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["state"] = state + + params["code"] = code + + params["error"] = error + + params["error_description"] = error_description + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/oauth/connections/{provider_id}/callback".format( + provider_id=quote(str(provider_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | Error | None: + if response.status_code == 303: + response_303 = cast(Any, None) + return response_303 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + provider_id: str, + *, + client: AuthenticatedClient | Client, + state: str, + code: str | Unset = UNSET, + error: str | Unset = UNSET, + error_description: str | Unset = UNSET, +) -> Response[Any | Error]: + """Complete a provider OAuth authorization + + Public OAuth callback. Tenant identity, PKCE data, and the final redirect + are recovered exclusively from one-time encrypted state. + + Args: + provider_id (str): + state (str): + code (str | Unset): + error (str | Unset): + error_description (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + provider_id=provider_id, + state=state, + code=code, + error=error, + error_description=error_description, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + provider_id: str, + *, + client: AuthenticatedClient | Client, + state: str, + code: str | Unset = UNSET, + error: str | Unset = UNSET, + error_description: str | Unset = UNSET, +) -> Any | Error | None: + """Complete a provider OAuth authorization + + Public OAuth callback. Tenant identity, PKCE data, and the final redirect + are recovered exclusively from one-time encrypted state. + + Args: + provider_id (str): + state (str): + code (str | Unset): + error (str | Unset): + error_description (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return sync_detailed( + provider_id=provider_id, + client=client, + state=state, + code=code, + error=error, + error_description=error_description, + ).parsed + + +async def asyncio_detailed( + provider_id: str, + *, + client: AuthenticatedClient | Client, + state: str, + code: str | Unset = UNSET, + error: str | Unset = UNSET, + error_description: str | Unset = UNSET, +) -> Response[Any | Error]: + """Complete a provider OAuth authorization + + Public OAuth callback. Tenant identity, PKCE data, and the final redirect + are recovered exclusively from one-time encrypted state. + + Args: + provider_id (str): + state (str): + code (str | Unset): + error (str | Unset): + error_description (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + provider_id=provider_id, + state=state, + code=code, + error=error, + error_description=error_description, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + provider_id: str, + *, + client: AuthenticatedClient | Client, + state: str, + code: str | Unset = UNSET, + error: str | Unset = UNSET, + error_description: str | Unset = UNSET, +) -> Any | Error | None: + """Complete a provider OAuth authorization + + Public OAuth callback. Tenant identity, PKCE data, and the final redirect + are recovered exclusively from one-time encrypted state. + + Args: + provider_id (str): + state (str): + code (str | Unset): + error (str | Unset): + error_description (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return ( + await asyncio_detailed( + provider_id=provider_id, + client=client, + state=state, + code=code, + error=error, + error_description=error_description, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/create_connection.py b/src/graphn/_generated/api/connections/create_connection.py new file mode 100644 index 0000000..69a250b --- /dev/null +++ b/src/graphn/_generated/api/connections/create_connection.py @@ -0,0 +1,197 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.connection import Connection +from ...models.connection_create import ConnectionCreate +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + *, + body: ConnectionCreate, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/connections".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Connection | Error | None: + if response.status_code == 201: + response_201 = Connection.from_dict(response.json()) + + return response_201 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Connection | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionCreate, +) -> Response[Connection | Error]: + """Create a pending workspace connection + + Args: + workspace_id (str): + body (ConnectionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionCreate, +) -> Connection | Error | None: + """Create a pending workspace connection + + Args: + workspace_id (str): + body (ConnectionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionCreate, +) -> Response[Connection | Error]: + """Create a pending workspace connection + + Args: + workspace_id (str): + body (ConnectionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: ConnectionCreate, +) -> Connection | Error | None: + """Create a pending workspace connection + + Args: + workspace_id (str): + body (ConnectionCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/disconnect_connection.py b/src/graphn/_generated/api/connections/disconnect_connection.py new file mode 100644 index 0000000..d028d75 --- /dev/null +++ b/src/graphn/_generated/api/connections/disconnect_connection.py @@ -0,0 +1,195 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + connection_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/v1/{workspace_id}/connections/{connection_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + connection_id=quote(str(connection_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | Error | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Revoke and disconnect a connection + + Clears the stored credential while retaining the opaque connection ID + so dependent resources can be reconnected without rebinding. + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Revoke and disconnect a connection + + Clears the stored credential while retaining the opaque connection ID + so dependent resources can be reconnected without rebinding. + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Revoke and disconnect a connection + + Clears the stored credential while retaining the opaque connection ID + so dependent resources can be reconnected without rebinding. + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Revoke and disconnect a connection + + Clears the stored credential while retaining the opaque connection ID + so dependent resources can be reconnected without rebinding. + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/get_connection.py b/src/graphn/_generated/api/connections/get_connection.py new file mode 100644 index 0000000..9002c56 --- /dev/null +++ b/src/graphn/_generated/api/connections/get_connection.py @@ -0,0 +1,185 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.connection import Connection +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + connection_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/connections/{connection_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + connection_id=quote(str(connection_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Connection | Error | None: + if response.status_code == 200: + response_200 = Connection.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Connection | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Connection | Error]: + """Get connection metadata + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Connection | Error | None: + """Get connection metadata + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Connection | Error]: + """Get connection metadata + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + connection_id=connection_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + connection_id: str, + *, + client: AuthenticatedClient | Client, +) -> Connection | Error | None: + """Get connection metadata + + Args: + workspace_id (str): + connection_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + connection_id=connection_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/list_connections.py b/src/graphn/_generated/api/connections/list_connections.py new file mode 100644 index 0000000..3ab5b53 --- /dev/null +++ b/src/graphn/_generated/api/connections/list_connections.py @@ -0,0 +1,202 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.connection_list import ConnectionList +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + workspace_id: str, + *, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["limit"] = limit + + params["continue_token"] = continue_token + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/connections".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ConnectionList | Error | None: + if response.status_code == 200: + response_200 = ConnectionList.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ConnectionList | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Response[ConnectionList | Error]: + """List workspace connections + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectionList | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + limit=limit, + continue_token=continue_token, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> ConnectionList | Error | None: + """List workspace connections + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectionList | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + limit=limit, + continue_token=continue_token, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Response[ConnectionList | Error]: + """List workspace connections + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectionList | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + limit=limit, + continue_token=continue_token, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> ConnectionList | Error | None: + """List workspace connections + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectionList | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + limit=limit, + continue_token=continue_token, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/list_integrations.py b/src/graphn/_generated/api/connections/list_integrations.py new file mode 100644 index 0000000..41024b2 --- /dev/null +++ b/src/graphn/_generated/api/connections/list_integrations.py @@ -0,0 +1,134 @@ +from http import HTTPStatus +from typing import Any + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.integration_list import IntegrationList +from ...types import Response + + +def _get_kwargs() -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/integrations", + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | IntegrationList | None: + if response.status_code == 200: + response_200 = IntegrationList.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | IntegrationList]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, +) -> Response[Error | IntegrationList]: + """List GraphN-managed integration definitions + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | IntegrationList] + """ + + kwargs = _get_kwargs() + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient | Client, +) -> Error | IntegrationList | None: + """List GraphN-managed integration definitions + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | IntegrationList + """ + + return sync_detailed( + client=client, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, +) -> Response[Error | IntegrationList]: + """List GraphN-managed integration definitions + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | IntegrationList] + """ + + kwargs = _get_kwargs() + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient | Client, +) -> Error | IntegrationList | None: + """List GraphN-managed integration definitions + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | IntegrationList + """ + + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/connections/receive_gmail_pub_sub_event.py b/src/graphn/_generated/api/connections/receive_gmail_pub_sub_event.py new file mode 100644 index 0000000..96dbba3 --- /dev/null +++ b/src/graphn/_generated/api/connections/receive_gmail_pub_sub_event.py @@ -0,0 +1,191 @@ +from http import HTTPStatus +from typing import Any, cast + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.google_pub_sub_envelope import GooglePubSubEnvelope +from ...types import Response + + +def _get_kwargs( + *, + body: GooglePubSubEnvelope, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/connections/events/gmail", + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | Error | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 500: + response_500 = Error.from_dict(response.json()) + + return response_500 + + if response.status_code == 503: + response_503 = Error.from_dict(response.json()) + + return response_503 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: GooglePubSubEnvelope, +) -> Response[Any | Error]: + """Receive a Google Pub/Sub push for Gmail watches + + Provider callback authenticated with the configured Google Pub/Sub + push-service-account OIDC token and exact audience. + + Args: + body (GooglePubSubEnvelope): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + body: GooglePubSubEnvelope, +) -> Any | Error | None: + """Receive a Google Pub/Sub push for Gmail watches + + Provider callback authenticated with the configured Google Pub/Sub + push-service-account OIDC token and exact audience. + + Args: + body (GooglePubSubEnvelope): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return sync_detailed( + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: GooglePubSubEnvelope, +) -> Response[Any | Error]: + """Receive a Google Pub/Sub push for Gmail watches + + Provider callback authenticated with the configured Google Pub/Sub + push-service-account OIDC token and exact audience. + + Args: + body (GooglePubSubEnvelope): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + body: GooglePubSubEnvelope, +) -> Any | Error | None: + """Receive a Google Pub/Sub push for Gmail watches + + Provider callback authenticated with the configured Google Pub/Sub + push-service-account OIDC token and exact audience. + + Args: + body (GooglePubSubEnvelope): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/custom_models/attach_custom_model_adapter.py b/src/graphn/_generated/api/custom_models/attach_custom_model_adapter.py new file mode 100644 index 0000000..f3be317 --- /dev/null +++ b/src/graphn/_generated/api/custom_models/attach_custom_model_adapter.py @@ -0,0 +1,333 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.custom_model import CustomModel +from ...models.custom_model_adapter_attach import CustomModelAdapterAttach +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + workspace_id: str, + model_id: str, + *, + body: CustomModelAdapterAttach, + idempotency_key: str | Unset = UNSET, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + if not isinstance(idempotency_key, Unset): + headers["Idempotency-Key"] = idempotency_key + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/custom-models/{model_id}/adapters".format( + workspace_id=quote(str(workspace_id), safe=""), + model_id=quote(str(model_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomModel | Error | None: + if response.status_code == 201: + response_201 = CustomModel.from_dict(response.json()) + + return response_201 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 402: + response_402 = Error.from_dict(response.json()) + + return response_402 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if response.status_code == 422: + response_422 = Error.from_dict(response.json()) + + return response_422 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomModel | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, + body: CustomModelAdapterAttach, + idempotency_key: str | Unset = UNSET, +) -> Response[CustomModel | Error]: + """Attach a LoRA adapter to a shared base + + Preview, refused with `409 SHARED_LORA_UNSUPPORTED` unless enabled + for the workspace's deployment. Registers a LoRA adapter on a + shared LoRA base (a custom model created with `lora_enabled`). The + adapter uses no GPU of its own: the base loads it, and clients + call it as `custom:` in chat completions once it is `ready`, + where `id` is the adapter's own ID from the response. The response + returns immediately with the adapter `pending`. + + Refusals: `409 NOT_LORA_ENABLED` when the model is not a shared + LoRA base, `409 BASE_NOT_AVAILABLE` when the base has failed or is + being deleted, `422 ADAPTER_LIMIT_EXCEEDED` when the base already + has `max_adapters` attached, and `409 ALREADY_EXISTS` when the name + is taken in the workspace. Attaching is gated like importing a + model: `402 PURCHASE_REQUIRED` and `403 CUSTOM_MODELS_DISABLED`. + + Staging validates the adapter's files after the attach. An adapter + that fails then, or later fails to roll out, reads `failed` with an + `error_message` that starts with a reason code: `ADAPTER_INVALID`, + `ADAPTER_RANK_EXCEEDS_BASE`, `ADAPTER_BASE_MISMATCH`, + `ADAPTER_LOAD_FAILED`, `WAITING_FOR_GPU_TIMEOUT` or + `INFRASTRUCTURE_UNAVAILABLE`. + + Args: + workspace_id (str): + model_id (str): + idempotency_key (str | Unset): + body (CustomModelAdapterAttach): Preview. Request body for + `POST /v1/{workspaceId}/custom-models/{modelId}/adapters`. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomModel | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + model_id=model_id, + body=body, + idempotency_key=idempotency_key, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, + body: CustomModelAdapterAttach, + idempotency_key: str | Unset = UNSET, +) -> CustomModel | Error | None: + """Attach a LoRA adapter to a shared base + + Preview, refused with `409 SHARED_LORA_UNSUPPORTED` unless enabled + for the workspace's deployment. Registers a LoRA adapter on a + shared LoRA base (a custom model created with `lora_enabled`). The + adapter uses no GPU of its own: the base loads it, and clients + call it as `custom:` in chat completions once it is `ready`, + where `id` is the adapter's own ID from the response. The response + returns immediately with the adapter `pending`. + + Refusals: `409 NOT_LORA_ENABLED` when the model is not a shared + LoRA base, `409 BASE_NOT_AVAILABLE` when the base has failed or is + being deleted, `422 ADAPTER_LIMIT_EXCEEDED` when the base already + has `max_adapters` attached, and `409 ALREADY_EXISTS` when the name + is taken in the workspace. Attaching is gated like importing a + model: `402 PURCHASE_REQUIRED` and `403 CUSTOM_MODELS_DISABLED`. + + Staging validates the adapter's files after the attach. An adapter + that fails then, or later fails to roll out, reads `failed` with an + `error_message` that starts with a reason code: `ADAPTER_INVALID`, + `ADAPTER_RANK_EXCEEDS_BASE`, `ADAPTER_BASE_MISMATCH`, + `ADAPTER_LOAD_FAILED`, `WAITING_FOR_GPU_TIMEOUT` or + `INFRASTRUCTURE_UNAVAILABLE`. + + Args: + workspace_id (str): + model_id (str): + idempotency_key (str | Unset): + body (CustomModelAdapterAttach): Preview. Request body for + `POST /v1/{workspaceId}/custom-models/{modelId}/adapters`. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomModel | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + model_id=model_id, + client=client, + body=body, + idempotency_key=idempotency_key, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, + body: CustomModelAdapterAttach, + idempotency_key: str | Unset = UNSET, +) -> Response[CustomModel | Error]: + """Attach a LoRA adapter to a shared base + + Preview, refused with `409 SHARED_LORA_UNSUPPORTED` unless enabled + for the workspace's deployment. Registers a LoRA adapter on a + shared LoRA base (a custom model created with `lora_enabled`). The + adapter uses no GPU of its own: the base loads it, and clients + call it as `custom:` in chat completions once it is `ready`, + where `id` is the adapter's own ID from the response. The response + returns immediately with the adapter `pending`. + + Refusals: `409 NOT_LORA_ENABLED` when the model is not a shared + LoRA base, `409 BASE_NOT_AVAILABLE` when the base has failed or is + being deleted, `422 ADAPTER_LIMIT_EXCEEDED` when the base already + has `max_adapters` attached, and `409 ALREADY_EXISTS` when the name + is taken in the workspace. Attaching is gated like importing a + model: `402 PURCHASE_REQUIRED` and `403 CUSTOM_MODELS_DISABLED`. + + Staging validates the adapter's files after the attach. An adapter + that fails then, or later fails to roll out, reads `failed` with an + `error_message` that starts with a reason code: `ADAPTER_INVALID`, + `ADAPTER_RANK_EXCEEDS_BASE`, `ADAPTER_BASE_MISMATCH`, + `ADAPTER_LOAD_FAILED`, `WAITING_FOR_GPU_TIMEOUT` or + `INFRASTRUCTURE_UNAVAILABLE`. + + Args: + workspace_id (str): + model_id (str): + idempotency_key (str | Unset): + body (CustomModelAdapterAttach): Preview. Request body for + `POST /v1/{workspaceId}/custom-models/{modelId}/adapters`. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomModel | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + model_id=model_id, + body=body, + idempotency_key=idempotency_key, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, + body: CustomModelAdapterAttach, + idempotency_key: str | Unset = UNSET, +) -> CustomModel | Error | None: + """Attach a LoRA adapter to a shared base + + Preview, refused with `409 SHARED_LORA_UNSUPPORTED` unless enabled + for the workspace's deployment. Registers a LoRA adapter on a + shared LoRA base (a custom model created with `lora_enabled`). The + adapter uses no GPU of its own: the base loads it, and clients + call it as `custom:` in chat completions once it is `ready`, + where `id` is the adapter's own ID from the response. The response + returns immediately with the adapter `pending`. + + Refusals: `409 NOT_LORA_ENABLED` when the model is not a shared + LoRA base, `409 BASE_NOT_AVAILABLE` when the base has failed or is + being deleted, `422 ADAPTER_LIMIT_EXCEEDED` when the base already + has `max_adapters` attached, and `409 ALREADY_EXISTS` when the name + is taken in the workspace. Attaching is gated like importing a + model: `402 PURCHASE_REQUIRED` and `403 CUSTOM_MODELS_DISABLED`. + + Staging validates the adapter's files after the attach. An adapter + that fails then, or later fails to roll out, reads `failed` with an + `error_message` that starts with a reason code: `ADAPTER_INVALID`, + `ADAPTER_RANK_EXCEEDS_BASE`, `ADAPTER_BASE_MISMATCH`, + `ADAPTER_LOAD_FAILED`, `WAITING_FOR_GPU_TIMEOUT` or + `INFRASTRUCTURE_UNAVAILABLE`. + + Args: + workspace_id (str): + model_id (str): + idempotency_key (str | Unset): + body (CustomModelAdapterAttach): Preview. Request body for + `POST /v1/{workspaceId}/custom-models/{modelId}/adapters`. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomModel | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + model_id=model_id, + client=client, + body=body, + idempotency_key=idempotency_key, + ) + ).parsed diff --git a/src/graphn/_generated/api/custom_models/create_custom_model.py b/src/graphn/_generated/api/custom_models/create_custom_model.py index 62cdbf3..80b6822 100644 --- a/src/graphn/_generated/api/custom_models/create_custom_model.py +++ b/src/graphn/_generated/api/custom_models/create_custom_model.py @@ -85,10 +85,10 @@ def sync_detailed( client: AuthenticatedClient | Client, body: CustomModelCreate, ) -> Response[CustomModel | Error]: - r"""Register a new custom model + """Register a new custom model Begin import + deployment of a custom model. The response returns - immediately with `status: \"deploying\"`. Poll `getCustomModel` + immediately with `status: "deploying"`. Poll `getCustomModel` (or use the SDK's `wait_until_ready`) until the status reaches `ready` or `failed`. @@ -122,10 +122,10 @@ def sync( client: AuthenticatedClient | Client, body: CustomModelCreate, ) -> CustomModel | Error | None: - r"""Register a new custom model + """Register a new custom model Begin import + deployment of a custom model. The response returns - immediately with `status: \"deploying\"`. Poll `getCustomModel` + immediately with `status: "deploying"`. Poll `getCustomModel` (or use the SDK's `wait_until_ready`) until the status reaches `ready` or `failed`. @@ -154,10 +154,10 @@ async def asyncio_detailed( client: AuthenticatedClient | Client, body: CustomModelCreate, ) -> Response[CustomModel | Error]: - r"""Register a new custom model + """Register a new custom model Begin import + deployment of a custom model. The response returns - immediately with `status: \"deploying\"`. Poll `getCustomModel` + immediately with `status: "deploying"`. Poll `getCustomModel` (or use the SDK's `wait_until_ready`) until the status reaches `ready` or `failed`. @@ -189,10 +189,10 @@ async def asyncio( client: AuthenticatedClient | Client, body: CustomModelCreate, ) -> CustomModel | Error | None: - r"""Register a new custom model + """Register a new custom model Begin import + deployment of a custom model. The response returns - immediately with `status: \"deploying\"`. Poll `getCustomModel` + immediately with `status: "deploying"`. Poll `getCustomModel` (or use the SDK's `wait_until_ready`) until the status reaches `ready` or `failed`. diff --git a/src/graphn/_generated/api/custom_models/delete_custom_model.py b/src/graphn/_generated/api/custom_models/delete_custom_model.py index df934d0..253abe0 100644 --- a/src/graphn/_generated/api/custom_models/delete_custom_model.py +++ b/src/graphn/_generated/api/custom_models/delete_custom_model.py @@ -48,6 +48,11 @@ def _parse_response( return response_404 + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: @@ -74,6 +79,13 @@ def sync_detailed( """Delete a custom model Tears down the deployment and removes the model record. Idempotent. + A shared LoRA base with adapters attached is refused with + `409 HAS_ADAPTERS`. + + Deleting an adapter starts its removal from the base: it reads + `deleting` until the base has unloaded it, and repeating the call + returns `204`. An adapter an inference router lists is refused with + `409 CUSTOM_MODEL_IN_USE`. Args: workspace_id (str): @@ -108,6 +120,13 @@ def sync( """Delete a custom model Tears down the deployment and removes the model record. Idempotent. + A shared LoRA base with adapters attached is refused with + `409 HAS_ADAPTERS`. + + Deleting an adapter starts its removal from the base: it reads + `deleting` until the base has unloaded it, and repeating the call + returns `204`. An adapter an inference router lists is refused with + `409 CUSTOM_MODEL_IN_USE`. Args: workspace_id (str): @@ -137,6 +156,13 @@ async def asyncio_detailed( """Delete a custom model Tears down the deployment and removes the model record. Idempotent. + A shared LoRA base with adapters attached is refused with + `409 HAS_ADAPTERS`. + + Deleting an adapter starts its removal from the base: it reads + `deleting` until the base has unloaded it, and repeating the call + returns `204`. An adapter an inference router lists is refused with + `409 CUSTOM_MODEL_IN_USE`. Args: workspace_id (str): @@ -169,6 +195,13 @@ async def asyncio( """Delete a custom model Tears down the deployment and removes the model record. Idempotent. + A shared LoRA base with adapters attached is refused with + `409 HAS_ADAPTERS`. + + Deleting an adapter starts its removal from the base: it reads + `deleting` until the base has unloaded it, and repeating the call + returns `204`. An adapter an inference router lists is refused with + `409 CUSTOM_MODEL_IN_USE`. Args: workspace_id (str): diff --git a/src/graphn/_generated/api/custom_models/get_custom_model.py b/src/graphn/_generated/api/custom_models/get_custom_model.py index d87bedc..e1ac999 100644 --- a/src/graphn/_generated/api/custom_models/get_custom_model.py +++ b/src/graphn/_generated/api/custom_models/get_custom_model.py @@ -76,7 +76,8 @@ def sync_detailed( """Get a custom model Returns the latest known state of the custom model, enriched with - live deployment status (replica counts, endpoint readiness). + live deployment status (replica counts, endpoint readiness). An + adapter reports its base's GPU and replica fields. Args: workspace_id (str): @@ -111,7 +112,8 @@ def sync( """Get a custom model Returns the latest known state of the custom model, enriched with - live deployment status (replica counts, endpoint readiness). + live deployment status (replica counts, endpoint readiness). An + adapter reports its base's GPU and replica fields. Args: workspace_id (str): @@ -141,7 +143,8 @@ async def asyncio_detailed( """Get a custom model Returns the latest known state of the custom model, enriched with - live deployment status (replica counts, endpoint readiness). + live deployment status (replica counts, endpoint readiness). An + adapter reports its base's GPU and replica fields. Args: workspace_id (str): @@ -174,7 +177,8 @@ async def asyncio( """Get a custom model Returns the latest known state of the custom model, enriched with - live deployment status (replica counts, endpoint readiness). + live deployment status (replica counts, endpoint readiness). An + adapter reports its base's GPU and replica fields. Args: workspace_id (str): diff --git a/src/graphn/_generated/api/custom_models/list_custom_model_adapters.py b/src/graphn/_generated/api/custom_models/list_custom_model_adapters.py new file mode 100644 index 0000000..25700d5 --- /dev/null +++ b/src/graphn/_generated/api/custom_models/list_custom_model_adapters.py @@ -0,0 +1,206 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.custom_model_list import CustomModelList +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + model_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/custom-models/{model_id}/adapters".format( + workspace_id=quote(str(workspace_id), safe=""), + model_id=quote(str(model_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CustomModelList | Error | None: + if response.status_code == 200: + response_200 = CustomModelList.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CustomModelList | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[CustomModelList | Error]: + """List the adapters attached to a shared base + + Preview. Every adapter on the base, oldest first, including those + that failed or are being deleted. Each reports the base's GPU and + replica fields. + + Args: + workspace_id (str): + model_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomModelList | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + model_id=model_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, +) -> CustomModelList | Error | None: + """List the adapters attached to a shared base + + Preview. Every adapter on the base, oldest first, including those + that failed or are being deleted. Each reports the base's GPU and + replica fields. + + Args: + workspace_id (str): + model_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomModelList | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + model_id=model_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[CustomModelList | Error]: + """List the adapters attached to a shared base + + Preview. Every adapter on the base, oldest first, including those + that failed or are being deleted. Each reports the base's GPU and + replica fields. + + Args: + workspace_id (str): + model_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CustomModelList | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + model_id=model_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + model_id: str, + *, + client: AuthenticatedClient | Client, +) -> CustomModelList | Error | None: + """List the adapters attached to a shared base + + Preview. Every adapter on the base, oldest first, including those + that failed or are being deleted. Each reports the base's GPU and + replica fields. + + Args: + workspace_id (str): + model_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CustomModelList | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + model_id=model_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/custom_models/list_custom_models.py b/src/graphn/_generated/api/custom_models/list_custom_models.py index 91badcd..3d45ddd 100644 --- a/src/graphn/_generated/api/custom_models/list_custom_models.py +++ b/src/graphn/_generated/api/custom_models/list_custom_models.py @@ -8,6 +8,7 @@ from ...client import AuthenticatedClient, Client from ...models.custom_model_list import CustomModelList from ...models.error import Error +from ...models.list_custom_models_include import ListCustomModelsInclude from ...types import UNSET, Response, Unset @@ -16,6 +17,7 @@ def _get_kwargs( *, limit: int | Unset = 50, continue_token: str | Unset = UNSET, + include: ListCustomModelsInclude | Unset = UNSET, ) -> dict[str, Any]: params: dict[str, Any] = {} @@ -24,6 +26,12 @@ def _get_kwargs( params["continue_token"] = continue_token + json_include: str | Unset = UNSET + if not isinstance(include, Unset): + json_include = include.value + + params["include"] = json_include + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} _kwargs: dict[str, Any] = { @@ -45,6 +53,11 @@ def _parse_response( return response_200 + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + if response.status_code == 401: response_401 = Error.from_dict(response.json()) @@ -78,6 +91,7 @@ def sync_detailed( client: AuthenticatedClient | Client, limit: int | Unset = 50, continue_token: str | Unset = UNSET, + include: ListCustomModelsInclude | Unset = UNSET, ) -> Response[CustomModelList | Error]: """List custom models in a workspace @@ -85,6 +99,7 @@ def sync_detailed( workspace_id (str): limit (int | Unset): Default: 50. continue_token (str | Unset): + include (ListCustomModelsInclude | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -98,6 +113,7 @@ def sync_detailed( workspace_id=workspace_id, limit=limit, continue_token=continue_token, + include=include, ) response = client.get_httpx_client().request( @@ -113,6 +129,7 @@ def sync( client: AuthenticatedClient | Client, limit: int | Unset = 50, continue_token: str | Unset = UNSET, + include: ListCustomModelsInclude | Unset = UNSET, ) -> CustomModelList | Error | None: """List custom models in a workspace @@ -120,6 +137,7 @@ def sync( workspace_id (str): limit (int | Unset): Default: 50. continue_token (str | Unset): + include (ListCustomModelsInclude | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -134,6 +152,7 @@ def sync( client=client, limit=limit, continue_token=continue_token, + include=include, ).parsed @@ -143,6 +162,7 @@ async def asyncio_detailed( client: AuthenticatedClient | Client, limit: int | Unset = 50, continue_token: str | Unset = UNSET, + include: ListCustomModelsInclude | Unset = UNSET, ) -> Response[CustomModelList | Error]: """List custom models in a workspace @@ -150,6 +170,7 @@ async def asyncio_detailed( workspace_id (str): limit (int | Unset): Default: 50. continue_token (str | Unset): + include (ListCustomModelsInclude | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -163,6 +184,7 @@ async def asyncio_detailed( workspace_id=workspace_id, limit=limit, continue_token=continue_token, + include=include, ) response = await client.get_async_httpx_client().request(**kwargs) @@ -176,6 +198,7 @@ async def asyncio( client: AuthenticatedClient | Client, limit: int | Unset = 50, continue_token: str | Unset = UNSET, + include: ListCustomModelsInclude | Unset = UNSET, ) -> CustomModelList | Error | None: """List custom models in a workspace @@ -183,6 +206,7 @@ async def asyncio( workspace_id (str): limit (int | Unset): Default: 50. continue_token (str | Unset): + include (ListCustomModelsInclude | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -198,5 +222,6 @@ async def asyncio( client=client, limit=limit, continue_token=continue_token, + include=include, ) ).parsed diff --git a/src/graphn/_generated/api/custom_models/refresh_custom_model.py b/src/graphn/_generated/api/custom_models/refresh_custom_model.py index f9e1048..84c707b 100644 --- a/src/graphn/_generated/api/custom_models/refresh_custom_model.py +++ b/src/graphn/_generated/api/custom_models/refresh_custom_model.py @@ -50,6 +50,11 @@ def _parse_response( return response_404 + if response.status_code == 422: + response_422 = Error.from_dict(response.json()) + + return response_422 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: @@ -80,6 +85,9 @@ def sync_detailed( updated. The returned record may include refreshed `endpoint`, `status`, and `error_message` fields. + An adapter has no deployment of its own: refreshing one is refused + with `422 ADAPTER_REFRESH_UNSUPPORTED`; refresh its base instead. + Args: workspace_id (str): model_id (str): @@ -117,6 +125,9 @@ def sync( updated. The returned record may include refreshed `endpoint`, `status`, and `error_message` fields. + An adapter has no deployment of its own: refreshing one is refused + with `422 ADAPTER_REFRESH_UNSUPPORTED`; refresh its base instead. + Args: workspace_id (str): model_id (str): @@ -149,6 +160,9 @@ async def asyncio_detailed( updated. The returned record may include refreshed `endpoint`, `status`, and `error_message` fields. + An adapter has no deployment of its own: refreshing one is refused + with `422 ADAPTER_REFRESH_UNSUPPORTED`; refresh its base instead. + Args: workspace_id (str): model_id (str): @@ -184,6 +198,9 @@ async def asyncio( updated. The returned record may include refreshed `endpoint`, `status`, and `error_message` fields. + An adapter has no deployment of its own: refreshing one is refused + with `422 ADAPTER_REFRESH_UNSUPPORTED`; refresh its base instead. + Args: workspace_id (str): model_id (str): diff --git a/src/graphn/_generated/api/custom_models/update_custom_model.py b/src/graphn/_generated/api/custom_models/update_custom_model.py index d56a354..ba283d2 100644 --- a/src/graphn/_generated/api/custom_models/update_custom_model.py +++ b/src/graphn/_generated/api/custom_models/update_custom_model.py @@ -64,6 +64,11 @@ def _parse_response( return response_404 + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: @@ -107,6 +112,9 @@ def sync_detailed( Other fields update the model record only and take effect on the next deployment. + On an adapter only `name` is accepted; its replicas are its base's. + An adapter being deleted is refused with `409`. + Args: workspace_id (str): model_id (str): @@ -167,6 +175,9 @@ def sync( Other fields update the model record only and take effect on the next deployment. + On an adapter only `name` is accepted; its replicas are its base's. + An adapter being deleted is refused with `409`. + Args: workspace_id (str): model_id (str): @@ -222,6 +233,9 @@ async def asyncio_detailed( Other fields update the model record only and take effect on the next deployment. + On an adapter only `name` is accepted; its replicas are its base's. + An adapter being deleted is refused with `409`. + Args: workspace_id (str): model_id (str): @@ -280,6 +294,9 @@ async def asyncio( Other fields update the model record only and take effect on the next deployment. + On an adapter only `name` is accepted; its replicas are its base's. + An adapter being deleted is refused with `409`. + Args: workspace_id (str): model_id (str): diff --git a/src/graphn/_generated/api/custom_models/wake_custom_model.py b/src/graphn/_generated/api/custom_models/wake_custom_model.py index e16da94..259b809 100644 --- a/src/graphn/_generated/api/custom_models/wake_custom_model.py +++ b/src/graphn/_generated/api/custom_models/wake_custom_model.py @@ -50,6 +50,11 @@ def _parse_response( return response_404 + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + if response.status_code == 422: response_422 = Error.from_dict(response.json()) @@ -78,14 +83,20 @@ def sync_detailed( *, client: AuthenticatedClient | Client, ) -> Response[CustomModel | Error]: - r"""Wake a scaled-to-zero custom model + """Wake a scaled-to-zero custom model Custom models scale to zero replicas after `cooldown_seconds` of inactivity. Calling `wake` brings the deployment back up to its configured `min_replicas` (or 1 if `min_replicas` is 0). Returns - immediately; poll `getCustomModel` until `status: \"ready\"` and a + immediately; poll `getCustomModel` until `status: "ready"` and a non-empty `endpoint`. + Preview: waking an adapter wakes its shared base; the response is + the adapter, with its base's replica fields. Only a `ready` adapter wakes its base; any + other, or one whose base is failed, deleting or has serving turned + off, is refused with `409 NOT_SERVING`. `403 OWNER_NOT_ACTIVE` means + the base's owner is suspended or being deleted. + Args: workspace_id (str): model_id (str): @@ -116,14 +127,20 @@ def sync( *, client: AuthenticatedClient | Client, ) -> CustomModel | Error | None: - r"""Wake a scaled-to-zero custom model + """Wake a scaled-to-zero custom model Custom models scale to zero replicas after `cooldown_seconds` of inactivity. Calling `wake` brings the deployment back up to its configured `min_replicas` (or 1 if `min_replicas` is 0). Returns - immediately; poll `getCustomModel` until `status: \"ready\"` and a + immediately; poll `getCustomModel` until `status: "ready"` and a non-empty `endpoint`. + Preview: waking an adapter wakes its shared base; the response is + the adapter, with its base's replica fields. Only a `ready` adapter wakes its base; any + other, or one whose base is failed, deleting or has serving turned + off, is refused with `409 NOT_SERVING`. `403 OWNER_NOT_ACTIVE` means + the base's owner is suspended or being deleted. + Args: workspace_id (str): model_id (str): @@ -149,14 +166,20 @@ async def asyncio_detailed( *, client: AuthenticatedClient | Client, ) -> Response[CustomModel | Error]: - r"""Wake a scaled-to-zero custom model + """Wake a scaled-to-zero custom model Custom models scale to zero replicas after `cooldown_seconds` of inactivity. Calling `wake` brings the deployment back up to its configured `min_replicas` (or 1 if `min_replicas` is 0). Returns - immediately; poll `getCustomModel` until `status: \"ready\"` and a + immediately; poll `getCustomModel` until `status: "ready"` and a non-empty `endpoint`. + Preview: waking an adapter wakes its shared base; the response is + the adapter, with its base's replica fields. Only a `ready` adapter wakes its base; any + other, or one whose base is failed, deleting or has serving turned + off, is refused with `409 NOT_SERVING`. `403 OWNER_NOT_ACTIVE` means + the base's owner is suspended or being deleted. + Args: workspace_id (str): model_id (str): @@ -185,14 +208,20 @@ async def asyncio( *, client: AuthenticatedClient | Client, ) -> CustomModel | Error | None: - r"""Wake a scaled-to-zero custom model + """Wake a scaled-to-zero custom model Custom models scale to zero replicas after `cooldown_seconds` of inactivity. Calling `wake` brings the deployment back up to its configured `min_replicas` (or 1 if `min_replicas` is 0). Returns - immediately; poll `getCustomModel` until `status: \"ready\"` and a + immediately; poll `getCustomModel` until `status: "ready"` and a non-empty `endpoint`. + Preview: waking an adapter wakes its shared base; the response is + the adapter, with its base's replica fields. Only a `ready` adapter wakes its base; any + other, or one whose base is failed, deleting or has serving turned + off, is refused with `409 NOT_SERVING`. `403 OWNER_NOT_ACTIVE` means + the base's owner is suspended or being deleted. + Args: workspace_id (str): model_id (str): diff --git a/src/graphn/_generated/api/inference_routers/__init__.py b/src/graphn/_generated/api/inference_routers/__init__.py new file mode 100644 index 0000000..2d7c0b2 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/__init__.py @@ -0,0 +1 @@ +"""Contains endpoint functions for accessing the API""" diff --git a/src/graphn/_generated/api/inference_routers/create_inference_router.py b/src/graphn/_generated/api/inference_routers/create_inference_router.py new file mode 100644 index 0000000..a275214 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/create_inference_router.py @@ -0,0 +1,197 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router import InferenceRouter +from ...models.inference_router_create import InferenceRouterCreate +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + *, + body: InferenceRouterCreate, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/inference-routers".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouter | None: + if response.status_code == 201: + response_201 = InferenceRouter.from_dict(response.json()) + + return response_201 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouter]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterCreate, +) -> Response[Error | InferenceRouter]: + """Create an inference router draft + + Args: + workspace_id (str): + body (InferenceRouterCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterCreate, +) -> Error | InferenceRouter | None: + """Create an inference router draft + + Args: + workspace_id (str): + body (InferenceRouterCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterCreate, +) -> Response[Error | InferenceRouter]: + """Create an inference router draft + + Args: + workspace_id (str): + body (InferenceRouterCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterCreate, +) -> Error | InferenceRouter | None: + """Create an inference router draft + + Args: + workspace_id (str): + body (InferenceRouterCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/create_inference_router_lane.py b/src/graphn/_generated/api/inference_routers/create_inference_router_lane.py new file mode 100644 index 0000000..612af58 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/create_inference_router_lane.py @@ -0,0 +1,203 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_lane import InferenceRouterLane +from ...models.inference_router_lane_create import InferenceRouterLaneCreate +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + *, + body: InferenceRouterLaneCreate, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/inference-router-lanes".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterLane | None: + if response.status_code == 201: + response_201 = InferenceRouterLane.from_dict(response.json()) + + return response_201 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterLane]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneCreate, +) -> Response[Error | InferenceRouterLane]: + """Create a workspace custom router lane + + A custom lane is a list of literal phrases, matched case-insensitively on word boundaries. + Candidates in this workspace's routers reference it as `custom:`. Lanes are visible only inside + their own workspace. + + Args: + workspace_id (str): + body (InferenceRouterLaneCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneCreate, +) -> Error | InferenceRouterLane | None: + """Create a workspace custom router lane + + A custom lane is a list of literal phrases, matched case-insensitively on word boundaries. + Candidates in this workspace's routers reference it as `custom:`. Lanes are visible only inside + their own workspace. + + Args: + workspace_id (str): + body (InferenceRouterLaneCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneCreate, +) -> Response[Error | InferenceRouterLane]: + """Create a workspace custom router lane + + A custom lane is a list of literal phrases, matched case-insensitively on word boundaries. + Candidates in this workspace's routers reference it as `custom:`. Lanes are visible only inside + their own workspace. + + Args: + workspace_id (str): + body (InferenceRouterLaneCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneCreate, +) -> Error | InferenceRouterLane | None: + """Create a workspace custom router lane + + A custom lane is a list of literal phrases, matched case-insensitively on word boundaries. + Candidates in this workspace's routers reference it as `custom:`. Lanes are visible only inside + their own workspace. + + Args: + workspace_id (str): + body (InferenceRouterLaneCreate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/delete_inference_router.py b/src/graphn/_generated/api/inference_routers/delete_inference_router.py new file mode 100644 index 0000000..c91a787 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/delete_inference_router.py @@ -0,0 +1,173 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + router_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/v1/{workspace_id}/inference-routers/{router_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | Error | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Delete a workspace inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Delete a workspace inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Delete a workspace inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Delete a workspace inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/delete_inference_router_lane.py b/src/graphn/_generated/api/inference_routers/delete_inference_router_lane.py new file mode 100644 index 0000000..814d5c9 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/delete_inference_router_lane.py @@ -0,0 +1,190 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + lane_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/v1/{workspace_id}/inference-router-lanes/{lane_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + lane_id=quote(str(lane_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | Error | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Delete a workspace custom router lane + + Refused with 409 while any router's draft, pending, active, or still-draining previous revision + references the lane (see `used_by`), including a router save that commits during the delete. + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Delete a workspace custom router lane + + Refused with 409 while any router's draft, pending, active, or still-draining previous revision + references the lane (see `used_by`), including a router save that commits during the delete. + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Any | Error]: + """Delete a workspace custom router lane + + Refused with 409 while any router's draft, pending, active, or still-draining previous revision + references the lane (see `used_by`), including a router save that commits during the delete. + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Any | Error | None: + """Delete a workspace custom router lane + + Refused with 409 while any router's draft, pending, active, or still-draining previous revision + references the lane (see `used_by`), including a router save that commits during the delete. + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/get_inference_router.py b/src/graphn/_generated/api/inference_routers/get_inference_router.py new file mode 100644 index 0000000..e0b5db7 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/get_inference_router.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router import InferenceRouter +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + router_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/inference-routers/{router_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouter | None: + if response.status_code == 200: + response_200 = InferenceRouter.from_dict(response.json()) + + return response_200 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouter]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouter]: + """Get an inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouter | None: + """Get an inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouter]: + """Get an inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouter | None: + """Get an inference router + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/get_inference_router_analytics.py b/src/graphn/_generated/api/inference_routers/get_inference_router_analytics.py new file mode 100644 index 0000000..ced1604 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/get_inference_router_analytics.py @@ -0,0 +1,258 @@ +import datetime +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.get_inference_router_analytics_interval import ( + GetInferenceRouterAnalyticsInterval, +) +from ...models.inference_router_analytics import InferenceRouterAnalytics +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + workspace_id: str, + router_id: str, + *, + start_time: datetime.datetime, + end_time: datetime.datetime, + interval: GetInferenceRouterAnalyticsInterval + | Unset = GetInferenceRouterAnalyticsInterval.DAY, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + json_start_time = start_time.isoformat() + params["start_time"] = json_start_time + + json_end_time = end_time.isoformat() + params["end_time"] = json_end_time + + json_interval: str | Unset = UNSET + if not isinstance(interval, Unset): + json_interval = interval.value + + params["interval"] = json_interval + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/inference-routers/{router_id}/analytics".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterAnalytics | None: + if response.status_code == 200: + response_200 = InferenceRouterAnalytics.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterAnalytics]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + start_time: datetime.datetime, + end_time: datetime.datetime, + interval: GetInferenceRouterAnalyticsInterval + | Unset = GetInferenceRouterAnalyticsInterval.DAY, +) -> Response[Error | InferenceRouterAnalytics]: + """Get router usage analytics + + Available only when inference-router analytics is enabled for the deployment. + + Args: + workspace_id (str): + router_id (str): + start_time (datetime.datetime): + end_time (datetime.datetime): + interval (GetInferenceRouterAnalyticsInterval | Unset): Default: + GetInferenceRouterAnalyticsInterval.DAY. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterAnalytics] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + start_time=start_time, + end_time=end_time, + interval=interval, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + start_time: datetime.datetime, + end_time: datetime.datetime, + interval: GetInferenceRouterAnalyticsInterval + | Unset = GetInferenceRouterAnalyticsInterval.DAY, +) -> Error | InferenceRouterAnalytics | None: + """Get router usage analytics + + Available only when inference-router analytics is enabled for the deployment. + + Args: + workspace_id (str): + router_id (str): + start_time (datetime.datetime): + end_time (datetime.datetime): + interval (GetInferenceRouterAnalyticsInterval | Unset): Default: + GetInferenceRouterAnalyticsInterval.DAY. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterAnalytics + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + start_time=start_time, + end_time=end_time, + interval=interval, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + start_time: datetime.datetime, + end_time: datetime.datetime, + interval: GetInferenceRouterAnalyticsInterval + | Unset = GetInferenceRouterAnalyticsInterval.DAY, +) -> Response[Error | InferenceRouterAnalytics]: + """Get router usage analytics + + Available only when inference-router analytics is enabled for the deployment. + + Args: + workspace_id (str): + router_id (str): + start_time (datetime.datetime): + end_time (datetime.datetime): + interval (GetInferenceRouterAnalyticsInterval | Unset): Default: + GetInferenceRouterAnalyticsInterval.DAY. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterAnalytics] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + start_time=start_time, + end_time=end_time, + interval=interval, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + start_time: datetime.datetime, + end_time: datetime.datetime, + interval: GetInferenceRouterAnalyticsInterval + | Unset = GetInferenceRouterAnalyticsInterval.DAY, +) -> Error | InferenceRouterAnalytics | None: + """Get router usage analytics + + Available only when inference-router analytics is enabled for the deployment. + + Args: + workspace_id (str): + router_id (str): + start_time (datetime.datetime): + end_time (datetime.datetime): + interval (GetInferenceRouterAnalyticsInterval | Unset): Default: + GetInferenceRouterAnalyticsInterval.DAY. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterAnalytics + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + start_time=start_time, + end_time=end_time, + interval=interval, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/get_inference_router_lane.py b/src/graphn/_generated/api/inference_routers/get_inference_router_lane.py new file mode 100644 index 0000000..1c18ca0 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/get_inference_router_lane.py @@ -0,0 +1,175 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_lane import InferenceRouterLane +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + lane_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/inference-router-lanes/{lane_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + lane_id=quote(str(lane_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterLane | None: + if response.status_code == 200: + response_200 = InferenceRouterLane.from_dict(response.json()) + + return response_200 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterLane]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterLane]: + """Get a workspace custom router lane + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterLane | None: + """Get a workspace custom router lane + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return sync_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterLane]: + """Get a workspace custom router lane + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterLane | None: + """Get a workspace custom router lane + + Args: + workspace_id (str): + lane_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/list_inference_router_lanes.py b/src/graphn/_generated/api/inference_routers/list_inference_router_lanes.py new file mode 100644 index 0000000..84439ee --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/list_inference_router_lanes.py @@ -0,0 +1,161 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_lane_list import InferenceRouterLaneList +from ...types import Response + + +def _get_kwargs( + workspace_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/inference-router-lanes".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterLaneList | None: + if response.status_code == 200: + response_200 = InferenceRouterLaneList.from_dict(response.json()) + + return response_200 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterLaneList]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterLaneList]: + """List workspace custom router lanes + + Args: + workspace_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLaneList] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterLaneList | None: + """List workspace custom router lanes + + Args: + workspace_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLaneList + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterLaneList]: + """List workspace custom router lanes + + Args: + workspace_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLaneList] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterLaneList | None: + """List workspace custom router lanes + + Args: + workspace_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLaneList + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/list_inference_routers.py b/src/graphn/_generated/api/inference_routers/list_inference_routers.py new file mode 100644 index 0000000..3f61112 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/list_inference_routers.py @@ -0,0 +1,202 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_list import InferenceRouterList +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + workspace_id: str, + *, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["limit"] = limit + + params["continue_token"] = continue_token + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/inference-routers".format( + workspace_id=quote(str(workspace_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterList | None: + if response.status_code == 200: + response_200 = InferenceRouterList.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterList]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Response[Error | InferenceRouterList]: + """List workspace and platform inference routers + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterList] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + limit=limit, + continue_token=continue_token, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Error | InferenceRouterList | None: + """List workspace and platform inference routers + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterList + """ + + return sync_detailed( + workspace_id=workspace_id, + client=client, + limit=limit, + continue_token=continue_token, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Response[Error | InferenceRouterList]: + """List workspace and platform inference routers + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterList] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + limit=limit, + continue_token=continue_token, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 50, + continue_token: str | Unset = UNSET, +) -> Error | InferenceRouterList | None: + """List workspace and platform inference routers + + Args: + workspace_id (str): + limit (int | Unset): Default: 50. + continue_token (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterList + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + client=client, + limit=limit, + continue_token=continue_token, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/publish_inference_router.py b/src/graphn/_generated/api/inference_routers/publish_inference_router.py new file mode 100644 index 0000000..8cd5db0 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/publish_inference_router.py @@ -0,0 +1,214 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router import InferenceRouter +from ...models.publish_inference_router_body import PublishInferenceRouterBody +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + router_id: str, + *, + body: PublishInferenceRouterBody, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/inference-routers/{router_id}/publish".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouter | None: + if response.status_code == 202: + response_202 = InferenceRouter.from_dict(response.json()) + + return response_202 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouter]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: PublishInferenceRouterBody, +) -> Response[Error | InferenceRouter]: + """Submit a draft revision for controller activation + + The existing active revision remains routable until acknowledgement. + + Args: + workspace_id (str): + router_id (str): + body (PublishInferenceRouterBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: PublishInferenceRouterBody, +) -> Error | InferenceRouter | None: + """Submit a draft revision for controller activation + + The existing active revision remains routable until acknowledgement. + + Args: + workspace_id (str): + router_id (str): + body (PublishInferenceRouterBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: PublishInferenceRouterBody, +) -> Response[Error | InferenceRouter]: + """Submit a draft revision for controller activation + + The existing active revision remains routable until acknowledgement. + + Args: + workspace_id (str): + router_id (str): + body (PublishInferenceRouterBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: PublishInferenceRouterBody, +) -> Error | InferenceRouter | None: + """Submit a draft revision for controller activation + + The existing active revision remains routable until acknowledgement. + + Args: + workspace_id (str): + router_id (str): + body (PublishInferenceRouterBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/update_inference_router.py b/src/graphn/_generated/api/inference_routers/update_inference_router.py new file mode 100644 index 0000000..73c6b6b --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/update_inference_router.py @@ -0,0 +1,206 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router import InferenceRouter +from ...models.inference_router_update import InferenceRouterUpdate +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + router_id: str, + *, + body: InferenceRouterUpdate, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/v1/{workspace_id}/inference-routers/{router_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouter | None: + if response.status_code == 200: + response_200 = InferenceRouter.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouter]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterUpdate, +) -> Response[Error | InferenceRouter]: + """Create a new immutable draft revision + + Args: + workspace_id (str): + router_id (str): + body (InferenceRouterUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterUpdate, +) -> Error | InferenceRouter | None: + """Create a new immutable draft revision + + Args: + workspace_id (str): + router_id (str): + body (InferenceRouterUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterUpdate, +) -> Response[Error | InferenceRouter]: + """Create a new immutable draft revision + + Args: + workspace_id (str): + router_id (str): + body (InferenceRouterUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouter] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterUpdate, +) -> Error | InferenceRouter | None: + """Create a new immutable draft revision + + Args: + workspace_id (str): + router_id (str): + body (InferenceRouterUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouter + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/update_inference_router_lane.py b/src/graphn/_generated/api/inference_routers/update_inference_router_lane.py new file mode 100644 index 0000000..54a3084 --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/update_inference_router_lane.py @@ -0,0 +1,218 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_lane import InferenceRouterLane +from ...models.inference_router_lane_update import InferenceRouterLaneUpdate +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + lane_id: str, + *, + body: InferenceRouterLaneUpdate, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/v1/{workspace_id}/inference-router-lanes/{lane_id}".format( + workspace_id=quote(str(workspace_id), safe=""), + lane_id=quote(str(lane_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterLane | None: + if response.status_code == 200: + response_200 = InferenceRouterLane.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if response.status_code == 409: + response_409 = Error.from_dict(response.json()) + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterLane]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneUpdate, +) -> Response[Error | InferenceRouterLane]: + """Update a workspace custom router lane + + Published router revisions keep the lane definition they were saved with; republish a router to + apply the change to it. + + Args: + workspace_id (str): + lane_id (str): + body (InferenceRouterLaneUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneUpdate, +) -> Error | InferenceRouterLane | None: + """Update a workspace custom router lane + + Published router revisions keep the lane definition they were saved with; republish a router to + apply the change to it. + + Args: + workspace_id (str): + lane_id (str): + body (InferenceRouterLaneUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return sync_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneUpdate, +) -> Response[Error | InferenceRouterLane]: + """Update a workspace custom router lane + + Published router revisions keep the lane definition they were saved with; republish a router to + apply the change to it. + + Args: + workspace_id (str): + lane_id (str): + body (InferenceRouterLaneUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterLane] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + lane_id=lane_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + lane_id: str, + *, + client: AuthenticatedClient | Client, + body: InferenceRouterLaneUpdate, +) -> Error | InferenceRouterLane | None: + """Update a workspace custom router lane + + Published router revisions keep the lane definition they were saved with; republish a router to + apply the change to it. + + Args: + workspace_id (str): + lane_id (str): + body (InferenceRouterLaneUpdate): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterLane + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + lane_id=lane_id, + client=client, + body=body, + ) + ).parsed diff --git a/src/graphn/_generated/api/inference_routers/validate_inference_router.py b/src/graphn/_generated/api/inference_routers/validate_inference_router.py new file mode 100644 index 0000000..248af7c --- /dev/null +++ b/src/graphn/_generated/api/inference_routers/validate_inference_router.py @@ -0,0 +1,180 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error import Error +from ...models.inference_router_validation import InferenceRouterValidation +from ...types import Response + + +def _get_kwargs( + workspace_id: str, + router_id: str, +) -> dict[str, Any]: + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/{workspace_id}/inference-routers/{router_id}/validate".format( + workspace_id=quote(str(workspace_id), safe=""), + router_id=quote(str(router_id), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Error | InferenceRouterValidation | None: + if response.status_code == 200: + response_200 = InferenceRouterValidation.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Error | InferenceRouterValidation]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterValidation]: + """Validate the current draft and derive its target manifest + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterValidation] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterValidation | None: + """Validate the current draft and derive its target manifest + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterValidation + """ + + return sync_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Response[Error | InferenceRouterValidation]: + """Validate the current draft and derive its target manifest + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Error | InferenceRouterValidation] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + router_id=router_id, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + router_id: str, + *, + client: AuthenticatedClient | Client, +) -> Error | InferenceRouterValidation | None: + """Validate the current draft and derive its target manifest + + Args: + workspace_id (str): + router_id (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Error | InferenceRouterValidation + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + router_id=router_id, + client=client, + ) + ).parsed diff --git a/src/graphn/_generated/api/invitations/accept_invitation.py b/src/graphn/_generated/api/invitations/accept_invitation.py index 02702ed..9ecdc91 100644 --- a/src/graphn/_generated/api/invitations/accept_invitation.py +++ b/src/graphn/_generated/api/invitations/accept_invitation.py @@ -77,6 +77,10 @@ def sync_detailed( ) -> Response[Error | InvitationAcceptResult]: """Accept an invitation + Requires a signed-in user session whose verified email matches the invitation (case-insensitive). + API keys, builder-session tokens, anonymous sessions and accounts without a verified email get 403; + a mismatched email gets 404. Decline applies the same rule. + Args: token (str): @@ -106,6 +110,10 @@ def sync( ) -> Error | InvitationAcceptResult | None: """Accept an invitation + Requires a signed-in user session whose verified email matches the invitation (case-insensitive). + API keys, builder-session tokens, anonymous sessions and accounts without a verified email get 403; + a mismatched email gets 404. Decline applies the same rule. + Args: token (str): @@ -130,6 +138,10 @@ async def asyncio_detailed( ) -> Response[Error | InvitationAcceptResult]: """Accept an invitation + Requires a signed-in user session whose verified email matches the invitation (case-insensitive). + API keys, builder-session tokens, anonymous sessions and accounts without a verified email get 403; + a mismatched email gets 404. Decline applies the same rule. + Args: token (str): @@ -157,6 +169,10 @@ async def asyncio( ) -> Error | InvitationAcceptResult | None: """Accept an invitation + Requires a signed-in user session whose verified email matches the invitation (case-insensitive). + API keys, builder-session tokens, anonymous sessions and accounts without a verified email get 403; + a mismatched email gets 404. Decline applies the same rule. + Args: token (str): diff --git a/src/graphn/_generated/api/invitations/list_my_invitations.py b/src/graphn/_generated/api/invitations/list_my_invitations.py index 2865ccc..80e338b 100644 --- a/src/graphn/_generated/api/invitations/list_my_invitations.py +++ b/src/graphn/_generated/api/invitations/list_my_invitations.py @@ -66,6 +66,9 @@ def sync_detailed( ) -> Response[Error | InvitationList]: """List invitations for the authenticated user + Requires a signed-in user session with a verified email. API keys, builder-session tokens, anonymous + sessions and accounts without a verified email get 403. + Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. @@ -89,6 +92,9 @@ def sync( ) -> Error | InvitationList | None: """List invitations for the authenticated user + Requires a signed-in user session with a verified email. API keys, builder-session tokens, anonymous + sessions and accounts without a verified email get 403. + Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. @@ -108,6 +114,9 @@ async def asyncio_detailed( ) -> Response[Error | InvitationList]: """List invitations for the authenticated user + Requires a signed-in user session with a verified email. API keys, builder-session tokens, anonymous + sessions and accounts without a verified email get 403. + Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. @@ -129,6 +138,9 @@ async def asyncio( ) -> Error | InvitationList | None: """List invitations for the authenticated user + Requires a signed-in user session with a verified email. API keys, builder-session tokens, anonymous + sessions and accounts without a verified email get 403. + Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. diff --git a/src/graphn/_generated/api/knowledgebases/get_knowledgebase_document_media.py b/src/graphn/_generated/api/knowledgebases/get_knowledgebase_document_media.py new file mode 100644 index 0000000..0539707 --- /dev/null +++ b/src/graphn/_generated/api/knowledgebases/get_knowledgebase_document_media.py @@ -0,0 +1,225 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.document_media import DocumentMedia +from ...models.error import Error +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + workspace_id: str, + kb_id: str, + doc_id: str, + *, + index: int | Unset = 0, +) -> dict[str, Any]: + + params: dict[str, Any] = {} + + params["index"] = index + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/{workspace_id}/knowledgebases/{kb_id}/documents/{doc_id}/media".format( + workspace_id=quote(str(workspace_id), safe=""), + kb_id=quote(str(kb_id), safe=""), + doc_id=quote(str(doc_id), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DocumentMedia | Error | None: + if response.status_code == 200: + response_200 = DocumentMedia.from_dict(response.json()) + + return response_200 + + if response.status_code == 400: + response_400 = Error.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = Error.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = Error.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = Error.from_dict(response.json()) + + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DocumentMedia | Error]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + workspace_id: str, + kb_id: str, + doc_id: str, + *, + client: AuthenticatedClient | Client, + index: int | Unset = 0, +) -> Response[DocumentMedia | Error]: + """Mint a fresh playable URL for document media + + Args: + workspace_id (str): + kb_id (str): + doc_id (str): + index (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DocumentMedia | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + kb_id=kb_id, + doc_id=doc_id, + index=index, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + workspace_id: str, + kb_id: str, + doc_id: str, + *, + client: AuthenticatedClient | Client, + index: int | Unset = 0, +) -> DocumentMedia | Error | None: + """Mint a fresh playable URL for document media + + Args: + workspace_id (str): + kb_id (str): + doc_id (str): + index (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DocumentMedia | Error + """ + + return sync_detailed( + workspace_id=workspace_id, + kb_id=kb_id, + doc_id=doc_id, + client=client, + index=index, + ).parsed + + +async def asyncio_detailed( + workspace_id: str, + kb_id: str, + doc_id: str, + *, + client: AuthenticatedClient | Client, + index: int | Unset = 0, +) -> Response[DocumentMedia | Error]: + """Mint a fresh playable URL for document media + + Args: + workspace_id (str): + kb_id (str): + doc_id (str): + index (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DocumentMedia | Error] + """ + + kwargs = _get_kwargs( + workspace_id=workspace_id, + kb_id=kb_id, + doc_id=doc_id, + index=index, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + workspace_id: str, + kb_id: str, + doc_id: str, + *, + client: AuthenticatedClient | Client, + index: int | Unset = 0, +) -> DocumentMedia | Error | None: + """Mint a fresh playable URL for document media + + Args: + workspace_id (str): + kb_id (str): + doc_id (str): + index (int | Unset): Default: 0. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DocumentMedia | Error + """ + + return ( + await asyncio_detailed( + workspace_id=workspace_id, + kb_id=kb_id, + doc_id=doc_id, + client=client, + index=index, + ) + ).parsed diff --git a/src/graphn/_generated/api/knowledgebases/list_knowledgebases.py b/src/graphn/_generated/api/knowledgebases/list_knowledgebases.py index 810d5f3..c142c6c 100644 --- a/src/graphn/_generated/api/knowledgebases/list_knowledgebases.py +++ b/src/graphn/_generated/api/knowledgebases/list_knowledgebases.py @@ -8,6 +8,10 @@ from ...client import AuthenticatedClient, Client from ...models.error import Error from ...models.knowledge_base import KnowledgeBase +from ...models.knowledge_base_list_response import KnowledgeBaseListResponse +from ...models.list_knowledgebases_order import ListKnowledgebasesOrder +from ...models.list_knowledgebases_sort import ListKnowledgebasesSort +from ...models.list_knowledgebases_status import ListKnowledgebasesStatus from ...types import UNSET, Response, Unset @@ -16,6 +20,10 @@ def _get_kwargs( *, limit: int | Unset = 50, cursor: str | Unset = UNSET, + q: str | Unset = UNSET, + status: ListKnowledgebasesStatus | Unset = UNSET, + sort: ListKnowledgebasesSort | Unset = ListKnowledgebasesSort.CREATED_AT, + order: ListKnowledgebasesOrder | Unset = ListKnowledgebasesOrder.DESC, ) -> dict[str, Any]: params: dict[str, Any] = {} @@ -24,6 +32,26 @@ def _get_kwargs( params["cursor"] = cursor + params["q"] = q + + json_status: str | Unset = UNSET + if not isinstance(status, Unset): + json_status = status.value + + params["status"] = json_status + + json_sort: str | Unset = UNSET + if not isinstance(sort, Unset): + json_sort = sort.value + + params["sort"] = json_sort + + json_order: str | Unset = UNSET + if not isinstance(order, Unset): + json_order = order.value + + params["order"] = json_order + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} _kwargs: dict[str, Any] = { @@ -39,14 +67,34 @@ def _get_kwargs( def _parse_response( *, client: AuthenticatedClient | Client, response: httpx.Response -) -> Error | list[KnowledgeBase] | None: +) -> Error | KnowledgeBaseListResponse | list[KnowledgeBase] | None: if response.status_code == 200: - response_200 = [] - _response_200 = response.json() - for response_200_item_data in _response_200: - response_200_item = KnowledgeBase.from_dict(response_200_item_data) - response_200.append(response_200_item) + def _parse_response_200( + data: object, + ) -> KnowledgeBaseListResponse | list[KnowledgeBase]: + try: + if not isinstance(data, list): + raise TypeError() + response_200_type_0 = [] + _response_200_type_0 = data + for response_200_type_0_item_data in _response_200_type_0: + response_200_type_0_item = KnowledgeBase.from_dict( + response_200_type_0_item_data + ) + + response_200_type_0.append(response_200_type_0_item) + + return response_200_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_200_type_1 = KnowledgeBaseListResponse.from_dict(data) + + return response_200_type_1 + + response_200 = _parse_response_200(response.json()) return response_200 @@ -73,7 +121,7 @@ def _parse_response( def _build_response( *, client: AuthenticatedClient | Client, response: httpx.Response -) -> Response[Error | list[KnowledgeBase]]: +) -> Response[Error | KnowledgeBaseListResponse | list[KnowledgeBase]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -88,29 +136,41 @@ def sync_detailed( client: AuthenticatedClient | Client, limit: int | Unset = 50, cursor: str | Unset = UNSET, -) -> Response[Error | list[KnowledgeBase]]: + q: str | Unset = UNSET, + status: ListKnowledgebasesStatus | Unset = UNSET, + sort: ListKnowledgebasesSort | Unset = ListKnowledgebasesSort.CREATED_AT, + order: ListKnowledgebasesOrder | Unset = ListKnowledgebasesOrder.DESC, +) -> Response[Error | KnowledgeBaseListResponse | list[KnowledgeBase]]: """List knowledge bases - Default response is a JSON array. When `cursor` is supplied the service may return a paginated - envelope instead. + Default response is a JSON array. When `cursor` or any filter/sort control + is supplied, the service returns a paginated envelope. Args: workspace_id (str): limit (int | Unset): Default: 50. cursor (str | Unset): + q (str | Unset): + status (ListKnowledgebasesStatus | Unset): + sort (ListKnowledgebasesSort | Unset): Default: ListKnowledgebasesSort.CREATED_AT. + order (ListKnowledgebasesOrder | Unset): Default: ListKnowledgebasesOrder.DESC. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Error | list[KnowledgeBase]] + Response[Error | KnowledgeBaseListResponse | list[KnowledgeBase]] """ kwargs = _get_kwargs( workspace_id=workspace_id, limit=limit, cursor=cursor, + q=q, + status=status, + sort=sort, + order=order, ) response = client.get_httpx_client().request( @@ -126,23 +186,31 @@ def sync( client: AuthenticatedClient | Client, limit: int | Unset = 50, cursor: str | Unset = UNSET, -) -> Error | list[KnowledgeBase] | None: + q: str | Unset = UNSET, + status: ListKnowledgebasesStatus | Unset = UNSET, + sort: ListKnowledgebasesSort | Unset = ListKnowledgebasesSort.CREATED_AT, + order: ListKnowledgebasesOrder | Unset = ListKnowledgebasesOrder.DESC, +) -> Error | KnowledgeBaseListResponse | list[KnowledgeBase] | None: """List knowledge bases - Default response is a JSON array. When `cursor` is supplied the service may return a paginated - envelope instead. + Default response is a JSON array. When `cursor` or any filter/sort control + is supplied, the service returns a paginated envelope. Args: workspace_id (str): limit (int | Unset): Default: 50. cursor (str | Unset): + q (str | Unset): + status (ListKnowledgebasesStatus | Unset): + sort (ListKnowledgebasesSort | Unset): Default: ListKnowledgebasesSort.CREATED_AT. + order (ListKnowledgebasesOrder | Unset): Default: ListKnowledgebasesOrder.DESC. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Error | list[KnowledgeBase] + Error | KnowledgeBaseListResponse | list[KnowledgeBase] """ return sync_detailed( @@ -150,6 +218,10 @@ def sync( client=client, limit=limit, cursor=cursor, + q=q, + status=status, + sort=sort, + order=order, ).parsed @@ -159,29 +231,41 @@ async def asyncio_detailed( client: AuthenticatedClient | Client, limit: int | Unset = 50, cursor: str | Unset = UNSET, -) -> Response[Error | list[KnowledgeBase]]: + q: str | Unset = UNSET, + status: ListKnowledgebasesStatus | Unset = UNSET, + sort: ListKnowledgebasesSort | Unset = ListKnowledgebasesSort.CREATED_AT, + order: ListKnowledgebasesOrder | Unset = ListKnowledgebasesOrder.DESC, +) -> Response[Error | KnowledgeBaseListResponse | list[KnowledgeBase]]: """List knowledge bases - Default response is a JSON array. When `cursor` is supplied the service may return a paginated - envelope instead. + Default response is a JSON array. When `cursor` or any filter/sort control + is supplied, the service returns a paginated envelope. Args: workspace_id (str): limit (int | Unset): Default: 50. cursor (str | Unset): + q (str | Unset): + status (ListKnowledgebasesStatus | Unset): + sort (ListKnowledgebasesSort | Unset): Default: ListKnowledgebasesSort.CREATED_AT. + order (ListKnowledgebasesOrder | Unset): Default: ListKnowledgebasesOrder.DESC. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Error | list[KnowledgeBase]] + Response[Error | KnowledgeBaseListResponse | list[KnowledgeBase]] """ kwargs = _get_kwargs( workspace_id=workspace_id, limit=limit, cursor=cursor, + q=q, + status=status, + sort=sort, + order=order, ) response = await client.get_async_httpx_client().request(**kwargs) @@ -195,23 +279,31 @@ async def asyncio( client: AuthenticatedClient | Client, limit: int | Unset = 50, cursor: str | Unset = UNSET, -) -> Error | list[KnowledgeBase] | None: + q: str | Unset = UNSET, + status: ListKnowledgebasesStatus | Unset = UNSET, + sort: ListKnowledgebasesSort | Unset = ListKnowledgebasesSort.CREATED_AT, + order: ListKnowledgebasesOrder | Unset = ListKnowledgebasesOrder.DESC, +) -> Error | KnowledgeBaseListResponse | list[KnowledgeBase] | None: """List knowledge bases - Default response is a JSON array. When `cursor` is supplied the service may return a paginated - envelope instead. + Default response is a JSON array. When `cursor` or any filter/sort control + is supplied, the service returns a paginated envelope. Args: workspace_id (str): limit (int | Unset): Default: 50. cursor (str | Unset): + q (str | Unset): + status (ListKnowledgebasesStatus | Unset): + sort (ListKnowledgebasesSort | Unset): Default: ListKnowledgebasesSort.CREATED_AT. + order (ListKnowledgebasesOrder | Unset): Default: ListKnowledgebasesOrder.DESC. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Error | list[KnowledgeBase] + Error | KnowledgeBaseListResponse | list[KnowledgeBase] """ return ( @@ -220,5 +312,9 @@ async def asyncio( client=client, limit=limit, cursor=cursor, + q=q, + status=status, + sort=sort, + order=order, ) ).parsed diff --git a/src/graphn/_generated/api/objects/post_object.py b/src/graphn/_generated/api/objects/post_object.py index fcdd9e9..d156891 100644 --- a/src/graphn/_generated/api/objects/post_object.py +++ b/src/graphn/_generated/api/objects/post_object.py @@ -125,12 +125,12 @@ def sync_detailed( upload_id: str | Unset = UNSET, part_number: int | Unset = UNSET, ) -> Response[Error | StoragePostResult]: - r"""MPU init/complete or mint a presigned URL + """MPU init/complete or mint a presigned URL Query-string dispatch: - `?uploads` — initiate multipart upload. - - `?uploadId=` — complete MPU. Body `{ \"parts\":[{\"part_number\":N,\"etag\":\"...\"}] }`. + - `?uploadId=` — complete MPU. Body `{ "parts":[{"part_number":N,"etag":"..."}] }`. - `?type=download&expires=SEC` — presigned GET. - `?type=upload&expires=&max-size=&content-type=` — presigned PUT. - `?type=upload_part&upload_id=&part_number=` — presigned MPU part. @@ -192,12 +192,12 @@ def sync( upload_id: str | Unset = UNSET, part_number: int | Unset = UNSET, ) -> Error | StoragePostResult | None: - r"""MPU init/complete or mint a presigned URL + """MPU init/complete or mint a presigned URL Query-string dispatch: - `?uploads` — initiate multipart upload. - - `?uploadId=` — complete MPU. Body `{ \"parts\":[{\"part_number\":N,\"etag\":\"...\"}] }`. + - `?uploadId=` — complete MPU. Body `{ "parts":[{"part_number":N,"etag":"..."}] }`. - `?type=download&expires=SEC` — presigned GET. - `?type=upload&expires=&max-size=&content-type=` — presigned PUT. - `?type=upload_part&upload_id=&part_number=` — presigned MPU part. @@ -254,12 +254,12 @@ async def asyncio_detailed( upload_id: str | Unset = UNSET, part_number: int | Unset = UNSET, ) -> Response[Error | StoragePostResult]: - r"""MPU init/complete or mint a presigned URL + """MPU init/complete or mint a presigned URL Query-string dispatch: - `?uploads` — initiate multipart upload. - - `?uploadId=` — complete MPU. Body `{ \"parts\":[{\"part_number\":N,\"etag\":\"...\"}] }`. + - `?uploadId=` — complete MPU. Body `{ "parts":[{"part_number":N,"etag":"..."}] }`. - `?type=download&expires=SEC` — presigned GET. - `?type=upload&expires=&max-size=&content-type=` — presigned PUT. - `?type=upload_part&upload_id=&part_number=` — presigned MPU part. @@ -319,12 +319,12 @@ async def asyncio( upload_id: str | Unset = UNSET, part_number: int | Unset = UNSET, ) -> Error | StoragePostResult | None: - r"""MPU init/complete or mint a presigned URL + """MPU init/complete or mint a presigned URL Query-string dispatch: - `?uploads` — initiate multipart upload. - - `?uploadId=` — complete MPU. Body `{ \"parts\":[{\"part_number\":N,\"etag\":\"...\"}] }`. + - `?uploadId=` — complete MPU. Body `{ "parts":[{"part_number":N,"etag":"..."}] }`. - `?type=download&expires=SEC` — presigned GET. - `?type=upload&expires=&max-size=&content-type=` — presigned PUT. - `?type=upload_part&upload_id=&part_number=` — presigned MPU part. diff --git a/src/graphn/_generated/client.py b/src/graphn/_generated/client.py index a5f74f6..08206ec 100644 --- a/src/graphn/_generated/client.py +++ b/src/graphn/_generated/client.py @@ -1,5 +1,5 @@ import ssl -from typing import Any +from typing import Any, Self import httpx from attrs import define, evolve, field @@ -73,7 +73,7 @@ def with_timeout(self, timeout: httpx.Timeout) -> "Client": self._async_client.timeout = timeout return evolve(self, timeout=timeout) - def set_httpx_client(self, client: httpx.Client) -> "Client": + def set_httpx_client(self, client: httpx.Client) -> Self: """Manually set the underlying httpx.Client **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. @@ -95,7 +95,7 @@ def get_httpx_client(self) -> httpx.Client: ) return self._client - def __enter__(self) -> "Client": + def __enter__(self) -> Self: """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" self.get_httpx_client().__enter__() return self @@ -104,7 +104,7 @@ def __exit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for internal httpx.Client (see httpx docs)""" self.get_httpx_client().__exit__(*args, **kwargs) - def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> "Client": + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> Self: """Manually set the underlying httpx.AsyncClient **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. @@ -126,7 +126,7 @@ def get_async_httpx_client(self) -> httpx.AsyncClient: ) return self._async_client - async def __aenter__(self) -> "Client": + async def __aenter__(self) -> Self: """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" await self.get_async_httpx_client().__aenter__() return self @@ -211,7 +211,7 @@ def with_timeout(self, timeout: httpx.Timeout) -> "AuthenticatedClient": self._async_client.timeout = timeout return evolve(self, timeout=timeout) - def set_httpx_client(self, client: httpx.Client) -> "AuthenticatedClient": + def set_httpx_client(self, client: httpx.Client) -> Self: """Manually set the underlying httpx.Client **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. @@ -236,7 +236,7 @@ def get_httpx_client(self) -> httpx.Client: ) return self._client - def __enter__(self) -> "AuthenticatedClient": + def __enter__(self) -> Self: """Enter a context manager for self.client—you cannot enter twice (see httpx docs)""" self.get_httpx_client().__enter__() return self @@ -245,9 +245,7 @@ def __exit__(self, *args: object, **kwargs: Any) -> None: """Exit a context manager for internal httpx.Client (see httpx docs)""" self.get_httpx_client().__exit__(*args, **kwargs) - def set_async_httpx_client( - self, async_client: httpx.AsyncClient - ) -> "AuthenticatedClient": + def set_async_httpx_client(self, async_client: httpx.AsyncClient) -> Self: """Manually set the underlying httpx.AsyncClient **NOTE**: This will override any other settings on the client, including cookies, headers, and timeout. @@ -272,7 +270,7 @@ def get_async_httpx_client(self) -> httpx.AsyncClient: ) return self._async_client - async def __aenter__(self) -> "AuthenticatedClient": + async def __aenter__(self) -> Self: """Enter a context manager for underlying httpx.AsyncClient—you cannot enter twice (see httpx docs)""" await self.get_async_httpx_client().__aenter__() return self diff --git a/src/graphn/_generated/models/__init__.py b/src/graphn/_generated/models/__init__.py index 891a795..3f07bef 100644 --- a/src/graphn/_generated/models/__init__.py +++ b/src/graphn/_generated/models/__init__.py @@ -3,6 +3,32 @@ from .admin_billing_grant_request import AdminBillingGrantRequest from .admin_billing_overrides import AdminBillingOverrides from .admin_billing_state import AdminBillingState +from .admin_invoice_create_request import AdminInvoiceCreateRequest +from .admin_invoice_create_response import AdminInvoiceCreateResponse +from .admin_invoice_discount import AdminInvoiceDiscount +from .admin_invoice_discount_request import AdminInvoiceDiscountRequest +from .admin_invoice_discount_request_type import AdminInvoiceDiscountRequestType +from .admin_invoice_discount_response import AdminInvoiceDiscountResponse +from .admin_invoice_payment_preview_response import AdminInvoicePaymentPreviewResponse +from .admin_invoice_preview_request import AdminInvoicePreviewRequest +from .admin_invoice_preview_response import AdminInvoicePreviewResponse +from .admin_invoice_quote import AdminInvoiceQuote +from .admin_invoice_quote_line_item import AdminInvoiceQuoteLineItem +from .admin_invoice_record_payment_request import AdminInvoiceRecordPaymentRequest +from .admin_invoice_record_payment_response import AdminInvoiceRecordPaymentResponse +from .admin_invoice_response import AdminInvoiceResponse +from .admin_invoice_revision import AdminInvoiceRevision +from .admin_invoice_revisions_response import AdminInvoiceRevisionsResponse +from .admin_invoice_void_request import AdminInvoiceVoidRequest +from .admin_invoice_void_response import AdminInvoiceVoidResponse +from .admin_invoices_response import AdminInvoicesResponse +from .admin_invoices_response_empty_reason import AdminInvoicesResponseEmptyReason +from .admin_list_billing_statements_response_200 import ( + AdminListBillingStatementsResponse200, +) +from .admin_list_billing_statements_response_200_empty_reason import ( + AdminListBillingStatementsResponse200EmptyReason, +) from .agent import Agent from .agent_create import AgentCreate from .agent_list import AgentList @@ -52,12 +78,15 @@ from .billing_grant_result import BillingGrantResult from .billing_grant_result_new_status import BillingGrantResultNewStatus from .billing_settings_update import BillingSettingsUpdate +from .billing_statement_detail import BillingStatementDetail +from .billing_statement_summary import BillingStatementSummary from .billing_top_up_request import BillingTopUpRequest from .billing_usage import BillingUsage from .billing_usage_time_series_item import BillingUsageTimeSeriesItem from .blueprint import Blueprint from .blueprint_agents_item import BlueprintAgentsItem from .blueprint_deploy_request import BlueprintDeployRequest +from .blueprint_deploy_resource_i_ds import BlueprintDeployResourceIDs from .blueprint_deploy_response import BlueprintDeployResponse from .blueprint_functions_item import BlueprintFunctionsItem from .blueprint_list import BlueprintList @@ -83,13 +112,25 @@ from .chat_message import ChatMessage from .chat_message_role import ChatMessageRole from .chat_message_tool_calls_item import ChatMessageToolCallsItem +from .connection import Connection +from .connection_account_metadata import ConnectionAccountMetadata +from .connection_authorization_challenge import ConnectionAuthorizationChallenge +from .connection_authorization_start import ConnectionAuthorizationStart +from .connection_create import ConnectionCreate +from .connection_create_kind import ConnectionCreateKind +from .connection_kind import ConnectionKind +from .connection_list import ConnectionList +from .connection_status import ConnectionStatus +from .connection_watch_status import ConnectionWatchStatus from .create_billing_setup_intent_response_200 import ( CreateBillingSetupIntentResponse200, ) from .custom_model import CustomModel from .custom_model_access import CustomModelAccess +from .custom_model_adapter_attach import CustomModelAdapterAttach from .custom_model_artifact_type import CustomModelArtifactType from .custom_model_create import CustomModelCreate +from .custom_model_create_max_lora_rank import CustomModelCreateMaxLoraRank from .custom_model_create_quantization import CustomModelCreateQuantization from .custom_model_list import CustomModelList from .custom_model_quantization import CustomModelQuantization @@ -98,6 +139,7 @@ from .discover_imported_models_request import DiscoverImportedModelsRequest from .discover_imported_models_response import DiscoverImportedModelsResponse from .discovered_imported_model import DiscoveredImportedModel +from .document_media import DocumentMedia from .embed_request import EmbedRequest from .embed_response import EmbedResponse from .embedding_model import EmbeddingModel @@ -109,6 +151,7 @@ from .function_create import FunctionCreate from .function_create_files import FunctionCreateFiles from .function_create_parameters_schema import FunctionCreateParametersSchema +from .function_create_type import FunctionCreateType from .function_dry_run_request import FunctionDryRunRequest from .function_dry_run_request_files import FunctionDryRunRequestFiles from .function_dry_run_request_input import FunctionDryRunRequestInput @@ -116,6 +159,7 @@ from .function_spec import FunctionSpec from .function_spec_files import FunctionSpecFiles from .function_spec_parameters_schema import FunctionSpecParametersSchema +from .function_spec_type import FunctionSpecType from .function_test_request import FunctionTestRequest from .function_test_request_input import FunctionTestRequestInput from .function_test_response import FunctionTestResponse @@ -123,7 +167,14 @@ from .function_update_files import FunctionUpdateFiles from .function_update_parameters_schema import FunctionUpdateParametersSchema from .get_billing_invoice_response_200 import GetBillingInvoiceResponse200 +from .get_billing_invoice_response_200_invoice import ( + GetBillingInvoiceResponse200Invoice, +) +from .get_billing_statement_response_200 import GetBillingStatementResponse200 from .get_billing_usage_filter import GetBillingUsageFilter +from .get_inference_router_analytics_interval import GetInferenceRouterAnalyticsInterval +from .google_pub_sub_envelope import GooglePubSubEnvelope +from .google_pub_sub_envelope_message import GooglePubSubEnvelopeMessage from .gpu_hours_response import GpuHoursResponse from .id_list_request import IdListRequest from .imported_model import ImportedModel @@ -132,6 +183,47 @@ from .imported_model_update import ImportedModelUpdate from .inference_error import InferenceError from .inference_error_error import InferenceErrorError +from .inference_router import InferenceRouter +from .inference_router_analytics import InferenceRouterAnalytics +from .inference_router_analytics_breakdown import InferenceRouterAnalyticsBreakdown +from .inference_router_analytics_interval import InferenceRouterAnalyticsInterval +from .inference_router_analytics_metrics import InferenceRouterAnalyticsMetrics +from .inference_router_analytics_point import InferenceRouterAnalyticsPoint +from .inference_router_analytics_shared_candidate_runtime_status import ( + InferenceRouterAnalyticsSharedCandidateRuntimeStatus, +) +from .inference_router_candidate import InferenceRouterCandidate +from .inference_router_config import InferenceRouterConfig +from .inference_router_config_fallback_policy import InferenceRouterConfigFallbackPolicy +from .inference_router_config_preset import InferenceRouterConfigPreset +from .inference_router_create import InferenceRouterCreate +from .inference_router_create_fallback_policy import InferenceRouterCreateFallbackPolicy +from .inference_router_create_preset import InferenceRouterCreatePreset +from .inference_router_lane import InferenceRouterLane +from .inference_router_lane_create import InferenceRouterLaneCreate +from .inference_router_lane_create_match import InferenceRouterLaneCreateMatch +from .inference_router_lane_list import InferenceRouterLaneList +from .inference_router_lane_match import InferenceRouterLaneMatch +from .inference_router_lane_update import InferenceRouterLaneUpdate +from .inference_router_lane_update_match import InferenceRouterLaneUpdateMatch +from .inference_router_list import InferenceRouterList +from .inference_router_revision import InferenceRouterRevision +from .inference_router_revision_shard_placements_item import ( + InferenceRouterRevisionShardPlacementsItem, +) +from .inference_router_revision_shard_placements_item_role import ( + InferenceRouterRevisionShardPlacementsItemRole, +) +from .inference_router_revision_shard_placements_item_state import ( + InferenceRouterRevisionShardPlacementsItemState, +) +from .inference_router_revision_status import InferenceRouterRevisionStatus +from .inference_router_scope import InferenceRouterScope +from .inference_router_status import InferenceRouterStatus +from .inference_router_update import InferenceRouterUpdate +from .inference_router_update_fallback_policy import InferenceRouterUpdateFallbackPolicy +from .inference_router_update_preset import InferenceRouterUpdatePreset +from .inference_router_validation import InferenceRouterValidation from .ingest_item import IngestItem from .ingest_item_input import IngestItemInput from .ingest_item_input_metadata import IngestItemInputMetadata @@ -139,6 +231,12 @@ from .ingest_job import IngestJob from .ingest_job_list import IngestJobList from .ingest_job_summary import IngestJobSummary +from .integration import Integration +from .integration_auth_mode import IntegrationAuthMode +from .integration_capability import IntegrationCapability +from .integration_event import IntegrationEvent +from .integration_kind import IntegrationKind +from .integration_list import IntegrationList from .invitation import Invitation from .invitation_accept_result import InvitationAcceptResult from .invitation_create import InvitationCreate @@ -154,16 +252,25 @@ from .kb_document_metadata import KbDocumentMetadata from .knowledge_base import KnowledgeBase from .knowledge_base_create import KnowledgeBaseCreate +from .knowledge_base_list_response import KnowledgeBaseListResponse from .knowledge_base_stats import KnowledgeBaseStats from .knowledge_base_update import KnowledgeBaseUpdate from .list_billing_invoices_response_200 import ListBillingInvoicesResponse200 -from .list_billing_invoices_response_200_empty_reason import ( - ListBillingInvoicesResponse200EmptyReason, -) from .list_billing_payment_methods_response_200 import ( ListBillingPaymentMethodsResponse200, ) +from .list_billing_statements_response_200 import ListBillingStatementsResponse200 +from .list_billing_statements_response_200_empty_reason import ( + ListBillingStatementsResponse200EmptyReason, +) +from .list_custom_models_include import ListCustomModelsInclude +from .list_knowledgebases_order import ListKnowledgebasesOrder +from .list_knowledgebases_sort import ListKnowledgebasesSort +from .list_knowledgebases_status import ListKnowledgebasesStatus from .list_tts_voices_response_200 import ListTtsVoicesResponse200 +from .managed_connection_tool_call import ManagedConnectionToolCall +from .managed_connection_tool_call_arguments import ManagedConnectionToolCallArguments +from .managed_connection_tool_result import ManagedConnectionToolResult from .mcp_discover_tools_request import McpDiscoverToolsRequest from .mcp_discover_tools_request_files import McpDiscoverToolsRequestFiles from .mcp_discover_tools_response import McpDiscoverToolsResponse @@ -176,10 +283,13 @@ from .mcp_server_create import McpServerCreate from .mcp_server_create_files import McpServerCreateFiles from .mcp_server_create_secrets import McpServerCreateSecrets +from .mcp_server_create_type import McpServerCreateType from .mcp_server_list import McpServerList from .mcp_server_spec import McpServerSpec from .mcp_server_spec_files import McpServerSpecFiles from .mcp_server_spec_secrets import McpServerSpecSecrets +from .mcp_server_spec_tool_capabilities import McpServerSpecToolCapabilities +from .mcp_server_spec_type import McpServerSpecType from .mcp_server_status import McpServerStatus from .mcp_server_update import McpServerUpdate from .mcp_server_update_files import McpServerUpdateFiles @@ -208,7 +318,14 @@ from .payment_method import PaymentMethod from .post_object_type import PostObjectType from .presigned_url import PresignedURL +from .publish_inference_router_body import PublishInferenceRouterBody from .publish_message import PublishMessage +from .published_router_candidate import PublishedRouterCandidate +from .published_router_custom_lane import PublishedRouterCustomLane +from .published_router_custom_lane_match import PublishedRouterCustomLaneMatch +from .published_router_decision import PublishedRouterDecision +from .published_router_revision import PublishedRouterRevision +from .published_router_revision_state import PublishedRouterRevisionState from .resource_version_ref import ResourceVersionRef from .search_request import SearchRequest from .search_request_metadata_filter import SearchRequestMetadataFilter @@ -257,6 +374,8 @@ UploadKnowledgebaseDocumentFilesBody, ) from .upload_storage_file_body import UploadStorageFileBody +from .usage_day import UsageDay +from .usage_week import UsageWeek from .validate_model_request import ValidateModelRequest from .validate_model_request_quantization import ValidateModelRequestQuantization from .validate_model_request_weight_source import ValidateModelRequestWeightSource @@ -323,6 +442,28 @@ "AdminBillingGrantRequest", "AdminBillingOverrides", "AdminBillingState", + "AdminInvoiceCreateRequest", + "AdminInvoiceCreateResponse", + "AdminInvoiceDiscount", + "AdminInvoiceDiscountRequest", + "AdminInvoiceDiscountRequestType", + "AdminInvoiceDiscountResponse", + "AdminInvoicePaymentPreviewResponse", + "AdminInvoicePreviewRequest", + "AdminInvoicePreviewResponse", + "AdminInvoiceQuote", + "AdminInvoiceQuoteLineItem", + "AdminInvoiceRecordPaymentRequest", + "AdminInvoiceRecordPaymentResponse", + "AdminInvoiceResponse", + "AdminInvoiceRevision", + "AdminInvoiceRevisionsResponse", + "AdminInvoiceVoidRequest", + "AdminInvoiceVoidResponse", + "AdminInvoicesResponse", + "AdminInvoicesResponseEmptyReason", + "AdminListBillingStatementsResponse200", + "AdminListBillingStatementsResponse200EmptyReason", "Agent", "AgentCreate", "AgentList", @@ -372,12 +513,15 @@ "BillingGrantResult", "BillingGrantResultNewStatus", "BillingSettingsUpdate", + "BillingStatementDetail", + "BillingStatementSummary", "BillingTopUpRequest", "BillingUsage", "BillingUsageTimeSeriesItem", "Blueprint", "BlueprintAgentsItem", "BlueprintDeployRequest", + "BlueprintDeployResourceIDs", "BlueprintDeployResponse", "BlueprintFunctionsItem", "BlueprintList", @@ -401,11 +545,23 @@ "ChatMessage", "ChatMessageRole", "ChatMessageToolCallsItem", + "Connection", + "ConnectionAccountMetadata", + "ConnectionAuthorizationChallenge", + "ConnectionAuthorizationStart", + "ConnectionCreate", + "ConnectionCreateKind", + "ConnectionKind", + "ConnectionList", + "ConnectionStatus", + "ConnectionWatchStatus", "CreateBillingSetupIntentResponse200", "CustomModel", "CustomModelAccess", + "CustomModelAdapterAttach", "CustomModelArtifactType", "CustomModelCreate", + "CustomModelCreateMaxLoraRank", "CustomModelCreateQuantization", "CustomModelList", "CustomModelQuantization", @@ -414,6 +570,7 @@ "DiscoverImportedModelsRequest", "DiscoverImportedModelsResponse", "DiscoveredImportedModel", + "DocumentMedia", "EmbedRequest", "EmbedResponse", "EmbeddingModel", @@ -425,6 +582,7 @@ "FunctionCreate", "FunctionCreateFiles", "FunctionCreateParametersSchema", + "FunctionCreateType", "FunctionDryRunRequest", "FunctionDryRunRequestFiles", "FunctionDryRunRequestInput", @@ -432,6 +590,7 @@ "FunctionSpec", "FunctionSpecFiles", "FunctionSpecParametersSchema", + "FunctionSpecType", "FunctionTestRequest", "FunctionTestRequestInput", "FunctionTestResponse", @@ -439,7 +598,12 @@ "FunctionUpdateFiles", "FunctionUpdateParametersSchema", "GetBillingInvoiceResponse200", + "GetBillingInvoiceResponse200Invoice", + "GetBillingStatementResponse200", "GetBillingUsageFilter", + "GetInferenceRouterAnalyticsInterval", + "GooglePubSubEnvelope", + "GooglePubSubEnvelopeMessage", "GpuHoursResponse", "IdListRequest", "ImportedModel", @@ -448,6 +612,39 @@ "ImportedModelUpdate", "InferenceError", "InferenceErrorError", + "InferenceRouter", + "InferenceRouterAnalytics", + "InferenceRouterAnalyticsBreakdown", + "InferenceRouterAnalyticsInterval", + "InferenceRouterAnalyticsMetrics", + "InferenceRouterAnalyticsPoint", + "InferenceRouterAnalyticsSharedCandidateRuntimeStatus", + "InferenceRouterCandidate", + "InferenceRouterConfig", + "InferenceRouterConfigFallbackPolicy", + "InferenceRouterConfigPreset", + "InferenceRouterCreate", + "InferenceRouterCreateFallbackPolicy", + "InferenceRouterCreatePreset", + "InferenceRouterLane", + "InferenceRouterLaneCreate", + "InferenceRouterLaneCreateMatch", + "InferenceRouterLaneList", + "InferenceRouterLaneMatch", + "InferenceRouterLaneUpdate", + "InferenceRouterLaneUpdateMatch", + "InferenceRouterList", + "InferenceRouterRevision", + "InferenceRouterRevisionShardPlacementsItem", + "InferenceRouterRevisionShardPlacementsItemRole", + "InferenceRouterRevisionShardPlacementsItemState", + "InferenceRouterRevisionStatus", + "InferenceRouterScope", + "InferenceRouterStatus", + "InferenceRouterUpdate", + "InferenceRouterUpdateFallbackPolicy", + "InferenceRouterUpdatePreset", + "InferenceRouterValidation", "IngestItem", "IngestItemInput", "IngestItemInputMetadata", @@ -455,6 +652,12 @@ "IngestJob", "IngestJobList", "IngestJobSummary", + "Integration", + "IntegrationAuthMode", + "IntegrationCapability", + "IntegrationEvent", + "IntegrationKind", + "IntegrationList", "Invitation", "InvitationAcceptResult", "InvitationCreate", @@ -470,12 +673,21 @@ "KbDocumentMetadata", "KnowledgeBase", "KnowledgeBaseCreate", + "KnowledgeBaseListResponse", "KnowledgeBaseStats", "KnowledgeBaseUpdate", "ListBillingInvoicesResponse200", - "ListBillingInvoicesResponse200EmptyReason", "ListBillingPaymentMethodsResponse200", + "ListBillingStatementsResponse200", + "ListBillingStatementsResponse200EmptyReason", + "ListCustomModelsInclude", + "ListKnowledgebasesOrder", + "ListKnowledgebasesSort", + "ListKnowledgebasesStatus", "ListTtsVoicesResponse200", + "ManagedConnectionToolCall", + "ManagedConnectionToolCallArguments", + "ManagedConnectionToolResult", "McpDiscoverToolsRequest", "McpDiscoverToolsRequestFiles", "McpDiscoverToolsResponse", @@ -488,10 +700,13 @@ "McpServerCreate", "McpServerCreateFiles", "McpServerCreateSecrets", + "McpServerCreateType", "McpServerList", "McpServerSpec", "McpServerSpecFiles", "McpServerSpecSecrets", + "McpServerSpecToolCapabilities", + "McpServerSpecType", "McpServerStatus", "McpServerUpdate", "McpServerUpdateFiles", @@ -520,7 +735,14 @@ "PaymentMethod", "PostObjectType", "PresignedURL", + "PublishInferenceRouterBody", "PublishMessage", + "PublishedRouterCandidate", + "PublishedRouterCustomLane", + "PublishedRouterCustomLaneMatch", + "PublishedRouterDecision", + "PublishedRouterRevision", + "PublishedRouterRevisionState", "ResourceVersionRef", "SearchRequest", "SearchRequestMetadataFilter", @@ -565,6 +787,8 @@ "UploadDocumentFromURLRequestMetadata", "UploadKnowledgebaseDocumentFilesBody", "UploadStorageFileBody", + "UsageDay", + "UsageWeek", "ValidateModelRequest", "ValidateModelRequestQuantization", "ValidateModelRequestWeightSource", diff --git a/src/graphn/_generated/models/admin_billing_grant_request.py b/src/graphn/_generated/models/admin_billing_grant_request.py index 65a0019..90bcd82 100644 --- a/src/graphn/_generated/models/admin_billing_grant_request.py +++ b/src/graphn/_generated/models/admin_billing_grant_request.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/admin_billing_overrides.py b/src/graphn/_generated/models/admin_billing_overrides.py index db2cbf6..ffb59ee 100644 --- a/src/graphn/_generated/models/admin_billing_overrides.py +++ b/src/graphn/_generated/models/admin_billing_overrides.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset @@ -20,6 +19,7 @@ class AdminBillingOverrides: custom_models_disabled (bool | Unset): allow_negative_balance (bool | Unset): negative_limit_cents (int | Unset): + reserve_est_cents (int | None | Unset): has_purchased (bool | Unset): """ @@ -27,6 +27,7 @@ class AdminBillingOverrides: custom_models_disabled: bool | Unset = UNSET allow_negative_balance: bool | Unset = UNSET negative_limit_cents: int | Unset = UNSET + reserve_est_cents: int | None | Unset = UNSET has_purchased: bool | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -39,6 +40,12 @@ def to_dict(self) -> dict[str, Any]: negative_limit_cents = self.negative_limit_cents + reserve_est_cents: int | None | Unset + if isinstance(self.reserve_est_cents, Unset): + reserve_est_cents = UNSET + else: + reserve_est_cents = self.reserve_est_cents + has_purchased = self.has_purchased field_dict: dict[str, Any] = {} @@ -54,6 +61,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["allowNegativeBalance"] = allow_negative_balance if negative_limit_cents is not UNSET: field_dict["negativeLimitCents"] = negative_limit_cents + if reserve_est_cents is not UNSET: + field_dict["reserveEstCents"] = reserve_est_cents if has_purchased is not UNSET: field_dict["hasPurchased"] = has_purchased @@ -70,6 +79,15 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: negative_limit_cents = d.pop("negativeLimitCents", UNSET) + def _parse_reserve_est_cents(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + reserve_est_cents = _parse_reserve_est_cents(d.pop("reserveEstCents", UNSET)) + has_purchased = d.pop("hasPurchased", UNSET) admin_billing_overrides = cls( @@ -77,6 +95,7 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: custom_models_disabled=custom_models_disabled, allow_negative_balance=allow_negative_balance, negative_limit_cents=negative_limit_cents, + reserve_est_cents=reserve_est_cents, has_purchased=has_purchased, ) diff --git a/src/graphn/_generated/models/admin_billing_state.py b/src/graphn/_generated/models/admin_billing_state.py index 07342f8..d240514 100644 --- a/src/graphn/_generated/models/admin_billing_state.py +++ b/src/graphn/_generated/models/admin_billing_state.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset @@ -29,6 +28,8 @@ class AdminBillingState: custom_models_disabled (bool | Unset): allow_negative_balance (bool | Unset): negative_limit_cents (int | Unset): + reserve_est_cents (int | None | Unset): + reserve_est_cents_default (int | Unset): """ org_id: str @@ -44,6 +45,8 @@ class AdminBillingState: custom_models_disabled: bool | Unset = UNSET allow_negative_balance: bool | Unset = UNSET negative_limit_cents: int | Unset = UNSET + reserve_est_cents: int | None | Unset = UNSET + reserve_est_cents_default: int | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -73,6 +76,14 @@ def to_dict(self) -> dict[str, Any]: negative_limit_cents = self.negative_limit_cents + reserve_est_cents: int | None | Unset + if isinstance(self.reserve_est_cents, Unset): + reserve_est_cents = UNSET + else: + reserve_est_cents = self.reserve_est_cents + + reserve_est_cents_default = self.reserve_est_cents_default + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( @@ -101,6 +112,10 @@ def to_dict(self) -> dict[str, Any]: field_dict["allowNegativeBalance"] = allow_negative_balance if negative_limit_cents is not UNSET: field_dict["negativeLimitCents"] = negative_limit_cents + if reserve_est_cents is not UNSET: + field_dict["reserveEstCents"] = reserve_est_cents + if reserve_est_cents_default is not UNSET: + field_dict["reserveEstCentsDefault"] = reserve_est_cents_default return field_dict @@ -133,6 +148,17 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: negative_limit_cents = d.pop("negativeLimitCents", UNSET) + def _parse_reserve_est_cents(data: object) -> int | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(int | None | Unset, data) + + reserve_est_cents = _parse_reserve_est_cents(d.pop("reserveEstCents", UNSET)) + + reserve_est_cents_default = d.pop("reserveEstCentsDefault", UNSET) + admin_billing_state = cls( org_id=org_id, billing_account_exists=billing_account_exists, @@ -147,6 +173,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: custom_models_disabled=custom_models_disabled, allow_negative_balance=allow_negative_balance, negative_limit_cents=negative_limit_cents, + reserve_est_cents=reserve_est_cents, + reserve_est_cents_default=reserve_est_cents_default, ) admin_billing_state.additional_properties = d diff --git a/src/graphn/_generated/models/admin_invoice_create_request.py b/src/graphn/_generated/models/admin_invoice_create_request.py new file mode 100644 index 0000000..997d4ca --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_create_request.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AdminInvoiceCreateRequest") + + +@_attrs_define +class AdminInvoiceCreateRequest: + """ + Attributes: + from_ (datetime.datetime): + to (datetime.datetime): + manifest_sha_256 (str): + comment (str): + rendering_mode (str | Unset): + """ + + from_: datetime.datetime + to: datetime.datetime + manifest_sha_256: str + comment: str + rendering_mode: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + from_ = self.from_.isoformat() + + to = self.to.isoformat() + + manifest_sha_256 = self.manifest_sha_256 + + comment = self.comment + + rendering_mode = self.rendering_mode + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "from": from_, + "to": to, + "manifestSha256": manifest_sha_256, + "comment": comment, + } + ) + if rendering_mode is not UNSET: + field_dict["renderingMode"] = rendering_mode + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + from_ = datetime.datetime.fromisoformat(d.pop("from")) + + to = datetime.datetime.fromisoformat(d.pop("to")) + + manifest_sha_256 = d.pop("manifestSha256") + + comment = d.pop("comment") + + rendering_mode = d.pop("renderingMode", UNSET) + + admin_invoice_create_request = cls( + from_=from_, + to=to, + manifest_sha_256=manifest_sha_256, + comment=comment, + rendering_mode=rendering_mode, + ) + + admin_invoice_create_request.additional_properties = d + return admin_invoice_create_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_create_response.py b/src/graphn/_generated/models/admin_invoice_create_response.py new file mode 100644 index 0000000..09793fe --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_create_response.py @@ -0,0 +1,136 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.admin_invoice_quote import AdminInvoiceQuote + + +T = TypeVar("T", bound="AdminInvoiceCreateResponse") + + +@_attrs_define +class AdminInvoiceCreateResponse: + """ + Attributes: + period_start (datetime.datetime): + period_end (datetime.datetime): + manifest_sha_256 (str): + quote (AdminInvoiceQuote): + invoice_id (str): + invoice_status (str): + amount_due_cents (int): + rendering_mode (str | Unset): + hosted_invoice_url (str | Unset): + """ + + period_start: datetime.datetime + period_end: datetime.datetime + manifest_sha_256: str + quote: AdminInvoiceQuote + invoice_id: str + invoice_status: str + amount_due_cents: int + rendering_mode: str | Unset = UNSET + hosted_invoice_url: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + manifest_sha_256 = self.manifest_sha_256 + + quote = self.quote.to_dict() + + invoice_id = self.invoice_id + + invoice_status = self.invoice_status + + amount_due_cents = self.amount_due_cents + + rendering_mode = self.rendering_mode + + hosted_invoice_url = self.hosted_invoice_url + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "periodStart": period_start, + "periodEnd": period_end, + "manifestSha256": manifest_sha_256, + "quote": quote, + "invoiceId": invoice_id, + "invoiceStatus": invoice_status, + "amountDueCents": amount_due_cents, + } + ) + if rendering_mode is not UNSET: + field_dict["renderingMode"] = rendering_mode + if hosted_invoice_url is not UNSET: + field_dict["hostedInvoiceUrl"] = hosted_invoice_url + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_quote import AdminInvoiceQuote + + d = dict(src_dict) + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + manifest_sha_256 = d.pop("manifestSha256") + + quote = AdminInvoiceQuote.from_dict(d.pop("quote")) + + invoice_id = d.pop("invoiceId") + + invoice_status = d.pop("invoiceStatus") + + amount_due_cents = d.pop("amountDueCents") + + rendering_mode = d.pop("renderingMode", UNSET) + + hosted_invoice_url = d.pop("hostedInvoiceUrl", UNSET) + + admin_invoice_create_response = cls( + period_start=period_start, + period_end=period_end, + manifest_sha_256=manifest_sha_256, + quote=quote, + invoice_id=invoice_id, + invoice_status=invoice_status, + amount_due_cents=amount_due_cents, + rendering_mode=rendering_mode, + hosted_invoice_url=hosted_invoice_url, + ) + + admin_invoice_create_response.additional_properties = d + return admin_invoice_create_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_discount.py b/src/graphn/_generated/models/admin_invoice_discount.py new file mode 100644 index 0000000..96c02fa --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_discount.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AdminInvoiceDiscount") + + +@_attrs_define +class AdminInvoiceDiscount: + """ + Attributes: + type_ (str): + input_value (int): + discount_cents (int): + reason (str): + actor (str): + idempotency_key (str): + status (str): + original_amount_cents (int): + adjusted_amount_cents (int): + provider_source_id (str | Unset): + provider_result_id (str | Unset): + applied_at (datetime.datetime | Unset): + """ + + type_: str + input_value: int + discount_cents: int + reason: str + actor: str + idempotency_key: str + status: str + original_amount_cents: int + adjusted_amount_cents: int + provider_source_id: str | Unset = UNSET + provider_result_id: str | Unset = UNSET + applied_at: datetime.datetime | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + type_ = self.type_ + + input_value = self.input_value + + discount_cents = self.discount_cents + + reason = self.reason + + actor = self.actor + + idempotency_key = self.idempotency_key + + status = self.status + + original_amount_cents = self.original_amount_cents + + adjusted_amount_cents = self.adjusted_amount_cents + + provider_source_id = self.provider_source_id + + provider_result_id = self.provider_result_id + + applied_at: str | Unset = UNSET + if not isinstance(self.applied_at, Unset): + applied_at = self.applied_at.isoformat() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "type": type_, + "inputValue": input_value, + "discountCents": discount_cents, + "reason": reason, + "actor": actor, + "idempotencyKey": idempotency_key, + "status": status, + "originalAmountCents": original_amount_cents, + "adjustedAmountCents": adjusted_amount_cents, + } + ) + if provider_source_id is not UNSET: + field_dict["providerSourceId"] = provider_source_id + if provider_result_id is not UNSET: + field_dict["providerResultId"] = provider_result_id + if applied_at is not UNSET: + field_dict["appliedAt"] = applied_at + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + type_ = d.pop("type") + + input_value = d.pop("inputValue") + + discount_cents = d.pop("discountCents") + + reason = d.pop("reason") + + actor = d.pop("actor") + + idempotency_key = d.pop("idempotencyKey") + + status = d.pop("status") + + original_amount_cents = d.pop("originalAmountCents") + + adjusted_amount_cents = d.pop("adjustedAmountCents") + + provider_source_id = d.pop("providerSourceId", UNSET) + + provider_result_id = d.pop("providerResultId", UNSET) + + _applied_at = d.pop("appliedAt", UNSET) + applied_at: datetime.datetime | Unset + if isinstance(_applied_at, Unset): + applied_at = UNSET + else: + applied_at = datetime.datetime.fromisoformat(_applied_at) + + admin_invoice_discount = cls( + type_=type_, + input_value=input_value, + discount_cents=discount_cents, + reason=reason, + actor=actor, + idempotency_key=idempotency_key, + status=status, + original_amount_cents=original_amount_cents, + adjusted_amount_cents=adjusted_amount_cents, + provider_source_id=provider_source_id, + provider_result_id=provider_result_id, + applied_at=applied_at, + ) + + admin_invoice_discount.additional_properties = d + return admin_invoice_discount + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_discount_request.py b/src/graphn/_generated/models/admin_invoice_discount_request.py new file mode 100644 index 0000000..7e4384b --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_discount_request.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.admin_invoice_discount_request_type import AdminInvoiceDiscountRequestType +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AdminInvoiceDiscountRequest") + + +@_attrs_define +class AdminInvoiceDiscountRequest: + """ + Attributes: + from_ (datetime.datetime): + to (datetime.datetime): + expected_revision (int): + type_ (AdminInvoiceDiscountRequestType): + value (int): Discount input value. For percentage discounts this is basis points + (1..9999 = 0.01%..99.99%). For fixed_amount_cents this is cents. + reason (str): + comment (str): + idempotency_key (str | Unset): + """ + + from_: datetime.datetime + to: datetime.datetime + expected_revision: int + type_: AdminInvoiceDiscountRequestType + value: int + reason: str + comment: str + idempotency_key: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + from_ = self.from_.isoformat() + + to = self.to.isoformat() + + expected_revision = self.expected_revision + + type_ = self.type_.value + + value = self.value + + reason = self.reason + + comment = self.comment + + idempotency_key = self.idempotency_key + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "from": from_, + "to": to, + "expectedRevision": expected_revision, + "type": type_, + "value": value, + "reason": reason, + "comment": comment, + } + ) + if idempotency_key is not UNSET: + field_dict["idempotencyKey"] = idempotency_key + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + from_ = datetime.datetime.fromisoformat(d.pop("from")) + + to = datetime.datetime.fromisoformat(d.pop("to")) + + expected_revision = d.pop("expectedRevision") + + type_ = AdminInvoiceDiscountRequestType(d.pop("type")) + + value = d.pop("value") + + reason = d.pop("reason") + + comment = d.pop("comment") + + idempotency_key = d.pop("idempotencyKey", UNSET) + + admin_invoice_discount_request = cls( + from_=from_, + to=to, + expected_revision=expected_revision, + type_=type_, + value=value, + reason=reason, + comment=comment, + idempotency_key=idempotency_key, + ) + + return admin_invoice_discount_request diff --git a/src/graphn/_generated/models/admin_invoice_discount_request_type.py b/src/graphn/_generated/models/admin_invoice_discount_request_type.py new file mode 100644 index 0000000..1f1f5d5 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_discount_request_type.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class AdminInvoiceDiscountRequestType(StrEnum): + FIXED_AMOUNT_CENTS = "fixed_amount_cents" + PERCENTAGE = "percentage" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/admin_invoice_discount_response.py b/src/graphn/_generated/models/admin_invoice_discount_response.py new file mode 100644 index 0000000..a2579e8 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_discount_response.py @@ -0,0 +1,160 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.admin_invoice_discount import AdminInvoiceDiscount + + +T = TypeVar("T", bound="AdminInvoiceDiscountResponse") + + +@_attrs_define +class AdminInvoiceDiscountResponse: + """ + Attributes: + org_id (str): + period_start (datetime.datetime): + period_end (datetime.datetime): + invoice_id (str): + invoice_status (str): + revision (int): + root_invoice_id (str): + original_amount_cents (int): + adjusted_amount_cents (int): + discount (AdminInvoiceDiscount): + supersedes_invoice_id (str | Unset): + hosted_invoice_url (str | Unset): + """ + + org_id: str + period_start: datetime.datetime + period_end: datetime.datetime + invoice_id: str + invoice_status: str + revision: int + root_invoice_id: str + original_amount_cents: int + adjusted_amount_cents: int + discount: AdminInvoiceDiscount + supersedes_invoice_id: str | Unset = UNSET + hosted_invoice_url: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + invoice_id = self.invoice_id + + invoice_status = self.invoice_status + + revision = self.revision + + root_invoice_id = self.root_invoice_id + + original_amount_cents = self.original_amount_cents + + adjusted_amount_cents = self.adjusted_amount_cents + + discount = self.discount.to_dict() + + supersedes_invoice_id = self.supersedes_invoice_id + + hosted_invoice_url = self.hosted_invoice_url + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "periodStart": period_start, + "periodEnd": period_end, + "invoiceId": invoice_id, + "invoiceStatus": invoice_status, + "revision": revision, + "rootInvoiceId": root_invoice_id, + "originalAmountCents": original_amount_cents, + "adjustedAmountCents": adjusted_amount_cents, + "discount": discount, + } + ) + if supersedes_invoice_id is not UNSET: + field_dict["supersedesInvoiceId"] = supersedes_invoice_id + if hosted_invoice_url is not UNSET: + field_dict["hostedInvoiceUrl"] = hosted_invoice_url + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_discount import AdminInvoiceDiscount + + d = dict(src_dict) + org_id = d.pop("orgId") + + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + invoice_id = d.pop("invoiceId") + + invoice_status = d.pop("invoiceStatus") + + revision = d.pop("revision") + + root_invoice_id = d.pop("rootInvoiceId") + + original_amount_cents = d.pop("originalAmountCents") + + adjusted_amount_cents = d.pop("adjustedAmountCents") + + discount = AdminInvoiceDiscount.from_dict(d.pop("discount")) + + supersedes_invoice_id = d.pop("supersedesInvoiceId", UNSET) + + hosted_invoice_url = d.pop("hostedInvoiceUrl", UNSET) + + admin_invoice_discount_response = cls( + org_id=org_id, + period_start=period_start, + period_end=period_end, + invoice_id=invoice_id, + invoice_status=invoice_status, + revision=revision, + root_invoice_id=root_invoice_id, + original_amount_cents=original_amount_cents, + adjusted_amount_cents=adjusted_amount_cents, + discount=discount, + supersedes_invoice_id=supersedes_invoice_id, + hosted_invoice_url=hosted_invoice_url, + ) + + admin_invoice_discount_response.additional_properties = d + return admin_invoice_discount_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_payment_preview_response.py b/src/graphn/_generated/models/admin_invoice_payment_preview_response.py new file mode 100644 index 0000000..fb2b446 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_payment_preview_response.py @@ -0,0 +1,160 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AdminInvoicePaymentPreviewResponse") + + +@_attrs_define +class AdminInvoicePaymentPreviewResponse: + """ + Attributes: + org_id (str): + invoice_id (str): + stripe_customer_id (str): + currency (str): + invoice_total_cents (int): + invoice_amount_paid_cents (int): + overlay_period_start (datetime.datetime): + overlay_period_end (datetime.datetime): + overlay_expected_amount_cents (int): + idempotency_key (str): + already_recorded (bool): + recorded_sequence (int): + checksum (str): + """ + + org_id: str + invoice_id: str + stripe_customer_id: str + currency: str + invoice_total_cents: int + invoice_amount_paid_cents: int + overlay_period_start: datetime.datetime + overlay_period_end: datetime.datetime + overlay_expected_amount_cents: int + idempotency_key: str + already_recorded: bool + recorded_sequence: int + checksum: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + invoice_id = self.invoice_id + + stripe_customer_id = self.stripe_customer_id + + currency = self.currency + + invoice_total_cents = self.invoice_total_cents + + invoice_amount_paid_cents = self.invoice_amount_paid_cents + + overlay_period_start = self.overlay_period_start.isoformat() + + overlay_period_end = self.overlay_period_end.isoformat() + + overlay_expected_amount_cents = self.overlay_expected_amount_cents + + idempotency_key = self.idempotency_key + + already_recorded = self.already_recorded + + recorded_sequence = self.recorded_sequence + + checksum = self.checksum + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "invoiceId": invoice_id, + "stripeCustomerId": stripe_customer_id, + "currency": currency, + "invoiceTotalCents": invoice_total_cents, + "invoiceAmountPaidCents": invoice_amount_paid_cents, + "overlayPeriodStart": overlay_period_start, + "overlayPeriodEnd": overlay_period_end, + "overlayExpectedAmountCents": overlay_expected_amount_cents, + "idempotencyKey": idempotency_key, + "alreadyRecorded": already_recorded, + "recordedSequence": recorded_sequence, + "checksum": checksum, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + org_id = d.pop("orgId") + + invoice_id = d.pop("invoiceId") + + stripe_customer_id = d.pop("stripeCustomerId") + + currency = d.pop("currency") + + invoice_total_cents = d.pop("invoiceTotalCents") + + invoice_amount_paid_cents = d.pop("invoiceAmountPaidCents") + + overlay_period_start = datetime.datetime.fromisoformat( + d.pop("overlayPeriodStart") + ) + + overlay_period_end = datetime.datetime.fromisoformat(d.pop("overlayPeriodEnd")) + + overlay_expected_amount_cents = d.pop("overlayExpectedAmountCents") + + idempotency_key = d.pop("idempotencyKey") + + already_recorded = d.pop("alreadyRecorded") + + recorded_sequence = d.pop("recordedSequence") + + checksum = d.pop("checksum") + + admin_invoice_payment_preview_response = cls( + org_id=org_id, + invoice_id=invoice_id, + stripe_customer_id=stripe_customer_id, + currency=currency, + invoice_total_cents=invoice_total_cents, + invoice_amount_paid_cents=invoice_amount_paid_cents, + overlay_period_start=overlay_period_start, + overlay_period_end=overlay_period_end, + overlay_expected_amount_cents=overlay_expected_amount_cents, + idempotency_key=idempotency_key, + already_recorded=already_recorded, + recorded_sequence=recorded_sequence, + checksum=checksum, + ) + + admin_invoice_payment_preview_response.additional_properties = d + return admin_invoice_payment_preview_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_preview_request.py b/src/graphn/_generated/models/admin_invoice_preview_request.py new file mode 100644 index 0000000..4e0f254 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_preview_request.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AdminInvoicePreviewRequest") + + +@_attrs_define +class AdminInvoicePreviewRequest: + """Preview always requires explicit [from, to) bounds. + + Attributes: + from_ (datetime.datetime): + to (datetime.datetime): + rendering_mode (str | Unset): + """ + + from_: datetime.datetime + to: datetime.datetime + rendering_mode: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + from_ = self.from_.isoformat() + + to = self.to.isoformat() + + rendering_mode = self.rendering_mode + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "from": from_, + "to": to, + } + ) + if rendering_mode is not UNSET: + field_dict["renderingMode"] = rendering_mode + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + from_ = datetime.datetime.fromisoformat(d.pop("from")) + + to = datetime.datetime.fromisoformat(d.pop("to")) + + rendering_mode = d.pop("renderingMode", UNSET) + + admin_invoice_preview_request = cls( + from_=from_, + to=to, + rendering_mode=rendering_mode, + ) + + admin_invoice_preview_request.additional_properties = d + return admin_invoice_preview_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_preview_response.py b/src/graphn/_generated/models/admin_invoice_preview_response.py new file mode 100644 index 0000000..ab8da8f --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_preview_response.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.admin_invoice_quote import AdminInvoiceQuote + + +T = TypeVar("T", bound="AdminInvoicePreviewResponse") + + +@_attrs_define +class AdminInvoicePreviewResponse: + """ + Attributes: + period_start (datetime.datetime): + period_end (datetime.datetime): + manifest_sha_256 (str): + quote (AdminInvoiceQuote): + rendering_mode (str | Unset): + """ + + period_start: datetime.datetime + period_end: datetime.datetime + manifest_sha_256: str + quote: AdminInvoiceQuote + rendering_mode: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + manifest_sha_256 = self.manifest_sha_256 + + quote = self.quote.to_dict() + + rendering_mode = self.rendering_mode + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "periodStart": period_start, + "periodEnd": period_end, + "manifestSha256": manifest_sha_256, + "quote": quote, + } + ) + if rendering_mode is not UNSET: + field_dict["renderingMode"] = rendering_mode + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_quote import AdminInvoiceQuote + + d = dict(src_dict) + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + manifest_sha_256 = d.pop("manifestSha256") + + quote = AdminInvoiceQuote.from_dict(d.pop("quote")) + + rendering_mode = d.pop("renderingMode", UNSET) + + admin_invoice_preview_response = cls( + period_start=period_start, + period_end=period_end, + manifest_sha_256=manifest_sha_256, + quote=quote, + rendering_mode=rendering_mode, + ) + + admin_invoice_preview_response.additional_properties = d + return admin_invoice_preview_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_quote.py b/src/graphn/_generated/models/admin_invoice_quote.py new file mode 100644 index 0000000..c7c4e14 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_quote.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.admin_invoice_quote_line_item import AdminInvoiceQuoteLineItem + + +T = TypeVar("T", bound="AdminInvoiceQuote") + + +@_attrs_define +class AdminInvoiceQuote: + """ + Attributes: + org_id (str): + customer_id (str): + period (str): + amount_cents (int): + line_items (list[AdminInvoiceQuoteLineItem]): + """ + + org_id: str + customer_id: str + period: str + amount_cents: int + line_items: list[AdminInvoiceQuoteLineItem] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + customer_id = self.customer_id + + period = self.period + + amount_cents = self.amount_cents + + line_items = [] + for line_items_item_data in self.line_items: + line_items_item = line_items_item_data.to_dict() + line_items.append(line_items_item) + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "customerId": customer_id, + "period": period, + "amountCents": amount_cents, + "lineItems": line_items, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_quote_line_item import AdminInvoiceQuoteLineItem + + d = dict(src_dict) + org_id = d.pop("orgId") + + customer_id = d.pop("customerId") + + period = d.pop("period") + + amount_cents = d.pop("amountCents") + + line_items = [] + _line_items = d.pop("lineItems") + for line_items_item_data in _line_items: + line_items_item = AdminInvoiceQuoteLineItem.from_dict(line_items_item_data) + + line_items.append(line_items_item) + + admin_invoice_quote = cls( + org_id=org_id, + customer_id=customer_id, + period=period, + amount_cents=amount_cents, + line_items=line_items, + ) + + admin_invoice_quote.additional_properties = d + return admin_invoice_quote + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_quote_line_item.py b/src/graphn/_generated/models/admin_invoice_quote_line_item.py new file mode 100644 index 0000000..b176d44 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_quote_line_item.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AdminInvoiceQuoteLineItem") + + +@_attrs_define +class AdminInvoiceQuoteLineItem: + """ + Attributes: + description (str): + amount_cents (int): + """ + + description: str + amount_cents: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + description = self.description + + amount_cents = self.amount_cents + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "description": description, + "amountCents": amount_cents, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + description = d.pop("description") + + amount_cents = d.pop("amountCents") + + admin_invoice_quote_line_item = cls( + description=description, + amount_cents=amount_cents, + ) + + admin_invoice_quote_line_item.additional_properties = d + return admin_invoice_quote_line_item + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_record_payment_request.py b/src/graphn/_generated/models/admin_invoice_record_payment_request.py new file mode 100644 index 0000000..b8a1a8a --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_record_payment_request.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AdminInvoiceRecordPaymentRequest") + + +@_attrs_define +class AdminInvoiceRecordPaymentRequest: + """ + Attributes: + checksum (str): + comment (str): + """ + + checksum: str + comment: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + checksum = self.checksum + + comment = self.comment + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "checksum": checksum, + "comment": comment, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + checksum = d.pop("checksum") + + comment = d.pop("comment") + + admin_invoice_record_payment_request = cls( + checksum=checksum, + comment=comment, + ) + + admin_invoice_record_payment_request.additional_properties = d + return admin_invoice_record_payment_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_record_payment_response.py b/src/graphn/_generated/models/admin_invoice_record_payment_response.py new file mode 100644 index 0000000..bd21e83 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_record_payment_response.py @@ -0,0 +1,109 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AdminInvoiceRecordPaymentResponse") + + +@_attrs_define +class AdminInvoiceRecordPaymentResponse: + """ + Attributes: + org_id (str): + invoice_id (str): + idempotency_key (str): + already_recorded (bool): + journal_sequence (int): + projection_status (str): + balance_projection_pending (bool): + """ + + org_id: str + invoice_id: str + idempotency_key: str + already_recorded: bool + journal_sequence: int + projection_status: str + balance_projection_pending: bool + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + invoice_id = self.invoice_id + + idempotency_key = self.idempotency_key + + already_recorded = self.already_recorded + + journal_sequence = self.journal_sequence + + projection_status = self.projection_status + + balance_projection_pending = self.balance_projection_pending + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "invoiceId": invoice_id, + "idempotencyKey": idempotency_key, + "alreadyRecorded": already_recorded, + "journalSequence": journal_sequence, + "projectionStatus": projection_status, + "balanceProjectionPending": balance_projection_pending, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + org_id = d.pop("orgId") + + invoice_id = d.pop("invoiceId") + + idempotency_key = d.pop("idempotencyKey") + + already_recorded = d.pop("alreadyRecorded") + + journal_sequence = d.pop("journalSequence") + + projection_status = d.pop("projectionStatus") + + balance_projection_pending = d.pop("balanceProjectionPending") + + admin_invoice_record_payment_response = cls( + org_id=org_id, + invoice_id=invoice_id, + idempotency_key=idempotency_key, + already_recorded=already_recorded, + journal_sequence=journal_sequence, + projection_status=projection_status, + balance_projection_pending=balance_projection_pending, + ) + + admin_invoice_record_payment_response.additional_properties = d + return admin_invoice_record_payment_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_response.py b/src/graphn/_generated/models/admin_invoice_response.py new file mode 100644 index 0000000..74b74ea --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_response.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.invoice import Invoice + + +T = TypeVar("T", bound="AdminInvoiceResponse") + + +@_attrs_define +class AdminInvoiceResponse: + """ + Attributes: + invoice (Invoice): + """ + + invoice: Invoice + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + invoice = self.invoice.to_dict() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "invoice": invoice, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.invoice import Invoice + + d = dict(src_dict) + invoice = Invoice.from_dict(d.pop("invoice")) + + admin_invoice_response = cls( + invoice=invoice, + ) + + admin_invoice_response.additional_properties = d + return admin_invoice_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_revision.py b/src/graphn/_generated/models/admin_invoice_revision.py new file mode 100644 index 0000000..8ff0d11 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_revision.py @@ -0,0 +1,159 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.admin_invoice_discount import AdminInvoiceDiscount + + +T = TypeVar("T", bound="AdminInvoiceRevision") + + +@_attrs_define +class AdminInvoiceRevision: + """ + Attributes: + revision (int): + invoice_id (str): + status (str): + root_invoice_id (str): + original_amount_cents (int): + adjusted_amount_cents (int): + created_at (datetime.datetime): + supersedes_invoice_id (str | Unset): + status_updated_at (datetime.datetime | Unset): + discount (AdminInvoiceDiscount | Unset): + """ + + revision: int + invoice_id: str + status: str + root_invoice_id: str + original_amount_cents: int + adjusted_amount_cents: int + created_at: datetime.datetime + supersedes_invoice_id: str | Unset = UNSET + status_updated_at: datetime.datetime | Unset = UNSET + discount: AdminInvoiceDiscount | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + revision = self.revision + + invoice_id = self.invoice_id + + status = self.status + + root_invoice_id = self.root_invoice_id + + original_amount_cents = self.original_amount_cents + + adjusted_amount_cents = self.adjusted_amount_cents + + created_at = self.created_at.isoformat() + + supersedes_invoice_id = self.supersedes_invoice_id + + status_updated_at: str | Unset = UNSET + if not isinstance(self.status_updated_at, Unset): + status_updated_at = self.status_updated_at.isoformat() + + discount: dict[str, Any] | Unset = UNSET + if not isinstance(self.discount, Unset): + discount = self.discount.to_dict() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "revision": revision, + "invoiceId": invoice_id, + "status": status, + "rootInvoiceId": root_invoice_id, + "originalAmountCents": original_amount_cents, + "adjustedAmountCents": adjusted_amount_cents, + "createdAt": created_at, + } + ) + if supersedes_invoice_id is not UNSET: + field_dict["supersedesInvoiceId"] = supersedes_invoice_id + if status_updated_at is not UNSET: + field_dict["statusUpdatedAt"] = status_updated_at + if discount is not UNSET: + field_dict["discount"] = discount + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_discount import AdminInvoiceDiscount + + d = dict(src_dict) + revision = d.pop("revision") + + invoice_id = d.pop("invoiceId") + + status = d.pop("status") + + root_invoice_id = d.pop("rootInvoiceId") + + original_amount_cents = d.pop("originalAmountCents") + + adjusted_amount_cents = d.pop("adjustedAmountCents") + + created_at = datetime.datetime.fromisoformat(d.pop("createdAt")) + + supersedes_invoice_id = d.pop("supersedesInvoiceId", UNSET) + + _status_updated_at = d.pop("statusUpdatedAt", UNSET) + status_updated_at: datetime.datetime | Unset + if isinstance(_status_updated_at, Unset): + status_updated_at = UNSET + else: + status_updated_at = datetime.datetime.fromisoformat(_status_updated_at) + + _discount = d.pop("discount", UNSET) + discount: AdminInvoiceDiscount | Unset + if isinstance(_discount, Unset): + discount = UNSET + else: + discount = AdminInvoiceDiscount.from_dict(_discount) + + admin_invoice_revision = cls( + revision=revision, + invoice_id=invoice_id, + status=status, + root_invoice_id=root_invoice_id, + original_amount_cents=original_amount_cents, + adjusted_amount_cents=adjusted_amount_cents, + created_at=created_at, + supersedes_invoice_id=supersedes_invoice_id, + status_updated_at=status_updated_at, + discount=discount, + ) + + admin_invoice_revision.additional_properties = d + return admin_invoice_revision + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_revisions_response.py b/src/graphn/_generated/models/admin_invoice_revisions_response.py new file mode 100644 index 0000000..d9fd382 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_revisions_response.py @@ -0,0 +1,100 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.admin_invoice_revision import AdminInvoiceRevision + + +T = TypeVar("T", bound="AdminInvoiceRevisionsResponse") + + +@_attrs_define +class AdminInvoiceRevisionsResponse: + """ + Attributes: + org_id (str): + period_start (datetime.datetime): + period_end (datetime.datetime): + revisions (list[AdminInvoiceRevision]): + """ + + org_id: str + period_start: datetime.datetime + period_end: datetime.datetime + revisions: list[AdminInvoiceRevision] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + revisions = [] + for revisions_item_data in self.revisions: + revisions_item = revisions_item_data.to_dict() + revisions.append(revisions_item) + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "periodStart": period_start, + "periodEnd": period_end, + "revisions": revisions, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.admin_invoice_revision import AdminInvoiceRevision + + d = dict(src_dict) + org_id = d.pop("orgId") + + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + revisions = [] + _revisions = d.pop("revisions") + for revisions_item_data in _revisions: + revisions_item = AdminInvoiceRevision.from_dict(revisions_item_data) + + revisions.append(revisions_item) + + admin_invoice_revisions_response = cls( + org_id=org_id, + period_start=period_start, + period_end=period_end, + revisions=revisions, + ) + + admin_invoice_revisions_response.additional_properties = d + return admin_invoice_revisions_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_void_request.py b/src/graphn/_generated/models/admin_invoice_void_request.py new file mode 100644 index 0000000..1dbb817 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_void_request.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="AdminInvoiceVoidRequest") + + +@_attrs_define +class AdminInvoiceVoidRequest: + """ + Attributes: + from_ (datetime.datetime): + to (datetime.datetime): + comment (str): + """ + + from_: datetime.datetime + to: datetime.datetime + comment: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + from_ = self.from_.isoformat() + + to = self.to.isoformat() + + comment = self.comment + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "from": from_, + "to": to, + "comment": comment, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + from_ = datetime.datetime.fromisoformat(d.pop("from")) + + to = datetime.datetime.fromisoformat(d.pop("to")) + + comment = d.pop("comment") + + admin_invoice_void_request = cls( + from_=from_, + to=to, + comment=comment, + ) + + admin_invoice_void_request.additional_properties = d + return admin_invoice_void_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoice_void_response.py b/src/graphn/_generated/models/admin_invoice_void_response.py new file mode 100644 index 0000000..ab38546 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoice_void_response.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AdminInvoiceVoidResponse") + + +@_attrs_define +class AdminInvoiceVoidResponse: + """ + Attributes: + org_id (str): + period_start (datetime.datetime): + period_end (datetime.datetime): + invoice_id (str): + invoice_status (str): + amount_due_cents (int): + hosted_invoice_url (str | Unset): + """ + + org_id: str + period_start: datetime.datetime + period_end: datetime.datetime + invoice_id: str + invoice_status: str + amount_due_cents: int + hosted_invoice_url: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + invoice_id = self.invoice_id + + invoice_status = self.invoice_status + + amount_due_cents = self.amount_due_cents + + hosted_invoice_url = self.hosted_invoice_url + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "periodStart": period_start, + "periodEnd": period_end, + "invoiceId": invoice_id, + "invoiceStatus": invoice_status, + "amountDueCents": amount_due_cents, + } + ) + if hosted_invoice_url is not UNSET: + field_dict["hostedInvoiceUrl"] = hosted_invoice_url + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + org_id = d.pop("orgId") + + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + invoice_id = d.pop("invoiceId") + + invoice_status = d.pop("invoiceStatus") + + amount_due_cents = d.pop("amountDueCents") + + hosted_invoice_url = d.pop("hostedInvoiceUrl", UNSET) + + admin_invoice_void_response = cls( + org_id=org_id, + period_start=period_start, + period_end=period_end, + invoice_id=invoice_id, + invoice_status=invoice_status, + amount_due_cents=amount_due_cents, + hosted_invoice_url=hosted_invoice_url, + ) + + admin_invoice_void_response.additional_properties = d + return admin_invoice_void_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_invoices_response.py b/src/graphn/_generated/models/admin_invoices_response.py new file mode 100644 index 0000000..9e08aa6 --- /dev/null +++ b/src/graphn/_generated/models/admin_invoices_response.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.admin_invoices_response_empty_reason import ( + AdminInvoicesResponseEmptyReason, +) +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.invoice import Invoice + + +T = TypeVar("T", bound="AdminInvoicesResponse") + + +@_attrs_define +class AdminInvoicesResponse: + """ + Attributes: + invoices (list[Invoice]): + empty_reason (AdminInvoicesResponseEmptyReason | Unset): + """ + + invoices: list[Invoice] + empty_reason: AdminInvoicesResponseEmptyReason | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + invoices = [] + for invoices_item_data in self.invoices: + invoices_item = invoices_item_data.to_dict() + invoices.append(invoices_item) + + empty_reason: str | Unset = UNSET + if not isinstance(self.empty_reason, Unset): + empty_reason = self.empty_reason.value + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "invoices": invoices, + } + ) + if empty_reason is not UNSET: + field_dict["emptyReason"] = empty_reason + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.invoice import Invoice + + d = dict(src_dict) + invoices = [] + _invoices = d.pop("invoices") + for invoices_item_data in _invoices: + invoices_item = Invoice.from_dict(invoices_item_data) + + invoices.append(invoices_item) + + _empty_reason = d.pop("emptyReason", UNSET) + empty_reason: AdminInvoicesResponseEmptyReason | Unset + if isinstance(_empty_reason, Unset): + empty_reason = UNSET + else: + empty_reason = AdminInvoicesResponseEmptyReason(_empty_reason) + + admin_invoices_response = cls( + invoices=invoices, + empty_reason=empty_reason, + ) + + admin_invoices_response.additional_properties = d + return admin_invoices_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/list_billing_invoices_response_200_empty_reason.py b/src/graphn/_generated/models/admin_invoices_response_empty_reason.py similarity index 68% rename from src/graphn/_generated/models/list_billing_invoices_response_200_empty_reason.py rename to src/graphn/_generated/models/admin_invoices_response_empty_reason.py index 6f862e5..4ad2382 100644 --- a/src/graphn/_generated/models/list_billing_invoices_response_200_empty_reason.py +++ b/src/graphn/_generated/models/admin_invoices_response_empty_reason.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ListBillingInvoicesResponse200EmptyReason(str, Enum): +class AdminInvoicesResponseEmptyReason(StrEnum): NO_BILLING_HISTORY = "no_billing_history" STATEMENTS_NOT_GENERATED_YET = "statements_not_generated_yet" diff --git a/src/graphn/_generated/models/admin_list_billing_statements_response_200.py b/src/graphn/_generated/models/admin_list_billing_statements_response_200.py new file mode 100644 index 0000000..240dac0 --- /dev/null +++ b/src/graphn/_generated/models/admin_list_billing_statements_response_200.py @@ -0,0 +1,98 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.admin_list_billing_statements_response_200_empty_reason import ( + AdminListBillingStatementsResponse200EmptyReason, +) +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.billing_statement_summary import BillingStatementSummary + + +T = TypeVar("T", bound="AdminListBillingStatementsResponse200") + + +@_attrs_define +class AdminListBillingStatementsResponse200: + """ + Attributes: + statements (list[BillingStatementSummary]): + empty_reason (AdminListBillingStatementsResponse200EmptyReason | Unset): + """ + + statements: list[BillingStatementSummary] + empty_reason: AdminListBillingStatementsResponse200EmptyReason | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + statements = [] + for statements_item_data in self.statements: + statements_item = statements_item_data.to_dict() + statements.append(statements_item) + + empty_reason: str | Unset = UNSET + if not isinstance(self.empty_reason, Unset): + empty_reason = self.empty_reason.value + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "statements": statements, + } + ) + if empty_reason is not UNSET: + field_dict["emptyReason"] = empty_reason + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.billing_statement_summary import BillingStatementSummary + + d = dict(src_dict) + statements = [] + _statements = d.pop("statements") + for statements_item_data in _statements: + statements_item = BillingStatementSummary.from_dict(statements_item_data) + + statements.append(statements_item) + + _empty_reason = d.pop("emptyReason", UNSET) + empty_reason: AdminListBillingStatementsResponse200EmptyReason | Unset + if isinstance(_empty_reason, Unset): + empty_reason = UNSET + else: + empty_reason = AdminListBillingStatementsResponse200EmptyReason( + _empty_reason + ) + + admin_list_billing_statements_response_200 = cls( + statements=statements, + empty_reason=empty_reason, + ) + + admin_list_billing_statements_response_200.additional_properties = d + return admin_list_billing_statements_response_200 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/admin_list_billing_statements_response_200_empty_reason.py b/src/graphn/_generated/models/admin_list_billing_statements_response_200_empty_reason.py new file mode 100644 index 0000000..57b6daa --- /dev/null +++ b/src/graphn/_generated/models/admin_list_billing_statements_response_200_empty_reason.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class AdminListBillingStatementsResponse200EmptyReason(StrEnum): + NO_BILLING_HISTORY = "no_billing_history" + STATEMENTS_NOT_GENERATED_YET = "statements_not_generated_yet" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/agent.py b/src/graphn/_generated/models/agent.py index 094a9e1..bf89830 100644 --- a/src/graphn/_generated/models/agent.py +++ b/src/graphn/_generated/models/agent.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/agent_create.py b/src/graphn/_generated/models/agent_create.py index 8a0d71e..f2c2048 100644 --- a/src/graphn/_generated/models/agent_create.py +++ b/src/graphn/_generated/models/agent_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/agent_list.py b/src/graphn/_generated/models/agent_list.py index c2eee74..8eb436c 100644 --- a/src/graphn/_generated/models/agent_list.py +++ b/src/graphn/_generated/models/agent_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/agent_run_request.py b/src/graphn/_generated/models/agent_run_request.py index 4f88448..ce169d6 100644 --- a/src/graphn/_generated/models/agent_run_request.py +++ b/src/graphn/_generated/models/agent_run_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="AgentRunRequest") diff --git a/src/graphn/_generated/models/agent_spec.py b/src/graphn/_generated/models/agent_spec.py index 2a9f3e1..bb5897f 100644 --- a/src/graphn/_generated/models/agent_spec.py +++ b/src/graphn/_generated/models/agent_spec.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/agent_spec_output_schema.py b/src/graphn/_generated/models/agent_spec_output_schema.py index 9517ee4..3c732b3 100644 --- a/src/graphn/_generated/models/agent_spec_output_schema.py +++ b/src/graphn/_generated/models/agent_spec_output_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AgentSpecOutputSchema") @_attrs_define class AgentSpecOutputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/agent_update.py b/src/graphn/_generated/models/agent_update.py index 221a3ca..f03ad67 100644 --- a/src/graphn/_generated/models/agent_update.py +++ b/src/graphn/_generated/models/agent_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/api_key.py b/src/graphn/_generated/models/api_key.py index b83077c..e6d3917 100644 --- a/src/graphn/_generated/models/api_key.py +++ b/src/graphn/_generated/models/api_key.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/api_key_create.py b/src/graphn/_generated/models/api_key_create.py index 14ef23a..c92e218 100644 --- a/src/graphn/_generated/models/api_key_create.py +++ b/src/graphn/_generated/models/api_key_create.py @@ -2,10 +2,9 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/api_key_created.py b/src/graphn/_generated/models/api_key_created.py index bb2003e..6956a97 100644 --- a/src/graphn/_generated/models/api_key_created.py +++ b/src/graphn/_generated/models/api_key_created.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/api_key_list.py b/src/graphn/_generated/models/api_key_list.py index a9d7406..1b4d373 100644 --- a/src/graphn/_generated/models/api_key_list.py +++ b/src/graphn/_generated/models/api_key_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/architecture_info.py b/src/graphn/_generated/models/architecture_info.py index 25f7128..7bf8c99 100644 --- a/src/graphn/_generated/models/architecture_info.py +++ b/src/graphn/_generated/models/architecture_info.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="ArchitectureInfo") diff --git a/src/graphn/_generated/models/async_run.py b/src/graphn/_generated/models/async_run.py index 57dd9c3..cdf97a6 100644 --- a/src/graphn/_generated/models/async_run.py +++ b/src/graphn/_generated/models/async_run.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/async_run_error.py b/src/graphn/_generated/models/async_run_error.py index fa5a603..2a158ae 100644 --- a/src/graphn/_generated/models/async_run_error.py +++ b/src/graphn/_generated/models/async_run_error.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncRunError") @_attrs_define class AsyncRunError: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_run_list.py b/src/graphn/_generated/models/async_run_list.py index c83d4ee..3be1262 100644 --- a/src/graphn/_generated/models/async_run_list.py +++ b/src/graphn/_generated/models/async_run_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/async_run_metadata.py b/src/graphn/_generated/models/async_run_metadata.py index a73e059..6c18e59 100644 --- a/src/graphn/_generated/models/async_run_metadata.py +++ b/src/graphn/_generated/models/async_run_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncRunMetadata") @_attrs_define class AsyncRunMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_run_output.py b/src/graphn/_generated/models/async_run_output.py index 8d2cbf1..bea5ce9 100644 --- a/src/graphn/_generated/models/async_run_output.py +++ b/src/graphn/_generated/models/async_run_output.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncRunOutput") @_attrs_define class AsyncRunOutput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_run_result_error.py b/src/graphn/_generated/models/async_run_result_error.py index 542e8e9..ef5de2c 100644 --- a/src/graphn/_generated/models/async_run_result_error.py +++ b/src/graphn/_generated/models/async_run_result_error.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncRunResultError") @_attrs_define class AsyncRunResultError: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_run_usage.py b/src/graphn/_generated/models/async_run_usage.py index 204abe9..34439ca 100644 --- a/src/graphn/_generated/models/async_run_usage.py +++ b/src/graphn/_generated/models/async_run_usage.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncRunUsage") @_attrs_define class AsyncRunUsage: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_submit_request.py b/src/graphn/_generated/models/async_submit_request.py index 8463369..51936d0 100644 --- a/src/graphn/_generated/models/async_submit_request.py +++ b/src/graphn/_generated/models/async_submit_request.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/async_submit_request_input.py b/src/graphn/_generated/models/async_submit_request_input.py index ea18600..6798370 100644 --- a/src/graphn/_generated/models/async_submit_request_input.py +++ b/src/graphn/_generated/models/async_submit_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncSubmitRequestInput") @_attrs_define class AsyncSubmitRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_submit_request_metadata.py b/src/graphn/_generated/models/async_submit_request_metadata.py index 5de2c7e..38fe66b 100644 --- a/src/graphn/_generated/models/async_submit_request_metadata.py +++ b/src/graphn/_generated/models/async_submit_request_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncSubmitRequestMetadata") @_attrs_define class AsyncSubmitRequestMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_submit_request_parameters.py b/src/graphn/_generated/models/async_submit_request_parameters.py index 004db9b..eca2d78 100644 --- a/src/graphn/_generated/models/async_submit_request_parameters.py +++ b/src/graphn/_generated/models/async_submit_request_parameters.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncSubmitRequestParameters") @_attrs_define class AsyncSubmitRequestParameters: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/async_submit_response.py b/src/graphn/_generated/models/async_submit_response.py index e7a8ebe..d0434aa 100644 --- a/src/graphn/_generated/models/async_submit_response.py +++ b/src/graphn/_generated/models/async_submit_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="AsyncSubmitResponse") diff --git a/src/graphn/_generated/models/batch.py b/src/graphn/_generated/models/batch.py index 11ce583..73c4015 100644 --- a/src/graphn/_generated/models/batch.py +++ b/src/graphn/_generated/models/batch.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_document_result.py b/src/graphn/_generated/models/batch_document_result.py index 3e53762..6189b3d 100644 --- a/src/graphn/_generated/models/batch_document_result.py +++ b/src/graphn/_generated/models/batch_document_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_documents_response.py b/src/graphn/_generated/models/batch_documents_response.py index 2356aaa..f774e1b 100644 --- a/src/graphn/_generated/models/batch_documents_response.py +++ b/src/graphn/_generated/models/batch_documents_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.batch_document_result import BatchDocumentResult diff --git a/src/graphn/_generated/models/batch_file_ref.py b/src/graphn/_generated/models/batch_file_ref.py index 6b206f4..8fe2691 100644 --- a/src/graphn/_generated/models/batch_file_ref.py +++ b/src/graphn/_generated/models/batch_file_ref.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="BatchFileRef") diff --git a/src/graphn/_generated/models/batch_input_item.py b/src/graphn/_generated/models/batch_input_item.py index f6cc7c4..1e76dfc 100644 --- a/src/graphn/_generated/models/batch_input_item.py +++ b/src/graphn/_generated/models/batch_input_item.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_input_item_input.py b/src/graphn/_generated/models/batch_input_item_input.py index 01a1b2d..394be68 100644 --- a/src/graphn/_generated/models/batch_input_item_input.py +++ b/src/graphn/_generated/models/batch_input_item_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BatchInputItemInput") @_attrs_define class BatchInputItemInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/batch_item.py b/src/graphn/_generated/models/batch_item.py index 742d766..9c56d60 100644 --- a/src/graphn/_generated/models/batch_item.py +++ b/src/graphn/_generated/models/batch_item.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_item_error.py b/src/graphn/_generated/models/batch_item_error.py index 0f20295..36bdc18 100644 --- a/src/graphn/_generated/models/batch_item_error.py +++ b/src/graphn/_generated/models/batch_item_error.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BatchItemError") @_attrs_define class BatchItemError: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/batch_item_list.py b/src/graphn/_generated/models/batch_item_list.py index bd3d8d6..2e062da 100644 --- a/src/graphn/_generated/models/batch_item_list.py +++ b/src/graphn/_generated/models/batch_item_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_item_output.py b/src/graphn/_generated/models/batch_item_output.py index 60f8842..5fbf052 100644 --- a/src/graphn/_generated/models/batch_item_output.py +++ b/src/graphn/_generated/models/batch_item_output.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BatchItemOutput") @_attrs_define class BatchItemOutput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/batch_knowledgebase_result.py b/src/graphn/_generated/models/batch_knowledgebase_result.py index eec0e0f..f7cd3ea 100644 --- a/src/graphn/_generated/models/batch_knowledgebase_result.py +++ b/src/graphn/_generated/models/batch_knowledgebase_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_knowledgebases_response.py b/src/graphn/_generated/models/batch_knowledgebases_response.py index 82636d2..1fe7123 100644 --- a/src/graphn/_generated/models/batch_knowledgebases_response.py +++ b/src/graphn/_generated/models/batch_knowledgebases_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.batch_knowledgebase_result import BatchKnowledgebaseResult diff --git a/src/graphn/_generated/models/batch_list.py b/src/graphn/_generated/models/batch_list.py index 4fd8286..057fcc6 100644 --- a/src/graphn/_generated/models/batch_list.py +++ b/src/graphn/_generated/models/batch_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_request_counts.py b/src/graphn/_generated/models/batch_request_counts.py index d9653b5..31c14d8 100644 --- a/src/graphn/_generated/models/batch_request_counts.py +++ b/src/graphn/_generated/models/batch_request_counts.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="BatchRequestCounts") diff --git a/src/graphn/_generated/models/batch_submit_request.py b/src/graphn/_generated/models/batch_submit_request.py index 6e8f018..0429223 100644 --- a/src/graphn/_generated/models/batch_submit_request.py +++ b/src/graphn/_generated/models/batch_submit_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_submit_request_metadata.py b/src/graphn/_generated/models/batch_submit_request_metadata.py index 16f8c71..8997e12 100644 --- a/src/graphn/_generated/models/batch_submit_request_metadata.py +++ b/src/graphn/_generated/models/batch_submit_request_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BatchSubmitRequestMetadata") @_attrs_define class BatchSubmitRequestMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/batch_submit_request_parameters.py b/src/graphn/_generated/models/batch_submit_request_parameters.py index fdf8018..3c7b9fc 100644 --- a/src/graphn/_generated/models/batch_submit_request_parameters.py +++ b/src/graphn/_generated/models/batch_submit_request_parameters.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BatchSubmitRequestParameters") @_attrs_define class BatchSubmitRequestParameters: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/batch_submit_response.py b/src/graphn/_generated/models/batch_submit_response.py index 8354bba..ab663e8 100644 --- a/src/graphn/_generated/models/batch_submit_response.py +++ b/src/graphn/_generated/models/batch_submit_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.batch_request_counts import BatchRequestCounts diff --git a/src/graphn/_generated/models/batch_update_item.py b/src/graphn/_generated/models/batch_update_item.py index b569eac..ed42ed6 100644 --- a/src/graphn/_generated/models/batch_update_item.py +++ b/src/graphn/_generated/models/batch_update_item.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/batch_update_knowledgebases_request.py b/src/graphn/_generated/models/batch_update_knowledgebases_request.py index eeb19e8..1197725 100644 --- a/src/graphn/_generated/models/batch_update_knowledgebases_request.py +++ b/src/graphn/_generated/models/batch_update_knowledgebases_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.batch_update_item import BatchUpdateItem diff --git a/src/graphn/_generated/models/billing_account.py b/src/graphn/_generated/models/billing_account.py index 439b1ee..e509d03 100644 --- a/src/graphn/_generated/models/billing_account.py +++ b/src/graphn/_generated/models/billing_account.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/billing_entitlements.py b/src/graphn/_generated/models/billing_entitlements.py index 7f472c9..3d1cc69 100644 --- a/src/graphn/_generated/models/billing_entitlements.py +++ b/src/graphn/_generated/models/billing_entitlements.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/billing_grant_result.py b/src/graphn/_generated/models/billing_grant_result.py index eb70b7a..529c719 100644 --- a/src/graphn/_generated/models/billing_grant_result.py +++ b/src/graphn/_generated/models/billing_grant_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.billing_grant_result_new_status import BillingGrantResultNewStatus from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/billing_grant_result_new_status.py b/src/graphn/_generated/models/billing_grant_result_new_status.py index 1718f72..3836dff 100644 --- a/src/graphn/_generated/models/billing_grant_result_new_status.py +++ b/src/graphn/_generated/models/billing_grant_result_new_status.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class BillingGrantResultNewStatus(str, Enum): +class BillingGrantResultNewStatus(StrEnum): LOW = "low" OK = "ok" OUT_OF_BALANCE = "out_of_balance" diff --git a/src/graphn/_generated/models/billing_settings_update.py b/src/graphn/_generated/models/billing_settings_update.py index 963b403..53105e4 100644 --- a/src/graphn/_generated/models/billing_settings_update.py +++ b/src/graphn/_generated/models/billing_settings_update.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/billing_statement_detail.py b/src/graphn/_generated/models/billing_statement_detail.py new file mode 100644 index 0000000..738804b --- /dev/null +++ b/src/graphn/_generated/models/billing_statement_detail.py @@ -0,0 +1,214 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.usage_day import UsageDay + + +T = TypeVar("T", bound="BillingStatementDetail") + + +@_attrs_define +class BillingStatementDetail: + """ + Attributes: + org_id (str): + period_start (datetime.datetime): + period_end (datetime.datetime): + status (str): + opening_cents (int): + usage_cents (int): + credited_cents (int): + debited_cents (int): + credits_cents (int): + closing_cents (int): + amount_due_cents (int): + revision (int): + generated_at (datetime.datetime): + input_fingerprint (str | Unset): + usage_by_day (list[UsageDay] | Unset): + statement_pdf (str | Unset): + statement_preview_url (str | Unset): + """ + + org_id: str + period_start: datetime.datetime + period_end: datetime.datetime + status: str + opening_cents: int + usage_cents: int + credited_cents: int + debited_cents: int + credits_cents: int + closing_cents: int + amount_due_cents: int + revision: int + generated_at: datetime.datetime + input_fingerprint: str | Unset = UNSET + usage_by_day: list[UsageDay] | Unset = UNSET + statement_pdf: str | Unset = UNSET + statement_preview_url: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + org_id = self.org_id + + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + status = self.status + + opening_cents = self.opening_cents + + usage_cents = self.usage_cents + + credited_cents = self.credited_cents + + debited_cents = self.debited_cents + + credits_cents = self.credits_cents + + closing_cents = self.closing_cents + + amount_due_cents = self.amount_due_cents + + revision = self.revision + + generated_at = self.generated_at.isoformat() + + input_fingerprint = self.input_fingerprint + + usage_by_day: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.usage_by_day, Unset): + usage_by_day = [] + for usage_by_day_item_data in self.usage_by_day: + usage_by_day_item = usage_by_day_item_data.to_dict() + usage_by_day.append(usage_by_day_item) + + statement_pdf = self.statement_pdf + + statement_preview_url = self.statement_preview_url + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "orgId": org_id, + "periodStart": period_start, + "periodEnd": period_end, + "status": status, + "openingCents": opening_cents, + "usageCents": usage_cents, + "creditedCents": credited_cents, + "debitedCents": debited_cents, + "creditsCents": credits_cents, + "closingCents": closing_cents, + "amountDueCents": amount_due_cents, + "revision": revision, + "generatedAt": generated_at, + } + ) + if input_fingerprint is not UNSET: + field_dict["inputFingerprint"] = input_fingerprint + if usage_by_day is not UNSET: + field_dict["usageByDay"] = usage_by_day + if statement_pdf is not UNSET: + field_dict["statementPdf"] = statement_pdf + if statement_preview_url is not UNSET: + field_dict["statementPreviewUrl"] = statement_preview_url + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.usage_day import UsageDay + + d = dict(src_dict) + org_id = d.pop("orgId") + + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + status = d.pop("status") + + opening_cents = d.pop("openingCents") + + usage_cents = d.pop("usageCents") + + credited_cents = d.pop("creditedCents") + + debited_cents = d.pop("debitedCents") + + credits_cents = d.pop("creditsCents") + + closing_cents = d.pop("closingCents") + + amount_due_cents = d.pop("amountDueCents") + + revision = d.pop("revision") + + generated_at = datetime.datetime.fromisoformat(d.pop("generatedAt")) + + input_fingerprint = d.pop("inputFingerprint", UNSET) + + _usage_by_day = d.pop("usageByDay", UNSET) + usage_by_day: list[UsageDay] | Unset = UNSET + if _usage_by_day is not UNSET: + usage_by_day = [] + for usage_by_day_item_data in _usage_by_day: + usage_by_day_item = UsageDay.from_dict(usage_by_day_item_data) + + usage_by_day.append(usage_by_day_item) + + statement_pdf = d.pop("statementPdf", UNSET) + + statement_preview_url = d.pop("statementPreviewUrl", UNSET) + + billing_statement_detail = cls( + org_id=org_id, + period_start=period_start, + period_end=period_end, + status=status, + opening_cents=opening_cents, + usage_cents=usage_cents, + credited_cents=credited_cents, + debited_cents=debited_cents, + credits_cents=credits_cents, + closing_cents=closing_cents, + amount_due_cents=amount_due_cents, + revision=revision, + generated_at=generated_at, + input_fingerprint=input_fingerprint, + usage_by_day=usage_by_day, + statement_pdf=statement_pdf, + statement_preview_url=statement_preview_url, + ) + + billing_statement_detail.additional_properties = d + return billing_statement_detail + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/billing_statement_summary.py b/src/graphn/_generated/models/billing_statement_summary.py new file mode 100644 index 0000000..e3ba36a --- /dev/null +++ b/src/graphn/_generated/models/billing_statement_summary.py @@ -0,0 +1,152 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="BillingStatementSummary") + + +@_attrs_define +class BillingStatementSummary: + """ + Attributes: + period_start (datetime.datetime): + period_end (datetime.datetime): + status (str): + opening_cents (int | Unset): + usage_cents (int | Unset): + credited_cents (int | Unset): + debited_cents (int | Unset): + closing_cents (int | Unset): + amount_due_cents (int | Unset): + revision (int | Unset): + input_fingerprint (str | Unset): + """ + + period_start: datetime.datetime + period_end: datetime.datetime + status: str + opening_cents: int | Unset = UNSET + usage_cents: int | Unset = UNSET + credited_cents: int | Unset = UNSET + debited_cents: int | Unset = UNSET + closing_cents: int | Unset = UNSET + amount_due_cents: int | Unset = UNSET + revision: int | Unset = UNSET + input_fingerprint: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + status = self.status + + opening_cents = self.opening_cents + + usage_cents = self.usage_cents + + credited_cents = self.credited_cents + + debited_cents = self.debited_cents + + closing_cents = self.closing_cents + + amount_due_cents = self.amount_due_cents + + revision = self.revision + + input_fingerprint = self.input_fingerprint + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "periodStart": period_start, + "periodEnd": period_end, + "status": status, + } + ) + if opening_cents is not UNSET: + field_dict["openingCents"] = opening_cents + if usage_cents is not UNSET: + field_dict["usageCents"] = usage_cents + if credited_cents is not UNSET: + field_dict["creditedCents"] = credited_cents + if debited_cents is not UNSET: + field_dict["debitedCents"] = debited_cents + if closing_cents is not UNSET: + field_dict["closingCents"] = closing_cents + if amount_due_cents is not UNSET: + field_dict["amountDueCents"] = amount_due_cents + if revision is not UNSET: + field_dict["revision"] = revision + if input_fingerprint is not UNSET: + field_dict["inputFingerprint"] = input_fingerprint + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + status = d.pop("status") + + opening_cents = d.pop("openingCents", UNSET) + + usage_cents = d.pop("usageCents", UNSET) + + credited_cents = d.pop("creditedCents", UNSET) + + debited_cents = d.pop("debitedCents", UNSET) + + closing_cents = d.pop("closingCents", UNSET) + + amount_due_cents = d.pop("amountDueCents", UNSET) + + revision = d.pop("revision", UNSET) + + input_fingerprint = d.pop("inputFingerprint", UNSET) + + billing_statement_summary = cls( + period_start=period_start, + period_end=period_end, + status=status, + opening_cents=opening_cents, + usage_cents=usage_cents, + credited_cents=credited_cents, + debited_cents=debited_cents, + closing_cents=closing_cents, + amount_due_cents=amount_due_cents, + revision=revision, + input_fingerprint=input_fingerprint, + ) + + billing_statement_summary.additional_properties = d + return billing_statement_summary + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/billing_top_up_request.py b/src/graphn/_generated/models/billing_top_up_request.py index f788a39..09b186f 100644 --- a/src/graphn/_generated/models/billing_top_up_request.py +++ b/src/graphn/_generated/models/billing_top_up_request.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BillingTopUpRequest") diff --git a/src/graphn/_generated/models/billing_usage.py b/src/graphn/_generated/models/billing_usage.py index c6ffdcc..40bb134 100644 --- a/src/graphn/_generated/models/billing_usage.py +++ b/src/graphn/_generated/models/billing_usage.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.billing_usage_time_series_item import BillingUsageTimeSeriesItem diff --git a/src/graphn/_generated/models/billing_usage_time_series_item.py b/src/graphn/_generated/models/billing_usage_time_series_item.py index 91d3c73..eea03a7 100644 --- a/src/graphn/_generated/models/billing_usage_time_series_item.py +++ b/src/graphn/_generated/models/billing_usage_time_series_item.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BillingUsageTimeSeriesItem") diff --git a/src/graphn/_generated/models/blueprint.py b/src/graphn/_generated/models/blueprint.py index f327f10..e1b8cc8 100644 --- a/src/graphn/_generated/models/blueprint.py +++ b/src/graphn/_generated/models/blueprint.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/blueprint_agents_item.py b/src/graphn/_generated/models/blueprint_agents_item.py index 80f04ba..b4c6dbf 100644 --- a/src/graphn/_generated/models/blueprint_agents_item.py +++ b/src/graphn/_generated/models/blueprint_agents_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BlueprintAgentsItem") @_attrs_define class BlueprintAgentsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/blueprint_deploy_request.py b/src/graphn/_generated/models/blueprint_deploy_request.py index b6c7762..19e49ef 100644 --- a/src/graphn/_generated/models/blueprint_deploy_request.py +++ b/src/graphn/_generated/models/blueprint_deploy_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="BlueprintDeployRequest") diff --git a/src/graphn/_generated/models/blueprint_deploy_resource_i_ds.py b/src/graphn/_generated/models/blueprint_deploy_resource_i_ds.py new file mode 100644 index 0000000..217208a --- /dev/null +++ b/src/graphn/_generated/models/blueprint_deploy_resource_i_ds.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="BlueprintDeployResourceIDs") + + +@_attrs_define +class BlueprintDeployResourceIDs: + """ + Attributes: + agents (list[str]): + functions (list[str]): + mcp_servers (list[str]): + """ + + agents: list[str] + functions: list[str] + mcp_servers: list[str] + + def to_dict(self) -> dict[str, Any]: + agents = self.agents + + functions = self.functions + + mcp_servers = self.mcp_servers + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "agents": agents, + "functions": functions, + "mcp_servers": mcp_servers, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + agents = cast(list[str], d.pop("agents")) + + functions = cast(list[str], d.pop("functions")) + + mcp_servers = cast(list[str], d.pop("mcp_servers")) + + blueprint_deploy_resource_i_ds = cls( + agents=agents, + functions=functions, + mcp_servers=mcp_servers, + ) + + return blueprint_deploy_resource_i_ds diff --git a/src/graphn/_generated/models/blueprint_deploy_response.py b/src/graphn/_generated/models/blueprint_deploy_response.py index da8ecd1..7f2e34a 100644 --- a/src/graphn/_generated/models/blueprint_deploy_response.py +++ b/src/graphn/_generated/models/blueprint_deploy_response.py @@ -1,10 +1,13 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self + +if TYPE_CHECKING: + from ..models.blueprint_deploy_resource_i_ds import BlueprintDeployResourceIDs + T = TypeVar("T", bound="BlueprintDeployResponse") @@ -15,22 +18,27 @@ class BlueprintDeployResponse: Attributes: workflow_id (str): name (str): + resource_ids (BlueprintDeployResourceIDs): """ workflow_id: str name: str + resource_ids: BlueprintDeployResourceIDs def to_dict(self) -> dict[str, Any]: workflow_id = self.workflow_id name = self.name + resource_ids = self.resource_ids.to_dict() + field_dict: dict[str, Any] = {} field_dict.update( { "workflow_id": workflow_id, "name": name, + "resource_ids": resource_ids, } ) @@ -38,14 +46,19 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.blueprint_deploy_resource_i_ds import BlueprintDeployResourceIDs + d = dict(src_dict) workflow_id = d.pop("workflow_id") name = d.pop("name") + resource_ids = BlueprintDeployResourceIDs.from_dict(d.pop("resource_ids")) + blueprint_deploy_response = cls( workflow_id=workflow_id, name=name, + resource_ids=resource_ids, ) return blueprint_deploy_response diff --git a/src/graphn/_generated/models/blueprint_functions_item.py b/src/graphn/_generated/models/blueprint_functions_item.py index 7825d4f..77a1a1c 100644 --- a/src/graphn/_generated/models/blueprint_functions_item.py +++ b/src/graphn/_generated/models/blueprint_functions_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BlueprintFunctionsItem") @_attrs_define class BlueprintFunctionsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/blueprint_list.py b/src/graphn/_generated/models/blueprint_list.py index 55fec75..7c04fa3 100644 --- a/src/graphn/_generated/models/blueprint_list.py +++ b/src/graphn/_generated/models/blueprint_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.blueprint_summary import BlueprintSummary diff --git a/src/graphn/_generated/models/blueprint_mcp_servers_item.py b/src/graphn/_generated/models/blueprint_mcp_servers_item.py index 77654eb..c7f5e13 100644 --- a/src/graphn/_generated/models/blueprint_mcp_servers_item.py +++ b/src/graphn/_generated/models/blueprint_mcp_servers_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BlueprintMcpServersItem") @_attrs_define class BlueprintMcpServersItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/blueprint_summary.py b/src/graphn/_generated/models/blueprint_summary.py index 9108ffe..332ce4a 100644 --- a/src/graphn/_generated/models/blueprint_summary.py +++ b/src/graphn/_generated/models/blueprint_summary.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/builtin_function_info.py b/src/graphn/_generated/models/builtin_function_info.py index 7378fef..fb0a674 100644 --- a/src/graphn/_generated/models/builtin_function_info.py +++ b/src/graphn/_generated/models/builtin_function_info.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/builtin_function_info_parameters_schema.py b/src/graphn/_generated/models/builtin_function_info_parameters_schema.py index 59c0ec0..435e663 100644 --- a/src/graphn/_generated/models/builtin_function_info_parameters_schema.py +++ b/src/graphn/_generated/models/builtin_function_info_parameters_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BuiltinFunctionInfoParametersSchema") @_attrs_define class BuiltinFunctionInfoParametersSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/builtin_function_list.py b/src/graphn/_generated/models/builtin_function_list.py index b5ee439..9d111c0 100644 --- a/src/graphn/_generated/models/builtin_function_list.py +++ b/src/graphn/_generated/models/builtin_function_list.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.builtin_function_list_functions import BuiltinFunctionListFunctions diff --git a/src/graphn/_generated/models/builtin_function_list_functions.py b/src/graphn/_generated/models/builtin_function_list_functions.py index b04bf99..d3b9574 100644 --- a/src/graphn/_generated/models/builtin_function_list_functions.py +++ b/src/graphn/_generated/models/builtin_function_list_functions.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.builtin_function_info import BuiltinFunctionInfo @@ -16,8 +15,6 @@ @_attrs_define class BuiltinFunctionListFunctions: - """ """ - additional_properties: dict[str, BuiltinFunctionInfo] = _attrs_field( init=False, factory=dict ) diff --git a/src/graphn/_generated/models/bundle_resource_item.py b/src/graphn/_generated/models/bundle_resource_item.py index 8e756c7..25c3072 100644 --- a/src/graphn/_generated/models/bundle_resource_item.py +++ b/src/graphn/_generated/models/bundle_resource_item.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/bundle_resource_item_spec.py b/src/graphn/_generated/models/bundle_resource_item_spec.py index b4c7041..5cb34dd 100644 --- a/src/graphn/_generated/models/bundle_resource_item_spec.py +++ b/src/graphn/_generated/models/bundle_resource_item_spec.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="BundleResourceItemSpec") @_attrs_define class BundleResourceItemSpec: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/capability.py b/src/graphn/_generated/models/capability.py index 93d1bf1..8fbc55e 100644 --- a/src/graphn/_generated/models/capability.py +++ b/src/graphn/_generated/models/capability.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class Capability(str, Enum): +class Capability(StrEnum): EMBEDDING = "embedding" REASONING = "reasoning" TOOL_CALLING = "tool_calling" diff --git a/src/graphn/_generated/models/chat_completion_request.py b/src/graphn/_generated/models/chat_completion_request.py index 22ff744..73e59d5 100644 --- a/src/graphn/_generated/models/chat_completion_request.py +++ b/src/graphn/_generated/models/chat_completion_request.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/chat_completion_request_response_format.py b/src/graphn/_generated/models/chat_completion_request_response_format.py index 410722a..dda4b2f 100644 --- a/src/graphn/_generated/models/chat_completion_request_response_format.py +++ b/src/graphn/_generated/models/chat_completion_request_response_format.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestResponseFormat") @_attrs_define class ChatCompletionRequestResponseFormat: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py b/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py index c18fd49..53d24ef 100644 --- a/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py +++ b/src/graphn/_generated/models/chat_completion_request_tool_choice_type_1.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestToolChoiceType1") @_attrs_define class ChatCompletionRequestToolChoiceType1: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/chat_completion_request_tools_item.py b/src/graphn/_generated/models/chat_completion_request_tools_item.py index 45d7211..72edfbf 100644 --- a/src/graphn/_generated/models/chat_completion_request_tools_item.py +++ b/src/graphn/_generated/models/chat_completion_request_tools_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ChatCompletionRequestToolsItem") @_attrs_define class ChatCompletionRequestToolsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/chat_completion_response.py b/src/graphn/_generated/models/chat_completion_response.py index ae53044..15a784f 100644 --- a/src/graphn/_generated/models/chat_completion_response.py +++ b/src/graphn/_generated/models/chat_completion_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.chat_completion_response_object import ChatCompletionResponseObject from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/chat_completion_response_choices_item.py b/src/graphn/_generated/models/chat_completion_response_choices_item.py index c015fb6..bac2d83 100644 --- a/src/graphn/_generated/models/chat_completion_response_choices_item.py +++ b/src/graphn/_generated/models/chat_completion_response_choices_item.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/chat_completion_response_object.py b/src/graphn/_generated/models/chat_completion_response_object.py index 08946cc..f9fef28 100644 --- a/src/graphn/_generated/models/chat_completion_response_object.py +++ b/src/graphn/_generated/models/chat_completion_response_object.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ChatCompletionResponseObject(str, Enum): +class ChatCompletionResponseObject(StrEnum): CHAT_COMPLETION = "chat.completion" def __str__(self) -> str: diff --git a/src/graphn/_generated/models/chat_completion_response_usage.py b/src/graphn/_generated/models/chat_completion_response_usage.py index a9e24e0..38c85af 100644 --- a/src/graphn/_generated/models/chat_completion_response_usage.py +++ b/src/graphn/_generated/models/chat_completion_response_usage.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/chat_message.py b/src/graphn/_generated/models/chat_message.py index d1d4829..873402e 100644 --- a/src/graphn/_generated/models/chat_message.py +++ b/src/graphn/_generated/models/chat_message.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.chat_message_role import ChatMessageRole from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/chat_message_role.py b/src/graphn/_generated/models/chat_message_role.py index b9757ff..c08faf9 100644 --- a/src/graphn/_generated/models/chat_message_role.py +++ b/src/graphn/_generated/models/chat_message_role.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ChatMessageRole(str, Enum): +class ChatMessageRole(StrEnum): ASSISTANT = "assistant" SYSTEM = "system" TOOL = "tool" diff --git a/src/graphn/_generated/models/chat_message_tool_calls_item.py b/src/graphn/_generated/models/chat_message_tool_calls_item.py index 55417dc..bf521ec 100644 --- a/src/graphn/_generated/models/chat_message_tool_calls_item.py +++ b/src/graphn/_generated/models/chat_message_tool_calls_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ChatMessageToolCallsItem") @_attrs_define class ChatMessageToolCallsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/connection.py b/src/graphn/_generated/models/connection.py new file mode 100644 index 0000000..aeb7e38 --- /dev/null +++ b/src/graphn/_generated/models/connection.py @@ -0,0 +1,254 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +from ..models.connection_kind import ConnectionKind +from ..models.connection_status import ConnectionStatus +from ..models.connection_watch_status import ConnectionWatchStatus +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.connection_account_metadata import ConnectionAccountMetadata + + +T = TypeVar("T", bound="Connection") + + +@_attrs_define +class Connection: + """Workspace-owned authorization metadata. OAuth client secrets, access + tokens, refresh tokens, PKCE data, and account hashes are never returned. + + Attributes: + id (str): + workspace_id (str): + name (str): + kind (ConnectionKind): + provider_id (str): + status (ConnectionStatus): + granted_capabilities (list[str]): + granted_scopes (list[str]): + watch_status (ConnectionWatchStatus): + created_at (datetime.datetime): + updated_at (datetime.datetime): + resource_id (str | Unset): + account_label (str | Unset): + account_metadata (ConnectionAccountMetadata | Unset): + credential_expires_at (datetime.datetime | Unset): + last_validated_at (datetime.datetime | Unset): + last_error_code (str | Unset): + last_error_message (str | Unset): + watch_expires_at (datetime.datetime | Unset): + last_event_at (datetime.datetime | Unset): + """ + + id: str + workspace_id: str + name: str + kind: ConnectionKind + provider_id: str + status: ConnectionStatus + granted_capabilities: list[str] + granted_scopes: list[str] + watch_status: ConnectionWatchStatus + created_at: datetime.datetime + updated_at: datetime.datetime + resource_id: str | Unset = UNSET + account_label: str | Unset = UNSET + account_metadata: ConnectionAccountMetadata | Unset = UNSET + credential_expires_at: datetime.datetime | Unset = UNSET + last_validated_at: datetime.datetime | Unset = UNSET + last_error_code: str | Unset = UNSET + last_error_message: str | Unset = UNSET + watch_expires_at: datetime.datetime | Unset = UNSET + last_event_at: datetime.datetime | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + id = self.id + + workspace_id = self.workspace_id + + name = self.name + + kind = self.kind.value + + provider_id = self.provider_id + + status = self.status.value + + granted_capabilities = self.granted_capabilities + + granted_scopes = self.granted_scopes + + watch_status = self.watch_status.value + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + resource_id = self.resource_id + + account_label = self.account_label + + account_metadata: dict[str, Any] | Unset = UNSET + if not isinstance(self.account_metadata, Unset): + account_metadata = self.account_metadata.to_dict() + + credential_expires_at: str | Unset = UNSET + if not isinstance(self.credential_expires_at, Unset): + credential_expires_at = self.credential_expires_at.isoformat() + + last_validated_at: str | Unset = UNSET + if not isinstance(self.last_validated_at, Unset): + last_validated_at = self.last_validated_at.isoformat() + + last_error_code = self.last_error_code + + last_error_message = self.last_error_message + + watch_expires_at: str | Unset = UNSET + if not isinstance(self.watch_expires_at, Unset): + watch_expires_at = self.watch_expires_at.isoformat() + + last_event_at: str | Unset = UNSET + if not isinstance(self.last_event_at, Unset): + last_event_at = self.last_event_at.isoformat() + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "id": id, + "workspace_id": workspace_id, + "name": name, + "kind": kind, + "provider_id": provider_id, + "status": status, + "granted_capabilities": granted_capabilities, + "granted_scopes": granted_scopes, + "watch_status": watch_status, + "created_at": created_at, + "updated_at": updated_at, + } + ) + if resource_id is not UNSET: + field_dict["resource_id"] = resource_id + if account_label is not UNSET: + field_dict["account_label"] = account_label + if account_metadata is not UNSET: + field_dict["account_metadata"] = account_metadata + if credential_expires_at is not UNSET: + field_dict["credential_expires_at"] = credential_expires_at + if last_validated_at is not UNSET: + field_dict["last_validated_at"] = last_validated_at + if last_error_code is not UNSET: + field_dict["last_error_code"] = last_error_code + if last_error_message is not UNSET: + field_dict["last_error_message"] = last_error_message + if watch_expires_at is not UNSET: + field_dict["watch_expires_at"] = watch_expires_at + if last_event_at is not UNSET: + field_dict["last_event_at"] = last_event_at + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.connection_account_metadata import ConnectionAccountMetadata + + d = dict(src_dict) + id = d.pop("id") + + workspace_id = d.pop("workspace_id") + + name = d.pop("name") + + kind = ConnectionKind(d.pop("kind")) + + provider_id = d.pop("provider_id") + + status = ConnectionStatus(d.pop("status")) + + granted_capabilities = cast(list[str], d.pop("granted_capabilities")) + + granted_scopes = cast(list[str], d.pop("granted_scopes")) + + watch_status = ConnectionWatchStatus(d.pop("watch_status")) + + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) + + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) + + resource_id = d.pop("resource_id", UNSET) + + account_label = d.pop("account_label", UNSET) + + _account_metadata = d.pop("account_metadata", UNSET) + account_metadata: ConnectionAccountMetadata | Unset + if isinstance(_account_metadata, Unset): + account_metadata = UNSET + else: + account_metadata = ConnectionAccountMetadata.from_dict(_account_metadata) + + _credential_expires_at = d.pop("credential_expires_at", UNSET) + credential_expires_at: datetime.datetime | Unset + if isinstance(_credential_expires_at, Unset): + credential_expires_at = UNSET + else: + credential_expires_at = datetime.datetime.fromisoformat( + _credential_expires_at + ) + + _last_validated_at = d.pop("last_validated_at", UNSET) + last_validated_at: datetime.datetime | Unset + if isinstance(_last_validated_at, Unset): + last_validated_at = UNSET + else: + last_validated_at = datetime.datetime.fromisoformat(_last_validated_at) + + last_error_code = d.pop("last_error_code", UNSET) + + last_error_message = d.pop("last_error_message", UNSET) + + _watch_expires_at = d.pop("watch_expires_at", UNSET) + watch_expires_at: datetime.datetime | Unset + if isinstance(_watch_expires_at, Unset): + watch_expires_at = UNSET + else: + watch_expires_at = datetime.datetime.fromisoformat(_watch_expires_at) + + _last_event_at = d.pop("last_event_at", UNSET) + last_event_at: datetime.datetime | Unset + if isinstance(_last_event_at, Unset): + last_event_at = UNSET + else: + last_event_at = datetime.datetime.fromisoformat(_last_event_at) + + connection = cls( + id=id, + workspace_id=workspace_id, + name=name, + kind=kind, + provider_id=provider_id, + status=status, + granted_capabilities=granted_capabilities, + granted_scopes=granted_scopes, + watch_status=watch_status, + created_at=created_at, + updated_at=updated_at, + resource_id=resource_id, + account_label=account_label, + account_metadata=account_metadata, + credential_expires_at=credential_expires_at, + last_validated_at=last_validated_at, + last_error_code=last_error_code, + last_error_message=last_error_message, + watch_expires_at=watch_expires_at, + last_event_at=last_event_at, + ) + + return connection diff --git a/src/graphn/_generated/models/connection_account_metadata.py b/src/graphn/_generated/models/connection_account_metadata.py new file mode 100644 index 0000000..db4fa0b --- /dev/null +++ b/src/graphn/_generated/models/connection_account_metadata.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="ConnectionAccountMetadata") + + +@_attrs_define +class ConnectionAccountMetadata: + additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + connection_account_metadata = cls() + + connection_account_metadata.additional_properties = d + return connection_account_metadata + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/connection_authorization_challenge.py b/src/graphn/_generated/models/connection_authorization_challenge.py new file mode 100644 index 0000000..7e99892 --- /dev/null +++ b/src/graphn/_generated/models/connection_authorization_challenge.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="ConnectionAuthorizationChallenge") + + +@_attrs_define +class ConnectionAuthorizationChallenge: + """ + Attributes: + authorization_url (str): + expires_at (datetime.datetime): + """ + + authorization_url: str + expires_at: datetime.datetime + + def to_dict(self) -> dict[str, Any]: + authorization_url = self.authorization_url + + expires_at = self.expires_at.isoformat() + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "authorization_url": authorization_url, + "expires_at": expires_at, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + authorization_url = d.pop("authorization_url") + + expires_at = datetime.datetime.fromisoformat(d.pop("expires_at")) + + connection_authorization_challenge = cls( + authorization_url=authorization_url, + expires_at=expires_at, + ) + + return connection_authorization_challenge diff --git a/src/graphn/_generated/models/connection_authorization_start.py b/src/graphn/_generated/models/connection_authorization_start.py new file mode 100644 index 0000000..6f9acbd --- /dev/null +++ b/src/graphn/_generated/models/connection_authorization_start.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ConnectionAuthorizationStart") + + +@_attrs_define +class ConnectionAuthorizationStart: + """ + Attributes: + return_path (str | Unset): Relative path on the configured GraphN web origin. Default: '/settings/connections'. + requested_capabilities (list[str] | Unset): + """ + + return_path: str | Unset = "/settings/connections" + requested_capabilities: list[str] | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + return_path = self.return_path + + requested_capabilities: list[str] | Unset = UNSET + if not isinstance(self.requested_capabilities, Unset): + requested_capabilities = self.requested_capabilities + + field_dict: dict[str, Any] = {} + + field_dict.update({}) + if return_path is not UNSET: + field_dict["return_path"] = return_path + if requested_capabilities is not UNSET: + field_dict["requested_capabilities"] = requested_capabilities + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + return_path = d.pop("return_path", UNSET) + + requested_capabilities = cast(list[str], d.pop("requested_capabilities", UNSET)) + + connection_authorization_start = cls( + return_path=return_path, + requested_capabilities=requested_capabilities, + ) + + return connection_authorization_start diff --git a/src/graphn/_generated/models/connection_create.py b/src/graphn/_generated/models/connection_create.py new file mode 100644 index 0000000..158e1b6 --- /dev/null +++ b/src/graphn/_generated/models/connection_create.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.connection_create_kind import ConnectionCreateKind +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ConnectionCreate") + + +@_attrs_define +class ConnectionCreate: + """ + Attributes: + name (str): + kind (ConnectionCreateKind): + provider_id (str): + resource_id (str | Unset): Optional linked MCP resource ID. + """ + + name: str + kind: ConnectionCreateKind + provider_id: str + resource_id: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + name = self.name + + kind = self.kind.value + + provider_id = self.provider_id + + resource_id = self.resource_id + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "kind": kind, + "provider_id": provider_id, + } + ) + if resource_id is not UNSET: + field_dict["resource_id"] = resource_id + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + name = d.pop("name") + + kind = ConnectionCreateKind(d.pop("kind")) + + provider_id = d.pop("provider_id") + + resource_id = d.pop("resource_id", UNSET) + + connection_create = cls( + name=name, + kind=kind, + provider_id=provider_id, + resource_id=resource_id, + ) + + return connection_create diff --git a/src/graphn/_generated/models/connection_create_kind.py b/src/graphn/_generated/models/connection_create_kind.py new file mode 100644 index 0000000..aa6df55 --- /dev/null +++ b/src/graphn/_generated/models/connection_create_kind.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class ConnectionCreateKind(StrEnum): + MCP = "mcp" + NATIVE = "native" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/connection_kind.py b/src/graphn/_generated/models/connection_kind.py new file mode 100644 index 0000000..2b710f9 --- /dev/null +++ b/src/graphn/_generated/models/connection_kind.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class ConnectionKind(StrEnum): + MCP = "mcp" + NATIVE = "native" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/connection_list.py b/src/graphn/_generated/models/connection_list.py new file mode 100644 index 0000000..68dfe89 --- /dev/null +++ b/src/graphn/_generated/models/connection_list.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.connection import Connection + + +T = TypeVar("T", bound="ConnectionList") + + +@_attrs_define +class ConnectionList: + """ + Attributes: + items (list[Connection]): + count (int): + continue_token (str | Unset): + """ + + items: list[Connection] + count: int + continue_token: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + items = [] + for items_item_data in self.items: + items_item = items_item_data.to_dict() + items.append(items_item) + + count = self.count + + continue_token = self.continue_token + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "items": items, + "count": count, + } + ) + if continue_token is not UNSET: + field_dict["continue_token"] = continue_token + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.connection import Connection + + d = dict(src_dict) + items = [] + _items = d.pop("items") + for items_item_data in _items: + items_item = Connection.from_dict(items_item_data) + + items.append(items_item) + + count = d.pop("count") + + continue_token = d.pop("continue_token", UNSET) + + connection_list = cls( + items=items, + count=count, + continue_token=continue_token, + ) + + return connection_list diff --git a/src/graphn/_generated/models/connection_status.py b/src/graphn/_generated/models/connection_status.py new file mode 100644 index 0000000..56ee362 --- /dev/null +++ b/src/graphn/_generated/models/connection_status.py @@ -0,0 +1,12 @@ +from enum import StrEnum + + +class ConnectionStatus(StrEnum): + ACTIVE = "active" + ERROR = "error" + NEEDS_REAUTH = "needs_reauth" + PENDING = "pending" + REVOKED = "revoked" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/connection_watch_status.py b/src/graphn/_generated/models/connection_watch_status.py new file mode 100644 index 0000000..425de99 --- /dev/null +++ b/src/graphn/_generated/models/connection_watch_status.py @@ -0,0 +1,11 @@ +from enum import StrEnum + + +class ConnectionWatchStatus(StrEnum): + ACTIVE = "active" + DISABLED = "disabled" + ERROR = "error" + PENDING = "pending" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/create_billing_setup_intent_response_200.py b/src/graphn/_generated/models/create_billing_setup_intent_response_200.py index 5010416..8d175dd 100644 --- a/src/graphn/_generated/models/create_billing_setup_intent_response_200.py +++ b/src/graphn/_generated/models/create_billing_setup_intent_response_200.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="CreateBillingSetupIntentResponse200") diff --git a/src/graphn/_generated/models/custom_model.py b/src/graphn/_generated/models/custom_model.py index 9dfcb9d..2b74568 100644 --- a/src/graphn/_generated/models/custom_model.py +++ b/src/graphn/_generated/models/custom_model.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.capability import Capability from ..models.custom_model_artifact_type import CustomModelArtifactType @@ -71,8 +70,8 @@ class CustomModel: For S3 imports it is the caller-supplied `base_model_id` from `CustomModelCreate`. lora_adapter_name (None | str | Unset): vLLM routing name the LoRA adapter is served under. - Defaults to the model's short name; clients address it - via `model=` in chat completions. + Defaults to the model's short name. It is internal to the + deployment: clients call the model as `custom:`. lora_rank (int | None | Unset): `r` value from `adapter_config.json` when `artifact_type=lora`. max_model_len (int | None | Unset): Maximum context length in tokens. quantization (CustomModelQuantization | Unset): Weight quantization scheme, if any. @@ -83,6 +82,14 @@ class CustomModel: num_params (int | None | Unset): Parameter count detected from the model config. estimated_memory_gb (float | None | Unset): Estimated GPU memory required for serving. architectures (list[str] | None | Unset): HuggingFace `architectures` field from `config.json`. + lora_enabled (bool | Unset): Preview. Present and `true` on a shared LoRA base, which serves + its own weights plus attached adapters. + max_lora_rank (int | Unset): Preview. Highest adapter rank a shared LoRA base accepts. + max_adapters (int | Unset): Preview. Most adapters a shared LoRA base can have attached. + parent_model_id (str | Unset): Preview. Present on an adapter attached to a shared LoRA base: + the base's `id`. + adapter_digest (str | Unset): Preview. Present on an adapter once its files have been staged: + the digest of the staged adapter. """ id: str @@ -114,6 +121,11 @@ class CustomModel: num_params: int | None | Unset = UNSET estimated_memory_gb: float | None | Unset = UNSET architectures: list[str] | None | Unset = UNSET + lora_enabled: bool | Unset = UNSET + max_lora_rank: int | Unset = UNSET + max_adapters: int | Unset = UNSET + parent_model_id: str | Unset = UNSET + adapter_digest: str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -233,6 +245,16 @@ def to_dict(self) -> dict[str, Any]: else: architectures = self.architectures + lora_enabled = self.lora_enabled + + max_lora_rank = self.max_lora_rank + + max_adapters = self.max_adapters + + parent_model_id = self.parent_model_id + + adapter_digest = self.adapter_digest + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( @@ -284,6 +306,16 @@ def to_dict(self) -> dict[str, Any]: field_dict["estimated_memory_gb"] = estimated_memory_gb if architectures is not UNSET: field_dict["architectures"] = architectures + if lora_enabled is not UNSET: + field_dict["lora_enabled"] = lora_enabled + if max_lora_rank is not UNSET: + field_dict["max_lora_rank"] = max_lora_rank + if max_adapters is not UNSET: + field_dict["max_adapters"] = max_adapters + if parent_model_id is not UNSET: + field_dict["parent_model_id"] = parent_model_id + if adapter_digest is not UNSET: + field_dict["adapter_digest"] = adapter_digest return field_dict @@ -459,6 +491,16 @@ def _parse_architectures(data: object) -> list[str] | None | Unset: architectures = _parse_architectures(d.pop("architectures", UNSET)) + lora_enabled = d.pop("lora_enabled", UNSET) + + max_lora_rank = d.pop("max_lora_rank", UNSET) + + max_adapters = d.pop("max_adapters", UNSET) + + parent_model_id = d.pop("parent_model_id", UNSET) + + adapter_digest = d.pop("adapter_digest", UNSET) + custom_model = cls( id=id, name=name, @@ -489,6 +531,11 @@ def _parse_architectures(data: object) -> list[str] | None | Unset: num_params=num_params, estimated_memory_gb=estimated_memory_gb, architectures=architectures, + lora_enabled=lora_enabled, + max_lora_rank=max_lora_rank, + max_adapters=max_adapters, + parent_model_id=parent_model_id, + adapter_digest=adapter_digest, ) custom_model.additional_properties = d diff --git a/src/graphn/_generated/models/custom_model_access.py b/src/graphn/_generated/models/custom_model_access.py index cdd8efe..92dd676 100644 --- a/src/graphn/_generated/models/custom_model_access.py +++ b/src/graphn/_generated/models/custom_model_access.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="CustomModelAccess") diff --git a/src/graphn/_generated/models/custom_model_adapter_attach.py b/src/graphn/_generated/models/custom_model_adapter_attach.py new file mode 100644 index 0000000..13e30b6 --- /dev/null +++ b/src/graphn/_generated/models/custom_model_adapter_attach.py @@ -0,0 +1,139 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.weight_source import WeightSource +from ..types import UNSET, Unset + +T = TypeVar("T", bound="CustomModelAdapterAttach") + + +@_attrs_define +class CustomModelAdapterAttach: + """Preview. Request body for + `POST /v1/{workspaceId}/custom-models/{modelId}/adapters`. + + Attributes: + name (str | Unset): URL-safe adapter name. Must be unique within the workspace. + Defaults to the last segment of `huggingface_model_id`, + lowercased. Chat completions take the adapter's ID + (`custom:`), not its name. + display_name (str | Unset): Human-friendly name for UI display. Defaults to `name`. + weight_source (WeightSource | Unset): Source of the model weights: + - `huggingface`: download from HuggingFace using `huggingface_model_id` + - `s3_presigned`: download from a presigned S3 URL + - `s3_assume_role`: download from S3 using an assumed IAM role + huggingface_model_id (str | Unset): Hugging Face repo id (`org/name`) of the adapter. Required when + `weight_source` is `huggingface`; enforced by the server. + Example: my-org/qwen3-32b-support-lora. + hf_token_secret_id (str | Unset): ID of a workspace secret holding a HuggingFace access token. + Required for gated or private adapter repos. + s3_url (str | Unset): Required when `weight_source` is `s3_presigned` or + `s3_assume_role`; enforced by the server. + s3_role_arn (str | Unset): Required when `weight_source` is `s3_assume_role`. The role name + must start with `graphn-byom-`. + s3_external_id (str | Unset): ExternalId from the customer's IAM trust policy, for + `s3_assume_role`. Generated when omitted. + base_mismatch_acknowledged (bool | Unset): Accept an adapter whose declared base differs from this base's + Hugging Face ID; staging otherwise refuses it. Recorded on the + adapter. A base imported from S3 has no ID to compare. + Default: False. + """ + + name: str | Unset = UNSET + display_name: str | Unset = UNSET + weight_source: WeightSource | Unset = UNSET + huggingface_model_id: str | Unset = UNSET + hf_token_secret_id: str | Unset = UNSET + s3_url: str | Unset = UNSET + s3_role_arn: str | Unset = UNSET + s3_external_id: str | Unset = UNSET + base_mismatch_acknowledged: bool | Unset = False + + def to_dict(self) -> dict[str, Any]: + name = self.name + + display_name = self.display_name + + weight_source: str | Unset = UNSET + if not isinstance(self.weight_source, Unset): + weight_source = self.weight_source.value + + huggingface_model_id = self.huggingface_model_id + + hf_token_secret_id = self.hf_token_secret_id + + s3_url = self.s3_url + + s3_role_arn = self.s3_role_arn + + s3_external_id = self.s3_external_id + + base_mismatch_acknowledged = self.base_mismatch_acknowledged + + field_dict: dict[str, Any] = {} + + field_dict.update({}) + if name is not UNSET: + field_dict["name"] = name + if display_name is not UNSET: + field_dict["display_name"] = display_name + if weight_source is not UNSET: + field_dict["weight_source"] = weight_source + if huggingface_model_id is not UNSET: + field_dict["huggingface_model_id"] = huggingface_model_id + if hf_token_secret_id is not UNSET: + field_dict["hf_token_secret_id"] = hf_token_secret_id + if s3_url is not UNSET: + field_dict["s3_url"] = s3_url + if s3_role_arn is not UNSET: + field_dict["s3_role_arn"] = s3_role_arn + if s3_external_id is not UNSET: + field_dict["s3_external_id"] = s3_external_id + if base_mismatch_acknowledged is not UNSET: + field_dict["base_mismatch_acknowledged"] = base_mismatch_acknowledged + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + name = d.pop("name", UNSET) + + display_name = d.pop("display_name", UNSET) + + _weight_source = d.pop("weight_source", UNSET) + weight_source: WeightSource | Unset + if isinstance(_weight_source, Unset): + weight_source = UNSET + else: + weight_source = WeightSource(_weight_source) + + huggingface_model_id = d.pop("huggingface_model_id", UNSET) + + hf_token_secret_id = d.pop("hf_token_secret_id", UNSET) + + s3_url = d.pop("s3_url", UNSET) + + s3_role_arn = d.pop("s3_role_arn", UNSET) + + s3_external_id = d.pop("s3_external_id", UNSET) + + base_mismatch_acknowledged = d.pop("base_mismatch_acknowledged", UNSET) + + custom_model_adapter_attach = cls( + name=name, + display_name=display_name, + weight_source=weight_source, + huggingface_model_id=huggingface_model_id, + hf_token_secret_id=hf_token_secret_id, + s3_url=s3_url, + s3_role_arn=s3_role_arn, + s3_external_id=s3_external_id, + base_mismatch_acknowledged=base_mismatch_acknowledged, + ) + + return custom_model_adapter_attach diff --git a/src/graphn/_generated/models/custom_model_artifact_type.py b/src/graphn/_generated/models/custom_model_artifact_type.py index f2adb23..4ed4f85 100644 --- a/src/graphn/_generated/models/custom_model_artifact_type.py +++ b/src/graphn/_generated/models/custom_model_artifact_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class CustomModelArtifactType(str, Enum): +class CustomModelArtifactType(StrEnum): BASE = "base" LORA = "lora" diff --git a/src/graphn/_generated/models/custom_model_create.py b/src/graphn/_generated/models/custom_model_create.py index 6445de4..fc85956 100644 --- a/src/graphn/_generated/models/custom_model_create.py +++ b/src/graphn/_generated/models/custom_model_create.py @@ -1,12 +1,12 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.capability import Capability +from ..models.custom_model_create_max_lora_rank import CustomModelCreateMaxLoraRank from ..models.custom_model_create_quantization import CustomModelCreateQuantization from ..models.weight_source import WeightSource from ..types import UNSET, Unset @@ -76,6 +76,19 @@ class CustomModelCreate: Ignored when the resolved artifact type is `base`. Example: Qwen/Qwen3.5-4B. + lora_enabled (bool | Unset): Preview, refused unless enabled for the workspace's + deployment. Creates a shared LoRA base: one GPU deployment + that serves its own weights and the adapters attached to it. + Requires `max_lora_rank`. Cannot be combined with + `base_model_id`, `quantization`, `disaggregated_pd`, + `speculative_decoding` or more than one GPU. + Default: False. + max_lora_rank (CustomModelCreateMaxLoraRank | Unset): Preview. Required with `lora_enabled`; no default. The + highest + adapter rank the base accepts. Fixed at creation: the runtime + reserves GPU memory for it, so a lower rank leaves more KV cache. + It also fixes the base's `max_adapters` (8 at either rank), which + cannot be set on create. """ name: str @@ -94,6 +107,8 @@ class CustomModelCreate: max_replicas: int | Unset = 1 cooldown_seconds: int | Unset = 600 base_model_id: str | Unset = UNSET + lora_enabled: bool | Unset = False + max_lora_rank: CustomModelCreateMaxLoraRank | Unset = UNSET def to_dict(self) -> dict[str, Any]: name = self.name @@ -137,6 +152,12 @@ def to_dict(self) -> dict[str, Any]: base_model_id = self.base_model_id + lora_enabled = self.lora_enabled + + max_lora_rank: int | Unset = UNSET + if not isinstance(self.max_lora_rank, Unset): + max_lora_rank = self.max_lora_rank.value + field_dict: dict[str, Any] = {} field_dict.update( @@ -173,6 +194,10 @@ def to_dict(self) -> dict[str, Any]: field_dict["cooldown_seconds"] = cooldown_seconds if base_model_id is not UNSET: field_dict["base_model_id"] = base_model_id + if lora_enabled is not UNSET: + field_dict["lora_enabled"] = lora_enabled + if max_lora_rank is not UNSET: + field_dict["max_lora_rank"] = max_lora_rank return field_dict @@ -228,6 +253,15 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: base_model_id = d.pop("base_model_id", UNSET) + lora_enabled = d.pop("lora_enabled", UNSET) + + _max_lora_rank = d.pop("max_lora_rank", UNSET) + max_lora_rank: CustomModelCreateMaxLoraRank | Unset + if isinstance(_max_lora_rank, Unset): + max_lora_rank = UNSET + else: + max_lora_rank = CustomModelCreateMaxLoraRank(_max_lora_rank) + custom_model_create = cls( name=name, huggingface_model_id=huggingface_model_id, @@ -245,6 +279,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: max_replicas=max_replicas, cooldown_seconds=cooldown_seconds, base_model_id=base_model_id, + lora_enabled=lora_enabled, + max_lora_rank=max_lora_rank, ) return custom_model_create diff --git a/src/graphn/_generated/models/custom_model_create_max_lora_rank.py b/src/graphn/_generated/models/custom_model_create_max_lora_rank.py new file mode 100644 index 0000000..62a8270 --- /dev/null +++ b/src/graphn/_generated/models/custom_model_create_max_lora_rank.py @@ -0,0 +1,9 @@ +from enum import IntEnum + + +class CustomModelCreateMaxLoraRank(IntEnum): + VALUE_16 = 16 + VALUE_64 = 64 + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/custom_model_create_quantization.py b/src/graphn/_generated/models/custom_model_create_quantization.py index 03fc5cd..2981e0d 100644 --- a/src/graphn/_generated/models/custom_model_create_quantization.py +++ b/src/graphn/_generated/models/custom_model_create_quantization.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class CustomModelCreateQuantization(str, Enum): +class CustomModelCreateQuantization(StrEnum): AWQ = "awq" FP8 = "fp8" GGUF = "gguf" diff --git a/src/graphn/_generated/models/custom_model_list.py b/src/graphn/_generated/models/custom_model_list.py index df1821d..3df915c 100644 --- a/src/graphn/_generated/models/custom_model_list.py +++ b/src/graphn/_generated/models/custom_model_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/custom_model_quantization.py b/src/graphn/_generated/models/custom_model_quantization.py index acf37b7..10b4c22 100644 --- a/src/graphn/_generated/models/custom_model_quantization.py +++ b/src/graphn/_generated/models/custom_model_quantization.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class CustomModelQuantization(str, Enum): +class CustomModelQuantization(StrEnum): AWQ = "awq" FP8 = "fp8" GGUF = "gguf" diff --git a/src/graphn/_generated/models/custom_model_status.py b/src/graphn/_generated/models/custom_model_status.py index c870d51..f41dc5a 100644 --- a/src/graphn/_generated/models/custom_model_status.py +++ b/src/graphn/_generated/models/custom_model_status.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class CustomModelStatus(str, Enum): +class CustomModelStatus(StrEnum): DELETING = "deleting" DEPLOYING = "deploying" FAILED = "failed" diff --git a/src/graphn/_generated/models/custom_model_update.py b/src/graphn/_generated/models/custom_model_update.py index c8ccf80..97eb84c 100644 --- a/src/graphn/_generated/models/custom_model_update.py +++ b/src/graphn/_generated/models/custom_model_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/discover_imported_models_request.py b/src/graphn/_generated/models/discover_imported_models_request.py index f53d521..1d80028 100644 --- a/src/graphn/_generated/models/discover_imported_models_request.py +++ b/src/graphn/_generated/models/discover_imported_models_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="DiscoverImportedModelsRequest") diff --git a/src/graphn/_generated/models/discover_imported_models_response.py b/src/graphn/_generated/models/discover_imported_models_response.py index b1397b5..ecf5eae 100644 --- a/src/graphn/_generated/models/discover_imported_models_response.py +++ b/src/graphn/_generated/models/discover_imported_models_response.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.discovered_imported_model import DiscoveredImportedModel diff --git a/src/graphn/_generated/models/discovered_imported_model.py b/src/graphn/_generated/models/discovered_imported_model.py index b1254f7..c121872 100644 --- a/src/graphn/_generated/models/discovered_imported_model.py +++ b/src/graphn/_generated/models/discovered_imported_model.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="DiscoveredImportedModel") diff --git a/src/graphn/_generated/models/document_media.py b/src/graphn/_generated/models/document_media.py new file mode 100644 index 0000000..c480aee --- /dev/null +++ b/src/graphn/_generated/models/document_media.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="DocumentMedia") + + +@_attrs_define +class DocumentMedia: + """ + Attributes: + url (str): + expires_at (datetime.datetime): + expires_in (int): + content_type (str | Unset): + """ + + url: str + expires_at: datetime.datetime + expires_in: int + content_type: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + url = self.url + + expires_at = self.expires_at.isoformat() + + expires_in = self.expires_in + + content_type = self.content_type + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "url": url, + "expires_at": expires_at, + "expires_in": expires_in, + } + ) + if content_type is not UNSET: + field_dict["content_type"] = content_type + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + url = d.pop("url") + + expires_at = datetime.datetime.fromisoformat(d.pop("expires_at")) + + expires_in = d.pop("expires_in") + + content_type = d.pop("content_type", UNSET) + + document_media = cls( + url=url, + expires_at=expires_at, + expires_in=expires_in, + content_type=content_type, + ) + + return document_media diff --git a/src/graphn/_generated/models/embed_request.py b/src/graphn/_generated/models/embed_request.py index 288aa75..2d52f8c 100644 --- a/src/graphn/_generated/models/embed_request.py +++ b/src/graphn/_generated/models/embed_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/embed_response.py b/src/graphn/_generated/models/embed_response.py index a21f59b..624018a 100644 --- a/src/graphn/_generated/models/embed_response.py +++ b/src/graphn/_generated/models/embed_response.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="EmbedResponse") diff --git a/src/graphn/_generated/models/embedding_model.py b/src/graphn/_generated/models/embedding_model.py index 669b5c8..c931881 100644 --- a/src/graphn/_generated/models/embedding_model.py +++ b/src/graphn/_generated/models/embedding_model.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/embedding_model_list.py b/src/graphn/_generated/models/embedding_model_list.py index ae0f939..b1ce809 100644 --- a/src/graphn/_generated/models/embedding_model_list.py +++ b/src/graphn/_generated/models/embedding_model_list.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.embedding_model import EmbeddingModel diff --git a/src/graphn/_generated/models/error.py b/src/graphn/_generated/models/error.py index 3c08f2f..01da0f2 100644 --- a/src/graphn/_generated/models/error.py +++ b/src/graphn/_generated/models/error.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="Error") diff --git a/src/graphn/_generated/models/execution.py b/src/graphn/_generated/models/execution.py index 60d702d..d26882f 100644 --- a/src/graphn/_generated/models/execution.py +++ b/src/graphn/_generated/models/execution.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/free_grant_result.py b/src/graphn/_generated/models/free_grant_result.py index 76a53a3..aab9d58 100644 --- a/src/graphn/_generated/models/free_grant_result.py +++ b/src/graphn/_generated/models/free_grant_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FreeGrantResult") diff --git a/src/graphn/_generated/models/function.py b/src/graphn/_generated/models/function.py index f46c2d7..569eae7 100644 --- a/src/graphn/_generated/models/function.py +++ b/src/graphn/_generated/models/function.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_create.py b/src/graphn/_generated/models/function_create.py index ec2c04b..0c6aed7 100644 --- a/src/graphn/_generated/models/function_create.py +++ b/src/graphn/_generated/models/function_create.py @@ -1,11 +1,11 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self +from ..models.function_create_type import FunctionCreateType from ..types import UNSET, Unset if TYPE_CHECKING: @@ -23,7 +23,7 @@ class FunctionCreate: """ Attributes: name (str): - type_ (str | Unset): + type_ (FunctionCreateType | Unset): description (str | Unset): files (FunctionCreateFiles | Unset): parameters_schema (FunctionCreateParametersSchema | Unset): @@ -33,7 +33,7 @@ class FunctionCreate: """ name: str - type_: str | Unset = UNSET + type_: FunctionCreateType | Unset = UNSET description: str | Unset = UNSET files: FunctionCreateFiles | Unset = UNSET parameters_schema: FunctionCreateParametersSchema | Unset = UNSET @@ -44,7 +44,9 @@ class FunctionCreate: def to_dict(self) -> dict[str, Any]: name = self.name - type_ = self.type_ + type_: str | Unset = UNSET + if not isinstance(self.type_, Unset): + type_ = self.type_.value description = self.description @@ -96,7 +98,12 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") - type_ = d.pop("type", UNSET) + _type_ = d.pop("type", UNSET) + type_: FunctionCreateType | Unset + if isinstance(_type_, Unset): + type_ = UNSET + else: + type_ = FunctionCreateType(_type_) description = d.pop("description", UNSET) diff --git a/src/graphn/_generated/models/function_create_files.py b/src/graphn/_generated/models/function_create_files.py index f66edcc..90b1b1f 100644 --- a/src/graphn/_generated/models/function_create_files.py +++ b/src/graphn/_generated/models/function_create_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionCreateFiles") @_attrs_define class FunctionCreateFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_create_parameters_schema.py b/src/graphn/_generated/models/function_create_parameters_schema.py index 1a4ff0c..b3ed288 100644 --- a/src/graphn/_generated/models/function_create_parameters_schema.py +++ b/src/graphn/_generated/models/function_create_parameters_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionCreateParametersSchema") @_attrs_define class FunctionCreateParametersSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_create_type.py b/src/graphn/_generated/models/function_create_type.py new file mode 100644 index 0000000..e04fa81 --- /dev/null +++ b/src/graphn/_generated/models/function_create_type.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class FunctionCreateType(StrEnum): + BUILTIN = "builtin" + CUSTOM = "custom" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/function_dry_run_request.py b/src/graphn/_generated/models/function_dry_run_request.py index ca9aa20..cd85387 100644 --- a/src/graphn/_generated/models/function_dry_run_request.py +++ b/src/graphn/_generated/models/function_dry_run_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_dry_run_request_files.py b/src/graphn/_generated/models/function_dry_run_request_files.py index 5272a3c..70e66e2 100644 --- a/src/graphn/_generated/models/function_dry_run_request_files.py +++ b/src/graphn/_generated/models/function_dry_run_request_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionDryRunRequestFiles") @_attrs_define class FunctionDryRunRequestFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_dry_run_request_input.py b/src/graphn/_generated/models/function_dry_run_request_input.py index fdbf446..a0853b6 100644 --- a/src/graphn/_generated/models/function_dry_run_request_input.py +++ b/src/graphn/_generated/models/function_dry_run_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionDryRunRequestInput") @_attrs_define class FunctionDryRunRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_list.py b/src/graphn/_generated/models/function_list.py index f0d2523..b36c257 100644 --- a/src/graphn/_generated/models/function_list.py +++ b/src/graphn/_generated/models/function_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_spec.py b/src/graphn/_generated/models/function_spec.py index a602fcb..42bc88f 100644 --- a/src/graphn/_generated/models/function_spec.py +++ b/src/graphn/_generated/models/function_spec.py @@ -1,12 +1,12 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self +from ..models.function_spec_type import FunctionSpecType from ..types import UNSET, Unset if TYPE_CHECKING: @@ -21,7 +21,7 @@ class FunctionSpec: """ Attributes: - type_ (str | Unset): + type_ (FunctionSpecType | Unset): description (str | Unset): files (FunctionSpecFiles | Unset): parameters_schema (FunctionSpecParametersSchema | Unset): @@ -29,7 +29,7 @@ class FunctionSpec: memory_mb (int | Unset): """ - type_: str | Unset = UNSET + type_: FunctionSpecType | Unset = UNSET description: str | Unset = UNSET files: FunctionSpecFiles | Unset = UNSET parameters_schema: FunctionSpecParametersSchema | Unset = UNSET @@ -38,7 +38,9 @@ class FunctionSpec: additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: - type_ = self.type_ + type_: str | Unset = UNSET + if not isinstance(self.type_, Unset): + type_ = self.type_.value description = self.description @@ -80,7 +82,12 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: ) d = dict(src_dict) - type_ = d.pop("type", UNSET) + _type_ = d.pop("type", UNSET) + type_: FunctionSpecType | Unset + if isinstance(_type_, Unset): + type_ = UNSET + else: + type_ = FunctionSpecType(_type_) description = d.pop("description", UNSET) diff --git a/src/graphn/_generated/models/function_spec_files.py b/src/graphn/_generated/models/function_spec_files.py index e7a85f9..0f16332 100644 --- a/src/graphn/_generated/models/function_spec_files.py +++ b/src/graphn/_generated/models/function_spec_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionSpecFiles") @_attrs_define class FunctionSpecFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_spec_parameters_schema.py b/src/graphn/_generated/models/function_spec_parameters_schema.py index c047214..c970d7e 100644 --- a/src/graphn/_generated/models/function_spec_parameters_schema.py +++ b/src/graphn/_generated/models/function_spec_parameters_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionSpecParametersSchema") @_attrs_define class FunctionSpecParametersSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_spec_type.py b/src/graphn/_generated/models/function_spec_type.py new file mode 100644 index 0000000..a89802d --- /dev/null +++ b/src/graphn/_generated/models/function_spec_type.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class FunctionSpecType(StrEnum): + BUILTIN = "builtin" + CUSTOM = "custom" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/function_test_request.py b/src/graphn/_generated/models/function_test_request.py index 48661d1..3afdcf6 100644 --- a/src/graphn/_generated/models/function_test_request.py +++ b/src/graphn/_generated/models/function_test_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_test_request_input.py b/src/graphn/_generated/models/function_test_request_input.py index 0f84f14..e020718 100644 --- a/src/graphn/_generated/models/function_test_request_input.py +++ b/src/graphn/_generated/models/function_test_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionTestRequestInput") @_attrs_define class FunctionTestRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_test_response.py b/src/graphn/_generated/models/function_test_response.py index f44adbe..e062ca0 100644 --- a/src/graphn/_generated/models/function_test_response.py +++ b/src/graphn/_generated/models/function_test_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_update.py b/src/graphn/_generated/models/function_update.py index 6a5118e..aecea85 100644 --- a/src/graphn/_generated/models/function_update.py +++ b/src/graphn/_generated/models/function_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/function_update_files.py b/src/graphn/_generated/models/function_update_files.py index 725c18b..69c8c1d 100644 --- a/src/graphn/_generated/models/function_update_files.py +++ b/src/graphn/_generated/models/function_update_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionUpdateFiles") @_attrs_define class FunctionUpdateFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/function_update_parameters_schema.py b/src/graphn/_generated/models/function_update_parameters_schema.py index 723bf4e..23f1731 100644 --- a/src/graphn/_generated/models/function_update_parameters_schema.py +++ b/src/graphn/_generated/models/function_update_parameters_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="FunctionUpdateParametersSchema") @_attrs_define class FunctionUpdateParametersSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/get_billing_invoice_response_200.py b/src/graphn/_generated/models/get_billing_invoice_response_200.py index 455d6fa..5744f5c 100644 --- a/src/graphn/_generated/models/get_billing_invoice_response_200.py +++ b/src/graphn/_generated/models/get_billing_invoice_response_200.py @@ -1,14 +1,15 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: - from ..models.invoice import Invoice + from ..models.get_billing_invoice_response_200_invoice import ( + GetBillingInvoiceResponse200Invoice, + ) T = TypeVar("T", bound="GetBillingInvoiceResponse200") @@ -18,10 +19,10 @@ class GetBillingInvoiceResponse200: """ Attributes: - invoice (Invoice): + invoice (GetBillingInvoiceResponse200Invoice): """ - invoice: Invoice + invoice: GetBillingInvoiceResponse200Invoice additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -39,10 +40,12 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: - from ..models.invoice import Invoice + from ..models.get_billing_invoice_response_200_invoice import ( + GetBillingInvoiceResponse200Invoice, + ) d = dict(src_dict) - invoice = Invoice.from_dict(d.pop("invoice")) + invoice = GetBillingInvoiceResponse200Invoice.from_dict(d.pop("invoice")) get_billing_invoice_response_200 = cls( invoice=invoice, diff --git a/src/graphn/_generated/models/get_billing_invoice_response_200_invoice.py b/src/graphn/_generated/models/get_billing_invoice_response_200_invoice.py new file mode 100644 index 0000000..5b96e1b --- /dev/null +++ b/src/graphn/_generated/models/get_billing_invoice_response_200_invoice.py @@ -0,0 +1,175 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.invoice_status import InvoiceStatus +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.usage_week import UsageWeek + + +T = TypeVar("T", bound="GetBillingInvoiceResponse200Invoice") + + +@_attrs_define +class GetBillingInvoiceResponse200Invoice: + """ + Attributes: + id (str): + invoice_id (str): + status (InvoiceStatus): + amount_due (int): + currency (str): + created (int): + period_start (datetime.datetime): + period_end (datetime.datetime): + number (str | Unset): + hosted_invoice_url (str | Unset): + invoice_pdf (str | Unset): + usage_by_week (list[UsageWeek] | Unset): + """ + + id: str + invoice_id: str + status: InvoiceStatus + amount_due: int + currency: str + created: int + period_start: datetime.datetime + period_end: datetime.datetime + number: str | Unset = UNSET + hosted_invoice_url: str | Unset = UNSET + invoice_pdf: str | Unset = UNSET + usage_by_week: list[UsageWeek] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + id = self.id + + invoice_id = self.invoice_id + + status = self.status.value + + amount_due = self.amount_due + + currency = self.currency + + created = self.created + + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + number = self.number + + hosted_invoice_url = self.hosted_invoice_url + + invoice_pdf = self.invoice_pdf + + usage_by_week: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.usage_by_week, Unset): + usage_by_week = [] + for usage_by_week_item_data in self.usage_by_week: + usage_by_week_item = usage_by_week_item_data.to_dict() + usage_by_week.append(usage_by_week_item) + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "id": id, + "invoiceId": invoice_id, + "status": status, + "amountDue": amount_due, + "currency": currency, + "created": created, + "periodStart": period_start, + "periodEnd": period_end, + } + ) + if number is not UNSET: + field_dict["number"] = number + if hosted_invoice_url is not UNSET: + field_dict["hostedInvoiceUrl"] = hosted_invoice_url + if invoice_pdf is not UNSET: + field_dict["invoicePdf"] = invoice_pdf + if usage_by_week is not UNSET: + field_dict["usageByWeek"] = usage_by_week + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.usage_week import UsageWeek + + d = dict(src_dict) + id = d.pop("id") + + invoice_id = d.pop("invoiceId") + + status = InvoiceStatus(d.pop("status")) + + amount_due = d.pop("amountDue") + + currency = d.pop("currency") + + created = d.pop("created") + + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + number = d.pop("number", UNSET) + + hosted_invoice_url = d.pop("hostedInvoiceUrl", UNSET) + + invoice_pdf = d.pop("invoicePdf", UNSET) + + _usage_by_week = d.pop("usageByWeek", UNSET) + usage_by_week: list[UsageWeek] | Unset = UNSET + if _usage_by_week is not UNSET: + usage_by_week = [] + for usage_by_week_item_data in _usage_by_week: + usage_by_week_item = UsageWeek.from_dict(usage_by_week_item_data) + + usage_by_week.append(usage_by_week_item) + + get_billing_invoice_response_200_invoice = cls( + id=id, + invoice_id=invoice_id, + status=status, + amount_due=amount_due, + currency=currency, + created=created, + period_start=period_start, + period_end=period_end, + number=number, + hosted_invoice_url=hosted_invoice_url, + invoice_pdf=invoice_pdf, + usage_by_week=usage_by_week, + ) + + get_billing_invoice_response_200_invoice.additional_properties = d + return get_billing_invoice_response_200_invoice + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/get_billing_statement_response_200.py b/src/graphn/_generated/models/get_billing_statement_response_200.py new file mode 100644 index 0000000..c2ee270 --- /dev/null +++ b/src/graphn/_generated/models/get_billing_statement_response_200.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.billing_statement_detail import BillingStatementDetail + + +T = TypeVar("T", bound="GetBillingStatementResponse200") + + +@_attrs_define +class GetBillingStatementResponse200: + """ + Attributes: + statement (BillingStatementDetail): + """ + + statement: BillingStatementDetail + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + statement = self.statement.to_dict() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "statement": statement, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.billing_statement_detail import BillingStatementDetail + + d = dict(src_dict) + statement = BillingStatementDetail.from_dict(d.pop("statement")) + + get_billing_statement_response_200 = cls( + statement=statement, + ) + + get_billing_statement_response_200.additional_properties = d + return get_billing_statement_response_200 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/get_billing_usage_filter.py b/src/graphn/_generated/models/get_billing_usage_filter.py index 54e0ac0..4d01926 100644 --- a/src/graphn/_generated/models/get_billing_usage_filter.py +++ b/src/graphn/_generated/models/get_billing_usage_filter.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class GetBillingUsageFilter(str, Enum): +class GetBillingUsageFilter(StrEnum): ONE_DAY = "ONE_DAY" ONE_YEAR = "ONE_YEAR" SEVEN_DAY = "SEVEN_DAY" diff --git a/src/graphn/_generated/models/get_inference_router_analytics_interval.py b/src/graphn/_generated/models/get_inference_router_analytics_interval.py new file mode 100644 index 0000000..b7bd9ce --- /dev/null +++ b/src/graphn/_generated/models/get_inference_router_analytics_interval.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class GetInferenceRouterAnalyticsInterval(StrEnum): + DAY = "day" + HOUR = "hour" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/google_pub_sub_envelope.py b/src/graphn/_generated/models/google_pub_sub_envelope.py new file mode 100644 index 0000000..0957261 --- /dev/null +++ b/src/graphn/_generated/models/google_pub_sub_envelope.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.google_pub_sub_envelope_message import GooglePubSubEnvelopeMessage + + +T = TypeVar("T", bound="GooglePubSubEnvelope") + + +@_attrs_define +class GooglePubSubEnvelope: + """ + Attributes: + subscription (str): + message (GooglePubSubEnvelopeMessage): + """ + + subscription: str + message: GooglePubSubEnvelopeMessage + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + subscription = self.subscription + + message = self.message.to_dict() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "subscription": subscription, + "message": message, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.google_pub_sub_envelope_message import GooglePubSubEnvelopeMessage + + d = dict(src_dict) + subscription = d.pop("subscription") + + message = GooglePubSubEnvelopeMessage.from_dict(d.pop("message")) + + google_pub_sub_envelope = cls( + subscription=subscription, + message=message, + ) + + google_pub_sub_envelope.additional_properties = d + return google_pub_sub_envelope + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/google_pub_sub_envelope_message.py b/src/graphn/_generated/models/google_pub_sub_envelope_message.py new file mode 100644 index 0000000..591dcfd --- /dev/null +++ b/src/graphn/_generated/models/google_pub_sub_envelope_message.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="GooglePubSubEnvelopeMessage") + + +@_attrs_define +class GooglePubSubEnvelopeMessage: + """ + Attributes: + data (str): Base64-encoded Gmail notification JSON. + message_id (str): + """ + + data: str + message_id: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + data = self.data + + message_id = self.message_id + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "data": data, + "messageId": message_id, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + data = d.pop("data") + + message_id = d.pop("messageId") + + google_pub_sub_envelope_message = cls( + data=data, + message_id=message_id, + ) + + google_pub_sub_envelope_message.additional_properties = d + return google_pub_sub_envelope_message + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/gpu_hours_response.py b/src/graphn/_generated/models/gpu_hours_response.py index b743bca..e22e226 100644 --- a/src/graphn/_generated/models/gpu_hours_response.py +++ b/src/graphn/_generated/models/gpu_hours_response.py @@ -1,10 +1,11 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self + +from ..types import UNSET, Unset T = TypeVar("T", bound="GpuHoursResponse") @@ -13,14 +14,23 @@ class GpuHoursResponse: """ Attributes: - gpu_hours (float): Cumulative GPU-hours consumed by this model. + gpu_hours (float): Cumulative GPU-hours consumed by this model. For an adapter, the + base's: an adapter bills no GPU time of its own. + shared (bool | Unset): Preview. `true` when `gpu_hours` is an adapter's base's. + parent_model_id (str | Unset): Preview. With `shared`, the base the hours belong to. """ gpu_hours: float + shared: bool | Unset = UNSET + parent_model_id: str | Unset = UNSET def to_dict(self) -> dict[str, Any]: gpu_hours = self.gpu_hours + shared = self.shared + + parent_model_id = self.parent_model_id + field_dict: dict[str, Any] = {} field_dict.update( @@ -28,6 +38,10 @@ def to_dict(self) -> dict[str, Any]: "gpu_hours": gpu_hours, } ) + if shared is not UNSET: + field_dict["shared"] = shared + if parent_model_id is not UNSET: + field_dict["parent_model_id"] = parent_model_id return field_dict @@ -36,8 +50,14 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) gpu_hours = d.pop("gpu_hours") + shared = d.pop("shared", UNSET) + + parent_model_id = d.pop("parent_model_id", UNSET) + gpu_hours_response = cls( gpu_hours=gpu_hours, + shared=shared, + parent_model_id=parent_model_id, ) return gpu_hours_response diff --git a/src/graphn/_generated/models/id_list_request.py b/src/graphn/_generated/models/id_list_request.py index de9b180..ebb4d74 100644 --- a/src/graphn/_generated/models/id_list_request.py +++ b/src/graphn/_generated/models/id_list_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="IdListRequest") diff --git a/src/graphn/_generated/models/imported_model.py b/src/graphn/_generated/models/imported_model.py index 037644d..b655062 100644 --- a/src/graphn/_generated/models/imported_model.py +++ b/src/graphn/_generated/models/imported_model.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/imported_model_create.py b/src/graphn/_generated/models/imported_model_create.py index f5c3938..e573e64 100644 --- a/src/graphn/_generated/models/imported_model_create.py +++ b/src/graphn/_generated/models/imported_model_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/imported_model_list.py b/src/graphn/_generated/models/imported_model_list.py index 97439aa..85b04f8 100644 --- a/src/graphn/_generated/models/imported_model_list.py +++ b/src/graphn/_generated/models/imported_model_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/imported_model_update.py b/src/graphn/_generated/models/imported_model_update.py index fbd0f8f..d8f1ac8 100644 --- a/src/graphn/_generated/models/imported_model_update.py +++ b/src/graphn/_generated/models/imported_model_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/inference_error.py b/src/graphn/_generated/models/inference_error.py index 6a2929f..d8b4247 100644 --- a/src/graphn/_generated/models/inference_error.py +++ b/src/graphn/_generated/models/inference_error.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/inference_error_error.py b/src/graphn/_generated/models/inference_error_error.py index d3ca67e..0521a5d 100644 --- a/src/graphn/_generated/models/inference_error_error.py +++ b/src/graphn/_generated/models/inference_error_error.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/inference_router.py b/src/graphn/_generated/models/inference_router.py new file mode 100644 index 0000000..bcd01d4 --- /dev/null +++ b/src/graphn/_generated/models/inference_router.py @@ -0,0 +1,236 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.inference_router_scope import InferenceRouterScope +from ..models.inference_router_status import InferenceRouterStatus +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_revision import InferenceRouterRevision + + +T = TypeVar("T", bound="InferenceRouter") + + +@_attrs_define +class InferenceRouter: + """ + Attributes: + id (str): `ir_...` for workspace routers; `auto` for the immutable platform adapter. + name (str): + display_name (str): + scope (InferenceRouterScope): + status (InferenceRouterStatus): + created_at (datetime.datetime): + updated_at (datetime.datetime): + workspace_id (str | Unset): + owner_id (str | Unset): + draft_revision (InferenceRouterRevision | None | Unset): + pending_revision (InferenceRouterRevision | None | Unset): + active_revision (InferenceRouterRevision | None | Unset): + """ + + id: str + name: str + display_name: str + scope: InferenceRouterScope + status: InferenceRouterStatus + created_at: datetime.datetime + updated_at: datetime.datetime + workspace_id: str | Unset = UNSET + owner_id: str | Unset = UNSET + draft_revision: InferenceRouterRevision | None | Unset = UNSET + pending_revision: InferenceRouterRevision | None | Unset = UNSET + active_revision: InferenceRouterRevision | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + from ..models.inference_router_revision import InferenceRouterRevision + + id = self.id + + name = self.name + + display_name = self.display_name + + scope = self.scope.value + + status = self.status.value + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + workspace_id = self.workspace_id + + owner_id = self.owner_id + + draft_revision: dict[str, Any] | None | Unset + if isinstance(self.draft_revision, Unset): + draft_revision = UNSET + elif isinstance(self.draft_revision, InferenceRouterRevision): + draft_revision = self.draft_revision.to_dict() + else: + draft_revision = self.draft_revision + + pending_revision: dict[str, Any] | None | Unset + if isinstance(self.pending_revision, Unset): + pending_revision = UNSET + elif isinstance(self.pending_revision, InferenceRouterRevision): + pending_revision = self.pending_revision.to_dict() + else: + pending_revision = self.pending_revision + + active_revision: dict[str, Any] | None | Unset + if isinstance(self.active_revision, Unset): + active_revision = UNSET + elif isinstance(self.active_revision, InferenceRouterRevision): + active_revision = self.active_revision.to_dict() + else: + active_revision = self.active_revision + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "id": id, + "name": name, + "display_name": display_name, + "scope": scope, + "status": status, + "created_at": created_at, + "updated_at": updated_at, + } + ) + if workspace_id is not UNSET: + field_dict["workspace_id"] = workspace_id + if owner_id is not UNSET: + field_dict["owner_id"] = owner_id + if draft_revision is not UNSET: + field_dict["draft_revision"] = draft_revision + if pending_revision is not UNSET: + field_dict["pending_revision"] = pending_revision + if active_revision is not UNSET: + field_dict["active_revision"] = active_revision + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_revision import InferenceRouterRevision + + d = dict(src_dict) + id = d.pop("id") + + name = d.pop("name") + + display_name = d.pop("display_name") + + scope = InferenceRouterScope(d.pop("scope")) + + status = InferenceRouterStatus(d.pop("status")) + + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) + + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) + + workspace_id = d.pop("workspace_id", UNSET) + + owner_id = d.pop("owner_id", UNSET) + + def _parse_draft_revision( + data: object, + ) -> InferenceRouterRevision | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, dict): + raise TypeError() + draft_revision_type_1 = InferenceRouterRevision.from_dict(data) + + return draft_revision_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(InferenceRouterRevision | None | Unset, data) + + draft_revision = _parse_draft_revision(d.pop("draft_revision", UNSET)) + + def _parse_pending_revision( + data: object, + ) -> InferenceRouterRevision | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, dict): + raise TypeError() + pending_revision_type_1 = InferenceRouterRevision.from_dict(data) + + return pending_revision_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(InferenceRouterRevision | None | Unset, data) + + pending_revision = _parse_pending_revision(d.pop("pending_revision", UNSET)) + + def _parse_active_revision( + data: object, + ) -> InferenceRouterRevision | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, dict): + raise TypeError() + active_revision_type_1 = InferenceRouterRevision.from_dict(data) + + return active_revision_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(InferenceRouterRevision | None | Unset, data) + + active_revision = _parse_active_revision(d.pop("active_revision", UNSET)) + + inference_router = cls( + id=id, + name=name, + display_name=display_name, + scope=scope, + status=status, + created_at=created_at, + updated_at=updated_at, + workspace_id=workspace_id, + owner_id=owner_id, + draft_revision=draft_revision, + pending_revision=pending_revision, + active_revision=active_revision, + ) + + inference_router.additional_properties = d + return inference_router + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_analytics.py b/src/graphn/_generated/models/inference_router_analytics.py new file mode 100644 index 0000000..44946f5 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics.py @@ -0,0 +1,291 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.inference_router_analytics_interval import ( + InferenceRouterAnalyticsInterval, +) +from ..models.inference_router_analytics_shared_candidate_runtime_status import ( + InferenceRouterAnalyticsSharedCandidateRuntimeStatus, +) + +if TYPE_CHECKING: + from ..models.inference_router_analytics_breakdown import ( + InferenceRouterAnalyticsBreakdown, + ) + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + from ..models.inference_router_analytics_point import InferenceRouterAnalyticsPoint + + +T = TypeVar("T", bound="InferenceRouterAnalytics") + + +@_attrs_define +class InferenceRouterAnalytics: + """ + Attributes: + router_id (str): + interval (InferenceRouterAnalyticsInterval): + summary (InferenceRouterAnalyticsMetrics): + time_series (list[InferenceRouterAnalyticsPoint]): + model_breakdown (list[InferenceRouterAnalyticsBreakdown]): + decision_breakdown (list[InferenceRouterAnalyticsBreakdown]): + status_breakdown (list[InferenceRouterAnalyticsBreakdown]): + shard_breakdown (list[InferenceRouterAnalyticsBreakdown]): Requests attributed to the shard that served them, + which differs from the router's primary placement after a failover or during a shard migration. + shared_candidate_runtime_status (InferenceRouterAnalyticsSharedCandidateRuntimeStatus): + shared_candidate_runtime_refs_total (int): + shared_candidate_runtime_refs_included (int): + coverage_from (datetime.datetime | None): Earliest complete analytics bucket available from DynamoDB. + coverage_through (datetime.datetime | None): Exclusive end of complete analytics buckets proven by the ingestion + frontier. + complete (bool): True only when the requested range is fully inside analytics coverage. + """ + + router_id: str + interval: InferenceRouterAnalyticsInterval + summary: InferenceRouterAnalyticsMetrics + time_series: list[InferenceRouterAnalyticsPoint] + model_breakdown: list[InferenceRouterAnalyticsBreakdown] + decision_breakdown: list[InferenceRouterAnalyticsBreakdown] + status_breakdown: list[InferenceRouterAnalyticsBreakdown] + shard_breakdown: list[InferenceRouterAnalyticsBreakdown] + shared_candidate_runtime_status: ( + InferenceRouterAnalyticsSharedCandidateRuntimeStatus + ) + shared_candidate_runtime_refs_total: int + shared_candidate_runtime_refs_included: int + coverage_from: datetime.datetime | None + coverage_through: datetime.datetime | None + complete: bool + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + router_id = self.router_id + + interval = self.interval.value + + summary = self.summary.to_dict() + + time_series = [] + for time_series_item_data in self.time_series: + time_series_item = time_series_item_data.to_dict() + time_series.append(time_series_item) + + model_breakdown = [] + for model_breakdown_item_data in self.model_breakdown: + model_breakdown_item = model_breakdown_item_data.to_dict() + model_breakdown.append(model_breakdown_item) + + decision_breakdown = [] + for decision_breakdown_item_data in self.decision_breakdown: + decision_breakdown_item = decision_breakdown_item_data.to_dict() + decision_breakdown.append(decision_breakdown_item) + + status_breakdown = [] + for status_breakdown_item_data in self.status_breakdown: + status_breakdown_item = status_breakdown_item_data.to_dict() + status_breakdown.append(status_breakdown_item) + + shard_breakdown = [] + for shard_breakdown_item_data in self.shard_breakdown: + shard_breakdown_item = shard_breakdown_item_data.to_dict() + shard_breakdown.append(shard_breakdown_item) + + shared_candidate_runtime_status = self.shared_candidate_runtime_status.value + + shared_candidate_runtime_refs_total = self.shared_candidate_runtime_refs_total + + shared_candidate_runtime_refs_included = ( + self.shared_candidate_runtime_refs_included + ) + + coverage_from: None | str + if isinstance(self.coverage_from, datetime.datetime): + coverage_from = self.coverage_from.isoformat() + else: + coverage_from = self.coverage_from + + coverage_through: None | str + if isinstance(self.coverage_through, datetime.datetime): + coverage_through = self.coverage_through.isoformat() + else: + coverage_through = self.coverage_through + + complete = self.complete + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "router_id": router_id, + "interval": interval, + "summary": summary, + "time_series": time_series, + "model_breakdown": model_breakdown, + "decision_breakdown": decision_breakdown, + "status_breakdown": status_breakdown, + "shard_breakdown": shard_breakdown, + "shared_candidate_runtime_status": shared_candidate_runtime_status, + "shared_candidate_runtime_refs_total": shared_candidate_runtime_refs_total, + "shared_candidate_runtime_refs_included": shared_candidate_runtime_refs_included, + "coverage_from": coverage_from, + "coverage_through": coverage_through, + "complete": complete, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_analytics_breakdown import ( + InferenceRouterAnalyticsBreakdown, + ) + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + from ..models.inference_router_analytics_point import ( + InferenceRouterAnalyticsPoint, + ) + + d = dict(src_dict) + router_id = d.pop("router_id") + + interval = InferenceRouterAnalyticsInterval(d.pop("interval")) + + summary = InferenceRouterAnalyticsMetrics.from_dict(d.pop("summary")) + + time_series = [] + _time_series = d.pop("time_series") + for time_series_item_data in _time_series: + time_series_item = InferenceRouterAnalyticsPoint.from_dict( + time_series_item_data + ) + + time_series.append(time_series_item) + + model_breakdown = [] + _model_breakdown = d.pop("model_breakdown") + for model_breakdown_item_data in _model_breakdown: + model_breakdown_item = InferenceRouterAnalyticsBreakdown.from_dict( + model_breakdown_item_data + ) + + model_breakdown.append(model_breakdown_item) + + decision_breakdown = [] + _decision_breakdown = d.pop("decision_breakdown") + for decision_breakdown_item_data in _decision_breakdown: + decision_breakdown_item = InferenceRouterAnalyticsBreakdown.from_dict( + decision_breakdown_item_data + ) + + decision_breakdown.append(decision_breakdown_item) + + status_breakdown = [] + _status_breakdown = d.pop("status_breakdown") + for status_breakdown_item_data in _status_breakdown: + status_breakdown_item = InferenceRouterAnalyticsBreakdown.from_dict( + status_breakdown_item_data + ) + + status_breakdown.append(status_breakdown_item) + + shard_breakdown = [] + _shard_breakdown = d.pop("shard_breakdown") + for shard_breakdown_item_data in _shard_breakdown: + shard_breakdown_item = InferenceRouterAnalyticsBreakdown.from_dict( + shard_breakdown_item_data + ) + + shard_breakdown.append(shard_breakdown_item) + + shared_candidate_runtime_status = ( + InferenceRouterAnalyticsSharedCandidateRuntimeStatus( + d.pop("shared_candidate_runtime_status") + ) + ) + + shared_candidate_runtime_refs_total = d.pop( + "shared_candidate_runtime_refs_total" + ) + + shared_candidate_runtime_refs_included = d.pop( + "shared_candidate_runtime_refs_included" + ) + + def _parse_coverage_from(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + coverage_from_type_0 = datetime.datetime.fromisoformat(data) + + return coverage_from_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + coverage_from = _parse_coverage_from(d.pop("coverage_from")) + + def _parse_coverage_through(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + coverage_through_type_0 = datetime.datetime.fromisoformat(data) + + return coverage_through_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + coverage_through = _parse_coverage_through(d.pop("coverage_through")) + + complete = d.pop("complete") + + inference_router_analytics = cls( + router_id=router_id, + interval=interval, + summary=summary, + time_series=time_series, + model_breakdown=model_breakdown, + decision_breakdown=decision_breakdown, + status_breakdown=status_breakdown, + shard_breakdown=shard_breakdown, + shared_candidate_runtime_status=shared_candidate_runtime_status, + shared_candidate_runtime_refs_total=shared_candidate_runtime_refs_total, + shared_candidate_runtime_refs_included=shared_candidate_runtime_refs_included, + coverage_from=coverage_from, + coverage_through=coverage_through, + complete=complete, + ) + + inference_router_analytics.additional_properties = d + return inference_router_analytics + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_analytics_breakdown.py b/src/graphn/_generated/models/inference_router_analytics_breakdown.py new file mode 100644 index 0000000..e4fd93e --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics_breakdown.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + + +T = TypeVar("T", bound="InferenceRouterAnalyticsBreakdown") + + +@_attrs_define +class InferenceRouterAnalyticsBreakdown: + """ + Attributes: + key (str): + metrics (InferenceRouterAnalyticsMetrics): + model_ref (str | Unset): + model_source (str | Unset): + """ + + key: str + metrics: InferenceRouterAnalyticsMetrics + model_ref: str | Unset = UNSET + model_source: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + key = self.key + + metrics = self.metrics.to_dict() + + model_ref = self.model_ref + + model_source = self.model_source + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "key": key, + "metrics": metrics, + } + ) + if model_ref is not UNSET: + field_dict["model_ref"] = model_ref + if model_source is not UNSET: + field_dict["model_source"] = model_source + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + + d = dict(src_dict) + key = d.pop("key") + + metrics = InferenceRouterAnalyticsMetrics.from_dict(d.pop("metrics")) + + model_ref = d.pop("model_ref", UNSET) + + model_source = d.pop("model_source", UNSET) + + inference_router_analytics_breakdown = cls( + key=key, + metrics=metrics, + model_ref=model_ref, + model_source=model_source, + ) + + inference_router_analytics_breakdown.additional_properties = d + return inference_router_analytics_breakdown + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_analytics_interval.py b/src/graphn/_generated/models/inference_router_analytics_interval.py new file mode 100644 index 0000000..fd9ffeb --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics_interval.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterAnalyticsInterval(StrEnum): + DAY = "day" + HOUR = "hour" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_analytics_metrics.py b/src/graphn/_generated/models/inference_router_analytics_metrics.py new file mode 100644 index 0000000..d3d2ca0 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics_metrics.py @@ -0,0 +1,194 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="InferenceRouterAnalyticsMetrics") + + +@_attrs_define +class InferenceRouterAnalyticsMetrics: + """ + Attributes: + requests (int): + input_tokens (float): + output_tokens (float): + total_tokens (float): + success_count (int): + error_count (int): + duration_ms_sum (float): + average_latency_ms (float): + estimated_cost (float | None): Sum of event-provided estimated_cost_usd; no local rates are applied. + shared_candidate_gpu_seconds (float | None): Shared runtime for historically selected custom models, not router- + attributed cost. + approximate_p50_latency_ms (float | None | Unset): + approximate_p95_latency_ms (float | None | Unset): + """ + + requests: int + input_tokens: float + output_tokens: float + total_tokens: float + success_count: int + error_count: int + duration_ms_sum: float + average_latency_ms: float + estimated_cost: float | None + shared_candidate_gpu_seconds: float | None + approximate_p50_latency_ms: float | None | Unset = UNSET + approximate_p95_latency_ms: float | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + requests = self.requests + + input_tokens = self.input_tokens + + output_tokens = self.output_tokens + + total_tokens = self.total_tokens + + success_count = self.success_count + + error_count = self.error_count + + duration_ms_sum = self.duration_ms_sum + + average_latency_ms = self.average_latency_ms + + estimated_cost: float | None + estimated_cost = self.estimated_cost + + shared_candidate_gpu_seconds: float | None + shared_candidate_gpu_seconds = self.shared_candidate_gpu_seconds + + approximate_p50_latency_ms: float | None | Unset + if isinstance(self.approximate_p50_latency_ms, Unset): + approximate_p50_latency_ms = UNSET + else: + approximate_p50_latency_ms = self.approximate_p50_latency_ms + + approximate_p95_latency_ms: float | None | Unset + if isinstance(self.approximate_p95_latency_ms, Unset): + approximate_p95_latency_ms = UNSET + else: + approximate_p95_latency_ms = self.approximate_p95_latency_ms + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "requests": requests, + "input_tokens": input_tokens, + "output_tokens": output_tokens, + "total_tokens": total_tokens, + "success_count": success_count, + "error_count": error_count, + "duration_ms_sum": duration_ms_sum, + "average_latency_ms": average_latency_ms, + "estimated_cost": estimated_cost, + "shared_candidate_gpu_seconds": shared_candidate_gpu_seconds, + } + ) + if approximate_p50_latency_ms is not UNSET: + field_dict["approximate_p50_latency_ms"] = approximate_p50_latency_ms + if approximate_p95_latency_ms is not UNSET: + field_dict["approximate_p95_latency_ms"] = approximate_p95_latency_ms + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + requests = d.pop("requests") + + input_tokens = d.pop("input_tokens") + + output_tokens = d.pop("output_tokens") + + total_tokens = d.pop("total_tokens") + + success_count = d.pop("success_count") + + error_count = d.pop("error_count") + + duration_ms_sum = d.pop("duration_ms_sum") + + average_latency_ms = d.pop("average_latency_ms") + + def _parse_estimated_cost(data: object) -> float | None: + if data is None: + return data + return cast(float | None, data) + + estimated_cost = _parse_estimated_cost(d.pop("estimated_cost")) + + def _parse_shared_candidate_gpu_seconds(data: object) -> float | None: + if data is None: + return data + return cast(float | None, data) + + shared_candidate_gpu_seconds = _parse_shared_candidate_gpu_seconds( + d.pop("shared_candidate_gpu_seconds") + ) + + def _parse_approximate_p50_latency_ms(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + approximate_p50_latency_ms = _parse_approximate_p50_latency_ms( + d.pop("approximate_p50_latency_ms", UNSET) + ) + + def _parse_approximate_p95_latency_ms(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + approximate_p95_latency_ms = _parse_approximate_p95_latency_ms( + d.pop("approximate_p95_latency_ms", UNSET) + ) + + inference_router_analytics_metrics = cls( + requests=requests, + input_tokens=input_tokens, + output_tokens=output_tokens, + total_tokens=total_tokens, + success_count=success_count, + error_count=error_count, + duration_ms_sum=duration_ms_sum, + average_latency_ms=average_latency_ms, + estimated_cost=estimated_cost, + shared_candidate_gpu_seconds=shared_candidate_gpu_seconds, + approximate_p50_latency_ms=approximate_p50_latency_ms, + approximate_p95_latency_ms=approximate_p95_latency_ms, + ) + + inference_router_analytics_metrics.additional_properties = d + return inference_router_analytics_metrics + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_analytics_point.py b/src/graphn/_generated/models/inference_router_analytics_point.py new file mode 100644 index 0000000..b07dcc2 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics_point.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + + +T = TypeVar("T", bound="InferenceRouterAnalyticsPoint") + + +@_attrs_define +class InferenceRouterAnalyticsPoint: + """ + Attributes: + timestamp (datetime.datetime): + metrics (InferenceRouterAnalyticsMetrics): + """ + + timestamp: datetime.datetime + metrics: InferenceRouterAnalyticsMetrics + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + timestamp = self.timestamp.isoformat() + + metrics = self.metrics.to_dict() + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "timestamp": timestamp, + "metrics": metrics, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_analytics_metrics import ( + InferenceRouterAnalyticsMetrics, + ) + + d = dict(src_dict) + timestamp = datetime.datetime.fromisoformat(d.pop("timestamp")) + + metrics = InferenceRouterAnalyticsMetrics.from_dict(d.pop("metrics")) + + inference_router_analytics_point = cls( + timestamp=timestamp, + metrics=metrics, + ) + + inference_router_analytics_point.additional_properties = d + return inference_router_analytics_point + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_analytics_shared_candidate_runtime_status.py b/src/graphn/_generated/models/inference_router_analytics_shared_candidate_runtime_status.py new file mode 100644 index 0000000..da55f98 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_analytics_shared_candidate_runtime_status.py @@ -0,0 +1,10 @@ +from enum import StrEnum + + +class InferenceRouterAnalyticsSharedCandidateRuntimeStatus(StrEnum): + COMPLETE = "complete" + DEGRADED = "degraded" + NOT_APPLICABLE = "not_applicable" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_candidate.py b/src/graphn/_generated/models/inference_router_candidate.py new file mode 100644 index 0000000..342cca7 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_candidate.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +T = TypeVar("T", bound="InferenceRouterCandidate") + + +@_attrs_define +class InferenceRouterCandidate: + """ + Attributes: + target (str): Unprefixed built-in alias or `custom:cm_...` logical reference. + lanes (list[str]): + weight (int): + order (int): + """ + + target: str + lanes: list[str] + weight: int + order: int + + def to_dict(self) -> dict[str, Any]: + target = self.target + + lanes = self.lanes + + weight = self.weight + + order = self.order + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "target": target, + "lanes": lanes, + "weight": weight, + "order": order, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + target = d.pop("target") + + lanes = cast(list[str], d.pop("lanes")) + + weight = d.pop("weight") + + order = d.pop("order") + + inference_router_candidate = cls( + target=target, + lanes=lanes, + weight=weight, + order=order, + ) + + return inference_router_candidate diff --git a/src/graphn/_generated/models/inference_router_config.py b/src/graphn/_generated/models/inference_router_config.py new file mode 100644 index 0000000..f11fa69 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_config.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.inference_router_config_fallback_policy import ( + InferenceRouterConfigFallbackPolicy, +) +from ..models.inference_router_config_preset import InferenceRouterConfigPreset +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_candidate import InferenceRouterCandidate + + +T = TypeVar("T", bound="InferenceRouterConfig") + + +@_attrs_define +class InferenceRouterConfig: + """ + Attributes: + preset (InferenceRouterConfigPreset): + candidates (list[InferenceRouterCandidate]): + fallback_policy (InferenceRouterConfigFallbackPolicy | Unset): What callers get when no shard can classify the + request. `degraded_general` serves the highest-weight general candidate without classification, trading routing + quality for availability. Default: InferenceRouterConfigFallbackPolicy.FAIL_CLOSED. + """ + + preset: InferenceRouterConfigPreset + candidates: list[InferenceRouterCandidate] + fallback_policy: InferenceRouterConfigFallbackPolicy | Unset = ( + InferenceRouterConfigFallbackPolicy.FAIL_CLOSED + ) + + def to_dict(self) -> dict[str, Any]: + preset = self.preset.value + + candidates = [] + for candidates_item_data in self.candidates: + candidates_item = candidates_item_data.to_dict() + candidates.append(candidates_item) + + fallback_policy: str | Unset = UNSET + if not isinstance(self.fallback_policy, Unset): + fallback_policy = self.fallback_policy.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "preset": preset, + "candidates": candidates, + } + ) + if fallback_policy is not UNSET: + field_dict["fallback_policy"] = fallback_policy + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_candidate import InferenceRouterCandidate + + d = dict(src_dict) + preset = InferenceRouterConfigPreset(d.pop("preset")) + + candidates = [] + _candidates = d.pop("candidates") + for candidates_item_data in _candidates: + candidates_item = InferenceRouterCandidate.from_dict(candidates_item_data) + + candidates.append(candidates_item) + + _fallback_policy = d.pop("fallback_policy", UNSET) + fallback_policy: InferenceRouterConfigFallbackPolicy | Unset + if isinstance(_fallback_policy, Unset): + fallback_policy = UNSET + else: + fallback_policy = InferenceRouterConfigFallbackPolicy(_fallback_policy) + + inference_router_config = cls( + preset=preset, + candidates=candidates, + fallback_policy=fallback_policy, + ) + + return inference_router_config diff --git a/src/graphn/_generated/models/inference_router_config_fallback_policy.py b/src/graphn/_generated/models/inference_router_config_fallback_policy.py new file mode 100644 index 0000000..9b69ca3 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_config_fallback_policy.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterConfigFallbackPolicy(StrEnum): + DEGRADED_GENERAL = "degraded_general" + FAIL_CLOSED = "fail_closed" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_config_preset.py b/src/graphn/_generated/models/inference_router_config_preset.py new file mode 100644 index 0000000..0bf9a7d --- /dev/null +++ b/src/graphn/_generated/models/inference_router_config_preset.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class InferenceRouterConfigPreset(StrEnum): + BALANCED = "balanced" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_create.py b/src/graphn/_generated/models/inference_router_create.py new file mode 100644 index 0000000..0ac38f2 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_create.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.inference_router_create_fallback_policy import ( + InferenceRouterCreateFallbackPolicy, +) +from ..models.inference_router_create_preset import InferenceRouterCreatePreset +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_candidate import InferenceRouterCandidate + + +T = TypeVar("T", bound="InferenceRouterCreate") + + +@_attrs_define +class InferenceRouterCreate: + """ + Attributes: + name (str): + preset (InferenceRouterCreatePreset): + candidates (list[InferenceRouterCandidate]): + display_name (str | Unset): + fallback_policy (InferenceRouterCreateFallbackPolicy | Unset): Default: + InferenceRouterCreateFallbackPolicy.FAIL_CLOSED. + """ + + name: str + preset: InferenceRouterCreatePreset + candidates: list[InferenceRouterCandidate] + display_name: str | Unset = UNSET + fallback_policy: InferenceRouterCreateFallbackPolicy | Unset = ( + InferenceRouterCreateFallbackPolicy.FAIL_CLOSED + ) + + def to_dict(self) -> dict[str, Any]: + name = self.name + + preset = self.preset.value + + candidates = [] + for candidates_item_data in self.candidates: + candidates_item = candidates_item_data.to_dict() + candidates.append(candidates_item) + + display_name = self.display_name + + fallback_policy: str | Unset = UNSET + if not isinstance(self.fallback_policy, Unset): + fallback_policy = self.fallback_policy.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "preset": preset, + "candidates": candidates, + } + ) + if display_name is not UNSET: + field_dict["display_name"] = display_name + if fallback_policy is not UNSET: + field_dict["fallback_policy"] = fallback_policy + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_candidate import InferenceRouterCandidate + + d = dict(src_dict) + name = d.pop("name") + + preset = InferenceRouterCreatePreset(d.pop("preset")) + + candidates = [] + _candidates = d.pop("candidates") + for candidates_item_data in _candidates: + candidates_item = InferenceRouterCandidate.from_dict(candidates_item_data) + + candidates.append(candidates_item) + + display_name = d.pop("display_name", UNSET) + + _fallback_policy = d.pop("fallback_policy", UNSET) + fallback_policy: InferenceRouterCreateFallbackPolicy | Unset + if isinstance(_fallback_policy, Unset): + fallback_policy = UNSET + else: + fallback_policy = InferenceRouterCreateFallbackPolicy(_fallback_policy) + + inference_router_create = cls( + name=name, + preset=preset, + candidates=candidates, + display_name=display_name, + fallback_policy=fallback_policy, + ) + + return inference_router_create diff --git a/src/graphn/_generated/models/inference_router_create_fallback_policy.py b/src/graphn/_generated/models/inference_router_create_fallback_policy.py new file mode 100644 index 0000000..bfb56ae --- /dev/null +++ b/src/graphn/_generated/models/inference_router_create_fallback_policy.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterCreateFallbackPolicy(StrEnum): + DEGRADED_GENERAL = "degraded_general" + FAIL_CLOSED = "fail_closed" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_create_preset.py b/src/graphn/_generated/models/inference_router_create_preset.py new file mode 100644 index 0000000..a627fd6 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_create_preset.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class InferenceRouterCreatePreset(StrEnum): + BALANCED = "balanced" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_lane.py b/src/graphn/_generated/models/inference_router_lane.py new file mode 100644 index 0000000..b575d86 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane.py @@ -0,0 +1,140 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.inference_router_lane_match import InferenceRouterLaneMatch +from ..types import UNSET, Unset + +T = TypeVar("T", bound="InferenceRouterLane") + + +@_attrs_define +class InferenceRouterLane: + """ + Attributes: + id (str): + reference (str): The value to put in a router candidate's `lanes`. + display_name (str): + match (InferenceRouterLaneMatch): + phrases (list[str]): + version (int): + used_by (list[str]): IDs of routers whose draft, pending, active, or draining revision references this lane. A + previous revision keeps draining from its shard for a while after a newer one activates, so a router can stay + listed (and DELETE can stay 409) after its current revisions have dropped the lane. + created_at (datetime.datetime): + updated_at (datetime.datetime): + description (str | Unset): + """ + + id: str + reference: str + display_name: str + match: InferenceRouterLaneMatch + phrases: list[str] + version: int + used_by: list[str] + created_at: datetime.datetime + updated_at: datetime.datetime + description: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + id = self.id + + reference = self.reference + + display_name = self.display_name + + match = self.match.value + + phrases = self.phrases + + version = self.version + + used_by = self.used_by + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + description = self.description + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "id": id, + "reference": reference, + "display_name": display_name, + "match": match, + "phrases": phrases, + "version": version, + "used_by": used_by, + "created_at": created_at, + "updated_at": updated_at, + } + ) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + id = d.pop("id") + + reference = d.pop("reference") + + display_name = d.pop("display_name") + + match = InferenceRouterLaneMatch(d.pop("match")) + + phrases = cast(list[str], d.pop("phrases")) + + version = d.pop("version") + + used_by = cast(list[str], d.pop("used_by")) + + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) + + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) + + description = d.pop("description", UNSET) + + inference_router_lane = cls( + id=id, + reference=reference, + display_name=display_name, + match=match, + phrases=phrases, + version=version, + used_by=used_by, + created_at=created_at, + updated_at=updated_at, + description=description, + ) + + inference_router_lane.additional_properties = d + return inference_router_lane + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_lane_create.py b/src/graphn/_generated/models/inference_router_lane_create.py new file mode 100644 index 0000000..93b12c7 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_create.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +from ..models.inference_router_lane_create_match import InferenceRouterLaneCreateMatch +from ..types import UNSET, Unset + +T = TypeVar("T", bound="InferenceRouterLaneCreate") + + +@_attrs_define +class InferenceRouterLaneCreate: + """ + Attributes: + display_name (str): + phrases (list[str]): + description (str | Unset): + match (InferenceRouterLaneCreateMatch | Unset): `any` matches when one phrase appears; `all` requires every + phrase. Default: InferenceRouterLaneCreateMatch.ANY. + """ + + display_name: str + phrases: list[str] + description: str | Unset = UNSET + match: InferenceRouterLaneCreateMatch | Unset = InferenceRouterLaneCreateMatch.ANY + + def to_dict(self) -> dict[str, Any]: + display_name = self.display_name + + phrases = self.phrases + + description = self.description + + match: str | Unset = UNSET + if not isinstance(self.match, Unset): + match = self.match.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "display_name": display_name, + "phrases": phrases, + } + ) + if description is not UNSET: + field_dict["description"] = description + if match is not UNSET: + field_dict["match"] = match + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + display_name = d.pop("display_name") + + phrases = cast(list[str], d.pop("phrases")) + + description = d.pop("description", UNSET) + + _match = d.pop("match", UNSET) + match: InferenceRouterLaneCreateMatch | Unset + if isinstance(_match, Unset): + match = UNSET + else: + match = InferenceRouterLaneCreateMatch(_match) + + inference_router_lane_create = cls( + display_name=display_name, + phrases=phrases, + description=description, + match=match, + ) + + return inference_router_lane_create diff --git a/src/graphn/_generated/models/inference_router_lane_create_match.py b/src/graphn/_generated/models/inference_router_lane_create_match.py new file mode 100644 index 0000000..75c565f --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_create_match.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterLaneCreateMatch(StrEnum): + ALL = "all" + ANY = "any" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_lane_list.py b/src/graphn/_generated/models/inference_router_lane_list.py new file mode 100644 index 0000000..aaf55b6 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_list.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +if TYPE_CHECKING: + from ..models.inference_router_lane import InferenceRouterLane + + +T = TypeVar("T", bound="InferenceRouterLaneList") + + +@_attrs_define +class InferenceRouterLaneList: + """ + Attributes: + items (list[InferenceRouterLane]): + total (int): + """ + + items: list[InferenceRouterLane] + total: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + items = [] + for items_item_data in self.items: + items_item = items_item_data.to_dict() + items.append(items_item) + + total = self.total + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "items": items, + "total": total, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_lane import InferenceRouterLane + + d = dict(src_dict) + items = [] + _items = d.pop("items") + for items_item_data in _items: + items_item = InferenceRouterLane.from_dict(items_item_data) + + items.append(items_item) + + total = d.pop("total") + + inference_router_lane_list = cls( + items=items, + total=total, + ) + + inference_router_lane_list.additional_properties = d + return inference_router_lane_list + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_lane_match.py b/src/graphn/_generated/models/inference_router_lane_match.py new file mode 100644 index 0000000..7617638 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_match.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterLaneMatch(StrEnum): + ALL = "all" + ANY = "any" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_lane_update.py b/src/graphn/_generated/models/inference_router_lane_update.py new file mode 100644 index 0000000..285ee2a --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_update.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define + +from ..models.inference_router_lane_update_match import InferenceRouterLaneUpdateMatch +from ..types import UNSET, Unset + +T = TypeVar("T", bound="InferenceRouterLaneUpdate") + + +@_attrs_define +class InferenceRouterLaneUpdate: + """ + Attributes: + expected_version (int): + display_name (str | Unset): + description (str | Unset): + match (InferenceRouterLaneUpdateMatch | Unset): + phrases (list[str] | Unset): + """ + + expected_version: int + display_name: str | Unset = UNSET + description: str | Unset = UNSET + match: InferenceRouterLaneUpdateMatch | Unset = UNSET + phrases: list[str] | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + expected_version = self.expected_version + + display_name = self.display_name + + description = self.description + + match: str | Unset = UNSET + if not isinstance(self.match, Unset): + match = self.match.value + + phrases: list[str] | Unset = UNSET + if not isinstance(self.phrases, Unset): + phrases = self.phrases + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "expected_version": expected_version, + } + ) + if display_name is not UNSET: + field_dict["display_name"] = display_name + if description is not UNSET: + field_dict["description"] = description + if match is not UNSET: + field_dict["match"] = match + if phrases is not UNSET: + field_dict["phrases"] = phrases + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + expected_version = d.pop("expected_version") + + display_name = d.pop("display_name", UNSET) + + description = d.pop("description", UNSET) + + _match = d.pop("match", UNSET) + match: InferenceRouterLaneUpdateMatch | Unset + if isinstance(_match, Unset): + match = UNSET + else: + match = InferenceRouterLaneUpdateMatch(_match) + + phrases = cast(list[str], d.pop("phrases", UNSET)) + + inference_router_lane_update = cls( + expected_version=expected_version, + display_name=display_name, + description=description, + match=match, + phrases=phrases, + ) + + return inference_router_lane_update diff --git a/src/graphn/_generated/models/inference_router_lane_update_match.py b/src/graphn/_generated/models/inference_router_lane_update_match.py new file mode 100644 index 0000000..bbcb29a --- /dev/null +++ b/src/graphn/_generated/models/inference_router_lane_update_match.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterLaneUpdateMatch(StrEnum): + ALL = "all" + ANY = "any" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_list.py b/src/graphn/_generated/models/inference_router_list.py new file mode 100644 index 0000000..49937bd --- /dev/null +++ b/src/graphn/_generated/models/inference_router_list.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router import InferenceRouter + + +T = TypeVar("T", bound="InferenceRouterList") + + +@_attrs_define +class InferenceRouterList: + """ + Attributes: + items (list[InferenceRouter]): + total (int): + continue_token (str | Unset): + """ + + items: list[InferenceRouter] + total: int + continue_token: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + items = [] + for items_item_data in self.items: + items_item = items_item_data.to_dict() + items.append(items_item) + + total = self.total + + continue_token = self.continue_token + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "items": items, + "total": total, + } + ) + if continue_token is not UNSET: + field_dict["continue_token"] = continue_token + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router import InferenceRouter + + d = dict(src_dict) + items = [] + _items = d.pop("items") + for items_item_data in _items: + items_item = InferenceRouter.from_dict(items_item_data) + + items.append(items_item) + + total = d.pop("total") + + continue_token = d.pop("continue_token", UNSET) + + inference_router_list = cls( + items=items, + total=total, + continue_token=continue_token, + ) + + inference_router_list.additional_properties = d + return inference_router_list + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_revision.py b/src/graphn/_generated/models/inference_router_revision.py new file mode 100644 index 0000000..ce3e123 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_revision.py @@ -0,0 +1,181 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.inference_router_revision_status import InferenceRouterRevisionStatus +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_config import InferenceRouterConfig + from ..models.inference_router_revision_shard_placements_item import ( + InferenceRouterRevisionShardPlacementsItem, + ) + from ..models.published_router_custom_lane import PublishedRouterCustomLane + + +T = TypeVar("T", bound="InferenceRouterRevision") + + +@_attrs_define +class InferenceRouterRevision: + """ + Attributes: + number (int): + status (InferenceRouterRevisionStatus): + config (InferenceRouterConfig): + manifest_hash (str): + created_at (datetime.datetime): + updated_at (datetime.datetime): + shard_placements (list[InferenceRouterRevisionShardPlacementsItem] | Unset): Shards carrying this revision. A + revision has one `primary` placement; a second `migrating` placement exists only while the revision is being + moved to another shard. + custom_lanes (list[PublishedRouterCustomLane] | Unset): The custom lane definitions this revision was saved + with. Compare against the current lanes to tell when a router needs republishing. + error_message (str | Unset): + """ + + number: int + status: InferenceRouterRevisionStatus + config: InferenceRouterConfig + manifest_hash: str + created_at: datetime.datetime + updated_at: datetime.datetime + shard_placements: list[InferenceRouterRevisionShardPlacementsItem] | Unset = UNSET + custom_lanes: list[PublishedRouterCustomLane] | Unset = UNSET + error_message: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + number = self.number + + status = self.status.value + + config = self.config.to_dict() + + manifest_hash = self.manifest_hash + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + shard_placements: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.shard_placements, Unset): + shard_placements = [] + for shard_placements_item_data in self.shard_placements: + shard_placements_item = shard_placements_item_data.to_dict() + shard_placements.append(shard_placements_item) + + custom_lanes: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.custom_lanes, Unset): + custom_lanes = [] + for custom_lanes_item_data in self.custom_lanes: + custom_lanes_item = custom_lanes_item_data.to_dict() + custom_lanes.append(custom_lanes_item) + + error_message = self.error_message + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "number": number, + "status": status, + "config": config, + "manifest_hash": manifest_hash, + "created_at": created_at, + "updated_at": updated_at, + } + ) + if shard_placements is not UNSET: + field_dict["shard_placements"] = shard_placements + if custom_lanes is not UNSET: + field_dict["custom_lanes"] = custom_lanes + if error_message is not UNSET: + field_dict["error_message"] = error_message + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_config import InferenceRouterConfig + from ..models.inference_router_revision_shard_placements_item import ( + InferenceRouterRevisionShardPlacementsItem, + ) + from ..models.published_router_custom_lane import PublishedRouterCustomLane + + d = dict(src_dict) + number = d.pop("number") + + status = InferenceRouterRevisionStatus(d.pop("status")) + + config = InferenceRouterConfig.from_dict(d.pop("config")) + + manifest_hash = d.pop("manifest_hash") + + created_at = datetime.datetime.fromisoformat(d.pop("created_at")) + + updated_at = datetime.datetime.fromisoformat(d.pop("updated_at")) + + _shard_placements = d.pop("shard_placements", UNSET) + shard_placements: list[InferenceRouterRevisionShardPlacementsItem] | Unset = ( + UNSET + ) + if _shard_placements is not UNSET: + shard_placements = [] + for shard_placements_item_data in _shard_placements: + shard_placements_item = ( + InferenceRouterRevisionShardPlacementsItem.from_dict( + shard_placements_item_data + ) + ) + + shard_placements.append(shard_placements_item) + + _custom_lanes = d.pop("custom_lanes", UNSET) + custom_lanes: list[PublishedRouterCustomLane] | Unset = UNSET + if _custom_lanes is not UNSET: + custom_lanes = [] + for custom_lanes_item_data in _custom_lanes: + custom_lanes_item = PublishedRouterCustomLane.from_dict( + custom_lanes_item_data + ) + + custom_lanes.append(custom_lanes_item) + + error_message = d.pop("error_message", UNSET) + + inference_router_revision = cls( + number=number, + status=status, + config=config, + manifest_hash=manifest_hash, + created_at=created_at, + updated_at=updated_at, + shard_placements=shard_placements, + custom_lanes=custom_lanes, + error_message=error_message, + ) + + inference_router_revision.additional_properties = d + return inference_router_revision + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_revision_shard_placements_item.py b/src/graphn/_generated/models/inference_router_revision_shard_placements_item.py new file mode 100644 index 0000000..cb2e567 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_revision_shard_placements_item.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.inference_router_revision_shard_placements_item_role import ( + InferenceRouterRevisionShardPlacementsItemRole, +) +from ..models.inference_router_revision_shard_placements_item_state import ( + InferenceRouterRevisionShardPlacementsItemState, +) + +T = TypeVar("T", bound="InferenceRouterRevisionShardPlacementsItem") + + +@_attrs_define +class InferenceRouterRevisionShardPlacementsItem: + """ + Attributes: + shard_id (str): + alias (str): + role (InferenceRouterRevisionShardPlacementsItemRole): + state (InferenceRouterRevisionShardPlacementsItemState): + """ + + shard_id: str + alias: str + role: InferenceRouterRevisionShardPlacementsItemRole + state: InferenceRouterRevisionShardPlacementsItemState + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + shard_id = self.shard_id + + alias = self.alias + + role = self.role.value + + state = self.state.value + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "shard_id": shard_id, + "alias": alias, + "role": role, + "state": state, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + shard_id = d.pop("shard_id") + + alias = d.pop("alias") + + role = InferenceRouterRevisionShardPlacementsItemRole(d.pop("role")) + + state = InferenceRouterRevisionShardPlacementsItemState(d.pop("state")) + + inference_router_revision_shard_placements_item = cls( + shard_id=shard_id, + alias=alias, + role=role, + state=state, + ) + + inference_router_revision_shard_placements_item.additional_properties = d + return inference_router_revision_shard_placements_item + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/inference_router_revision_shard_placements_item_role.py b/src/graphn/_generated/models/inference_router_revision_shard_placements_item_role.py new file mode 100644 index 0000000..957edd7 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_revision_shard_placements_item_role.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterRevisionShardPlacementsItemRole(StrEnum): + MIGRATING = "migrating" + PRIMARY = "primary" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_revision_shard_placements_item_state.py b/src/graphn/_generated/models/inference_router_revision_shard_placements_item_state.py new file mode 100644 index 0000000..ca28dac --- /dev/null +++ b/src/graphn/_generated/models/inference_router_revision_shard_placements_item_state.py @@ -0,0 +1,10 @@ +from enum import StrEnum + + +class InferenceRouterRevisionShardPlacementsItemState(StrEnum): + ACTIVE = "active" + ASSIGNED = "assigned" + DRAINING = "draining" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_revision_status.py b/src/graphn/_generated/models/inference_router_revision_status.py new file mode 100644 index 0000000..6e13d6b --- /dev/null +++ b/src/graphn/_generated/models/inference_router_revision_status.py @@ -0,0 +1,11 @@ +from enum import StrEnum + + +class InferenceRouterRevisionStatus(StrEnum): + ACTIVE = "active" + DRAFT = "draft" + FAILED = "failed" + PENDING = "pending" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_scope.py b/src/graphn/_generated/models/inference_router_scope.py new file mode 100644 index 0000000..3011f4f --- /dev/null +++ b/src/graphn/_generated/models/inference_router_scope.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterScope(StrEnum): + PLATFORM = "platform" + WORKSPACE = "workspace" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_status.py b/src/graphn/_generated/models/inference_router_status.py new file mode 100644 index 0000000..12ce5fe --- /dev/null +++ b/src/graphn/_generated/models/inference_router_status.py @@ -0,0 +1,13 @@ +from enum import StrEnum + + +class InferenceRouterStatus(StrEnum): + ACTIVE = "active" + DELETED = "deleted" + DELETING = "deleting" + DRAFT = "draft" + FAILED = "failed" + PENDING = "pending" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_update.py b/src/graphn/_generated/models/inference_router_update.py new file mode 100644 index 0000000..51e0bbb --- /dev/null +++ b/src/graphn/_generated/models/inference_router_update.py @@ -0,0 +1,118 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.inference_router_update_fallback_policy import ( + InferenceRouterUpdateFallbackPolicy, +) +from ..models.inference_router_update_preset import InferenceRouterUpdatePreset +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.inference_router_candidate import InferenceRouterCandidate + + +T = TypeVar("T", bound="InferenceRouterUpdate") + + +@_attrs_define +class InferenceRouterUpdate: + """ + Attributes: + expected_revision (int): + display_name (str | Unset): + preset (InferenceRouterUpdatePreset | Unset): + candidates (list[InferenceRouterCandidate] | Unset): + fallback_policy (InferenceRouterUpdateFallbackPolicy | Unset): + """ + + expected_revision: int + display_name: str | Unset = UNSET + preset: InferenceRouterUpdatePreset | Unset = UNSET + candidates: list[InferenceRouterCandidate] | Unset = UNSET + fallback_policy: InferenceRouterUpdateFallbackPolicy | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + expected_revision = self.expected_revision + + display_name = self.display_name + + preset: str | Unset = UNSET + if not isinstance(self.preset, Unset): + preset = self.preset.value + + candidates: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.candidates, Unset): + candidates = [] + for candidates_item_data in self.candidates: + candidates_item = candidates_item_data.to_dict() + candidates.append(candidates_item) + + fallback_policy: str | Unset = UNSET + if not isinstance(self.fallback_policy, Unset): + fallback_policy = self.fallback_policy.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "expected_revision": expected_revision, + } + ) + if display_name is not UNSET: + field_dict["display_name"] = display_name + if preset is not UNSET: + field_dict["preset"] = preset + if candidates is not UNSET: + field_dict["candidates"] = candidates + if fallback_policy is not UNSET: + field_dict["fallback_policy"] = fallback_policy + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.inference_router_candidate import InferenceRouterCandidate + + d = dict(src_dict) + expected_revision = d.pop("expected_revision") + + display_name = d.pop("display_name", UNSET) + + _preset = d.pop("preset", UNSET) + preset: InferenceRouterUpdatePreset | Unset + if isinstance(_preset, Unset): + preset = UNSET + else: + preset = InferenceRouterUpdatePreset(_preset) + + _candidates = d.pop("candidates", UNSET) + candidates: list[InferenceRouterCandidate] | Unset = UNSET + if _candidates is not UNSET: + candidates = [] + for candidates_item_data in _candidates: + candidates_item = InferenceRouterCandidate.from_dict( + candidates_item_data + ) + + candidates.append(candidates_item) + + _fallback_policy = d.pop("fallback_policy", UNSET) + fallback_policy: InferenceRouterUpdateFallbackPolicy | Unset + if isinstance(_fallback_policy, Unset): + fallback_policy = UNSET + else: + fallback_policy = InferenceRouterUpdateFallbackPolicy(_fallback_policy) + + inference_router_update = cls( + expected_revision=expected_revision, + display_name=display_name, + preset=preset, + candidates=candidates, + fallback_policy=fallback_policy, + ) + + return inference_router_update diff --git a/src/graphn/_generated/models/inference_router_update_fallback_policy.py b/src/graphn/_generated/models/inference_router_update_fallback_policy.py new file mode 100644 index 0000000..0b5b775 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_update_fallback_policy.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class InferenceRouterUpdateFallbackPolicy(StrEnum): + DEGRADED_GENERAL = "degraded_general" + FAIL_CLOSED = "fail_closed" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_update_preset.py b/src/graphn/_generated/models/inference_router_update_preset.py new file mode 100644 index 0000000..dccd1ac --- /dev/null +++ b/src/graphn/_generated/models/inference_router_update_preset.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class InferenceRouterUpdatePreset(StrEnum): + BALANCED = "balanced" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/inference_router_validation.py b/src/graphn/_generated/models/inference_router_validation.py new file mode 100644 index 0000000..3089040 --- /dev/null +++ b/src/graphn/_generated/models/inference_router_validation.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="InferenceRouterValidation") + + +@_attrs_define +class InferenceRouterValidation: + """ + Attributes: + valid (bool): + manifest (str): + manifest_hash (str): + """ + + valid: bool + manifest: str + manifest_hash: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + valid = self.valid + + manifest = self.manifest + + manifest_hash = self.manifest_hash + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "valid": valid, + "manifest": manifest, + "manifest_hash": manifest_hash, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + valid = d.pop("valid") + + manifest = d.pop("manifest") + + manifest_hash = d.pop("manifest_hash") + + inference_router_validation = cls( + valid=valid, + manifest=manifest, + manifest_hash=manifest_hash, + ) + + inference_router_validation.additional_properties = d + return inference_router_validation + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/ingest_item.py b/src/graphn/_generated/models/ingest_item.py index 4fe8a1f..d2a2b2a 100644 --- a/src/graphn/_generated/models/ingest_item.py +++ b/src/graphn/_generated/models/ingest_item.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/ingest_item_input.py b/src/graphn/_generated/models/ingest_item_input.py index 18f1c8c..4752456 100644 --- a/src/graphn/_generated/models/ingest_item_input.py +++ b/src/graphn/_generated/models/ingest_item_input.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/ingest_item_input_metadata.py b/src/graphn/_generated/models/ingest_item_input_metadata.py index 76e7306..138bd17 100644 --- a/src/graphn/_generated/models/ingest_item_input_metadata.py +++ b/src/graphn/_generated/models/ingest_item_input_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="IngestItemInputMetadata") @_attrs_define class IngestItemInputMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/ingest_item_list.py b/src/graphn/_generated/models/ingest_item_list.py index debce5e..82a8dea 100644 --- a/src/graphn/_generated/models/ingest_item_list.py +++ b/src/graphn/_generated/models/ingest_item_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/ingest_job.py b/src/graphn/_generated/models/ingest_job.py index ac3cf9a..c2fffcd 100644 --- a/src/graphn/_generated/models/ingest_job.py +++ b/src/graphn/_generated/models/ingest_job.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/ingest_job_list.py b/src/graphn/_generated/models/ingest_job_list.py index ae4e5e2..14d13f4 100644 --- a/src/graphn/_generated/models/ingest_job_list.py +++ b/src/graphn/_generated/models/ingest_job_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/ingest_job_summary.py b/src/graphn/_generated/models/ingest_job_summary.py index 7ae0bb2..16eb0b7 100644 --- a/src/graphn/_generated/models/ingest_job_summary.py +++ b/src/graphn/_generated/models/ingest_job_summary.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="IngestJobSummary") diff --git a/src/graphn/_generated/models/integration.py b/src/graphn/_generated/models/integration.py new file mode 100644 index 0000000..7018cc5 --- /dev/null +++ b/src/graphn/_generated/models/integration.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..models.integration_auth_mode import IntegrationAuthMode +from ..models.integration_kind import IntegrationKind +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.integration_capability import IntegrationCapability + from ..models.integration_event import IntegrationEvent + + +T = TypeVar("T", bound="Integration") + + +@_attrs_define +class Integration: + """ + Attributes: + id (str): + display_name (str): + kind (IntegrationKind): + auth_mode (IntegrationAuthMode): + capabilities (list[IntegrationCapability]): + events (list[IntegrationEvent]): + description (str | Unset): + """ + + id: str + display_name: str + kind: IntegrationKind + auth_mode: IntegrationAuthMode + capabilities: list[IntegrationCapability] + events: list[IntegrationEvent] + description: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + id = self.id + + display_name = self.display_name + + kind = self.kind.value + + auth_mode = self.auth_mode.value + + capabilities = [] + for capabilities_item_data in self.capabilities: + capabilities_item = capabilities_item_data.to_dict() + capabilities.append(capabilities_item) + + events = [] + for events_item_data in self.events: + events_item = events_item_data.to_dict() + events.append(events_item) + + description = self.description + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "id": id, + "display_name": display_name, + "kind": kind, + "auth_mode": auth_mode, + "capabilities": capabilities, + "events": events, + } + ) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.integration_capability import IntegrationCapability + from ..models.integration_event import IntegrationEvent + + d = dict(src_dict) + id = d.pop("id") + + display_name = d.pop("display_name") + + kind = IntegrationKind(d.pop("kind")) + + auth_mode = IntegrationAuthMode(d.pop("auth_mode")) + + capabilities = [] + _capabilities = d.pop("capabilities") + for capabilities_item_data in _capabilities: + capabilities_item = IntegrationCapability.from_dict(capabilities_item_data) + + capabilities.append(capabilities_item) + + events = [] + _events = d.pop("events") + for events_item_data in _events: + events_item = IntegrationEvent.from_dict(events_item_data) + + events.append(events_item) + + description = d.pop("description", UNSET) + + integration = cls( + id=id, + display_name=display_name, + kind=kind, + auth_mode=auth_mode, + capabilities=capabilities, + events=events, + description=description, + ) + + return integration diff --git a/src/graphn/_generated/models/integration_auth_mode.py b/src/graphn/_generated/models/integration_auth_mode.py new file mode 100644 index 0000000..28bc3c0 --- /dev/null +++ b/src/graphn/_generated/models/integration_auth_mode.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class IntegrationAuthMode(StrEnum): + OAUTH2 = "oauth2" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/integration_capability.py b/src/graphn/_generated/models/integration_capability.py new file mode 100644 index 0000000..ffea9bf --- /dev/null +++ b/src/graphn/_generated/models/integration_capability.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="IntegrationCapability") + + +@_attrs_define +class IntegrationCapability: + """ + Attributes: + id (str): + display_name (str): + description (str | Unset): + """ + + id: str + display_name: str + description: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + id = self.id + + display_name = self.display_name + + description = self.description + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "id": id, + "display_name": display_name, + } + ) + if description is not UNSET: + field_dict["description"] = description + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + id = d.pop("id") + + display_name = d.pop("display_name") + + description = d.pop("description", UNSET) + + integration_capability = cls( + id=id, + display_name=display_name, + description=description, + ) + + return integration_capability diff --git a/src/graphn/_generated/models/integration_event.py b/src/graphn/_generated/models/integration_event.py new file mode 100644 index 0000000..3e00dc5 --- /dev/null +++ b/src/graphn/_generated/models/integration_event.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="IntegrationEvent") + + +@_attrs_define +class IntegrationEvent: + """ + Attributes: + id (str): + display_name (str): + description (str | Unset): + capability (str | Unset): + """ + + id: str + display_name: str + description: str | Unset = UNSET + capability: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + id = self.id + + display_name = self.display_name + + description = self.description + + capability = self.capability + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "id": id, + "display_name": display_name, + } + ) + if description is not UNSET: + field_dict["description"] = description + if capability is not UNSET: + field_dict["capability"] = capability + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + id = d.pop("id") + + display_name = d.pop("display_name") + + description = d.pop("description", UNSET) + + capability = d.pop("capability", UNSET) + + integration_event = cls( + id=id, + display_name=display_name, + description=description, + capability=capability, + ) + + return integration_event diff --git a/src/graphn/_generated/models/integration_kind.py b/src/graphn/_generated/models/integration_kind.py new file mode 100644 index 0000000..ad216bd --- /dev/null +++ b/src/graphn/_generated/models/integration_kind.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class IntegrationKind(StrEnum): + MCP = "mcp" + NATIVE = "native" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/integration_list.py b/src/graphn/_generated/models/integration_list.py new file mode 100644 index 0000000..744db5b --- /dev/null +++ b/src/graphn/_generated/models/integration_list.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.integration import Integration + + +T = TypeVar("T", bound="IntegrationList") + + +@_attrs_define +class IntegrationList: + """ + Attributes: + items (list[Integration]): + count (int): + """ + + items: list[Integration] + count: int + + def to_dict(self) -> dict[str, Any]: + items = [] + for items_item_data in self.items: + items_item = items_item_data.to_dict() + items.append(items_item) + + count = self.count + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "items": items, + "count": count, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.integration import Integration + + d = dict(src_dict) + items = [] + _items = d.pop("items") + for items_item_data in _items: + items_item = Integration.from_dict(items_item_data) + + items.append(items_item) + + count = d.pop("count") + + integration_list = cls( + items=items, + count=count, + ) + + return integration_list diff --git a/src/graphn/_generated/models/invitation.py b/src/graphn/_generated/models/invitation.py index ba348e7..8b0827e 100644 --- a/src/graphn/_generated/models/invitation.py +++ b/src/graphn/_generated/models/invitation.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.invitation_role import InvitationRole from ..models.invitation_scope_type import InvitationScopeType diff --git a/src/graphn/_generated/models/invitation_accept_result.py b/src/graphn/_generated/models/invitation_accept_result.py index d218fe5..b698799 100644 --- a/src/graphn/_generated/models/invitation_accept_result.py +++ b/src/graphn/_generated/models/invitation_accept_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="InvitationAcceptResult") diff --git a/src/graphn/_generated/models/invitation_create.py b/src/graphn/_generated/models/invitation_create.py index fa29dae..0be838f 100644 --- a/src/graphn/_generated/models/invitation_create.py +++ b/src/graphn/_generated/models/invitation_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..models.invitation_create_role import InvitationCreateRole from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/invitation_create_role.py b/src/graphn/_generated/models/invitation_create_role.py index c0e3494..bc247a6 100644 --- a/src/graphn/_generated/models/invitation_create_role.py +++ b/src/graphn/_generated/models/invitation_create_role.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class InvitationCreateRole(str, Enum): +class InvitationCreateRole(StrEnum): ADMIN = "admin" MEMBER = "member" OWNER = "owner" diff --git a/src/graphn/_generated/models/invitation_list.py b/src/graphn/_generated/models/invitation_list.py index 72fa2bf..b3b009f 100644 --- a/src/graphn/_generated/models/invitation_list.py +++ b/src/graphn/_generated/models/invitation_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.invitation import Invitation diff --git a/src/graphn/_generated/models/invitation_role.py b/src/graphn/_generated/models/invitation_role.py index f6d46cb..e7ffe07 100644 --- a/src/graphn/_generated/models/invitation_role.py +++ b/src/graphn/_generated/models/invitation_role.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class InvitationRole(str, Enum): +class InvitationRole(StrEnum): ADMIN = "admin" MEMBER = "member" OWNER = "owner" diff --git a/src/graphn/_generated/models/invitation_scope_type.py b/src/graphn/_generated/models/invitation_scope_type.py index 6c9feb8..0710ab4 100644 --- a/src/graphn/_generated/models/invitation_scope_type.py +++ b/src/graphn/_generated/models/invitation_scope_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class InvitationScopeType(str, Enum): +class InvitationScopeType(StrEnum): ORG = "org" WORKSPACE = "workspace" diff --git a/src/graphn/_generated/models/invitation_status.py b/src/graphn/_generated/models/invitation_status.py index c9a945a..26713e8 100644 --- a/src/graphn/_generated/models/invitation_status.py +++ b/src/graphn/_generated/models/invitation_status.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class InvitationStatus(str, Enum): +class InvitationStatus(StrEnum): ACCEPTED = "accepted" DECLINED = "declined" EXPIRED = "expired" diff --git a/src/graphn/_generated/models/invoice.py b/src/graphn/_generated/models/invoice.py index 8ecd2e5..c6430e1 100644 --- a/src/graphn/_generated/models/invoice.py +++ b/src/graphn/_generated/models/invoice.py @@ -2,15 +2,18 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.invoice_status import InvoiceStatus from ..types import UNSET, Unset +if TYPE_CHECKING: + from ..models.usage_week import UsageWeek + + T = TypeVar("T", bound="Invoice") @@ -19,43 +22,37 @@ class Invoice: """ Attributes: id (str): - number (str): + invoice_id (str): status (InvoiceStatus): amount_due (int): currency (str): created (int): period_start (datetime.datetime): period_end (datetime.datetime): - opening_cents (int | Unset): - usage_cents (int | Unset): - credits_cents (int | Unset): - closing_cents (int | Unset): + number (str | Unset): hosted_invoice_url (str | Unset): invoice_pdf (str | Unset): - invoice_document_url (str | Unset): + usage_by_week (list[UsageWeek] | Unset): """ id: str - number: str + invoice_id: str status: InvoiceStatus amount_due: int currency: str created: int period_start: datetime.datetime period_end: datetime.datetime - opening_cents: int | Unset = UNSET - usage_cents: int | Unset = UNSET - credits_cents: int | Unset = UNSET - closing_cents: int | Unset = UNSET + number: str | Unset = UNSET hosted_invoice_url: str | Unset = UNSET invoice_pdf: str | Unset = UNSET - invoice_document_url: str | Unset = UNSET + usage_by_week: list[UsageWeek] | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: id = self.id - number = self.number + invoice_id = self.invoice_id status = self.status.value @@ -69,26 +66,25 @@ def to_dict(self) -> dict[str, Any]: period_end = self.period_end.isoformat() - opening_cents = self.opening_cents - - usage_cents = self.usage_cents - - credits_cents = self.credits_cents - - closing_cents = self.closing_cents + number = self.number hosted_invoice_url = self.hosted_invoice_url invoice_pdf = self.invoice_pdf - invoice_document_url = self.invoice_document_url + usage_by_week: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.usage_by_week, Unset): + usage_by_week = [] + for usage_by_week_item_data in self.usage_by_week: + usage_by_week_item = usage_by_week_item_data.to_dict() + usage_by_week.append(usage_by_week_item) field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "id": id, - "number": number, + "invoiceId": invoice_id, "status": status, "amountDue": amount_due, "currency": currency, @@ -97,29 +93,25 @@ def to_dict(self) -> dict[str, Any]: "periodEnd": period_end, } ) - if opening_cents is not UNSET: - field_dict["openingCents"] = opening_cents - if usage_cents is not UNSET: - field_dict["usageCents"] = usage_cents - if credits_cents is not UNSET: - field_dict["creditsCents"] = credits_cents - if closing_cents is not UNSET: - field_dict["closingCents"] = closing_cents + if number is not UNSET: + field_dict["number"] = number if hosted_invoice_url is not UNSET: field_dict["hostedInvoiceUrl"] = hosted_invoice_url if invoice_pdf is not UNSET: field_dict["invoicePdf"] = invoice_pdf - if invoice_document_url is not UNSET: - field_dict["invoiceDocumentUrl"] = invoice_document_url + if usage_by_week is not UNSET: + field_dict["usageByWeek"] = usage_by_week return field_dict @classmethod def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.usage_week import UsageWeek + d = dict(src_dict) id = d.pop("id") - number = d.pop("number") + invoice_id = d.pop("invoiceId") status = InvoiceStatus(d.pop("status")) @@ -133,36 +125,34 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) - opening_cents = d.pop("openingCents", UNSET) - - usage_cents = d.pop("usageCents", UNSET) - - credits_cents = d.pop("creditsCents", UNSET) - - closing_cents = d.pop("closingCents", UNSET) + number = d.pop("number", UNSET) hosted_invoice_url = d.pop("hostedInvoiceUrl", UNSET) invoice_pdf = d.pop("invoicePdf", UNSET) - invoice_document_url = d.pop("invoiceDocumentUrl", UNSET) + _usage_by_week = d.pop("usageByWeek", UNSET) + usage_by_week: list[UsageWeek] | Unset = UNSET + if _usage_by_week is not UNSET: + usage_by_week = [] + for usage_by_week_item_data in _usage_by_week: + usage_by_week_item = UsageWeek.from_dict(usage_by_week_item_data) + + usage_by_week.append(usage_by_week_item) invoice = cls( id=id, - number=number, + invoice_id=invoice_id, status=status, amount_due=amount_due, currency=currency, created=created, period_start=period_start, period_end=period_end, - opening_cents=opening_cents, - usage_cents=usage_cents, - credits_cents=credits_cents, - closing_cents=closing_cents, + number=number, hosted_invoice_url=hosted_invoice_url, invoice_pdf=invoice_pdf, - invoice_document_url=invoice_document_url, + usage_by_week=usage_by_week, ) invoice.additional_properties = d diff --git a/src/graphn/_generated/models/invoice_status.py b/src/graphn/_generated/models/invoice_status.py index 21679ed..cfcb634 100644 --- a/src/graphn/_generated/models/invoice_status.py +++ b/src/graphn/_generated/models/invoice_status.py @@ -1,9 +1,17 @@ -from enum import Enum +from enum import StrEnum -class InvoiceStatus(str, Enum): +class InvoiceStatus(StrEnum): CLOSED = "closed" CURRENT = "current" + FAILED = "failed" + MISMATCH = "mismatch" + OPEN = "open" + PAID = "paid" + RESERVED = "reserved" + STALE = "stale" + VOID = "void" + VOIDING = "voiding" def __str__(self) -> str: return str(self.value) diff --git a/src/graphn/_generated/models/kb_batch_error.py b/src/graphn/_generated/models/kb_batch_error.py index 4f949cc..fafd1b6 100644 --- a/src/graphn/_generated/models/kb_batch_error.py +++ b/src/graphn/_generated/models/kb_batch_error.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/kb_document.py b/src/graphn/_generated/models/kb_document.py index cd86f2e..dc634f5 100644 --- a/src/graphn/_generated/models/kb_document.py +++ b/src/graphn/_generated/models/kb_document.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset @@ -30,6 +29,9 @@ class KbDocument: document_type (str | Unset): image_url (str | Unset): video_url (str | Unset): + expires_at (datetime.datetime | Unset): + expires_in (int | Unset): + media_href (str | Unset): segment_seconds (int | Unset): metadata (KbDocumentMetadata | Unset): """ @@ -43,6 +45,9 @@ class KbDocument: document_type: str | Unset = UNSET image_url: str | Unset = UNSET video_url: str | Unset = UNSET + expires_at: datetime.datetime | Unset = UNSET + expires_in: int | Unset = UNSET + media_href: str | Unset = UNSET segment_seconds: int | Unset = UNSET metadata: KbDocumentMetadata | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -66,6 +71,14 @@ def to_dict(self) -> dict[str, Any]: video_url = self.video_url + expires_at: str | Unset = UNSET + if not isinstance(self.expires_at, Unset): + expires_at = self.expires_at.isoformat() + + expires_in = self.expires_in + + media_href = self.media_href + segment_seconds = self.segment_seconds metadata: dict[str, Any] | Unset = UNSET @@ -90,6 +103,12 @@ def to_dict(self) -> dict[str, Any]: field_dict["image_url"] = image_url if video_url is not UNSET: field_dict["video_url"] = video_url + if expires_at is not UNSET: + field_dict["expires_at"] = expires_at + if expires_in is not UNSET: + field_dict["expires_in"] = expires_in + if media_href is not UNSET: + field_dict["media_href"] = media_href if segment_seconds is not UNSET: field_dict["segment_seconds"] = segment_seconds if metadata is not UNSET: @@ -120,6 +139,17 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: video_url = d.pop("video_url", UNSET) + _expires_at = d.pop("expires_at", UNSET) + expires_at: datetime.datetime | Unset + if isinstance(_expires_at, Unset): + expires_at = UNSET + else: + expires_at = datetime.datetime.fromisoformat(_expires_at) + + expires_in = d.pop("expires_in", UNSET) + + media_href = d.pop("media_href", UNSET) + segment_seconds = d.pop("segment_seconds", UNSET) _metadata = d.pop("metadata", UNSET) @@ -139,6 +169,9 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: document_type=document_type, image_url=image_url, video_url=video_url, + expires_at=expires_at, + expires_in=expires_in, + media_href=media_href, segment_seconds=segment_seconds, metadata=metadata, ) diff --git a/src/graphn/_generated/models/kb_document_metadata.py b/src/graphn/_generated/models/kb_document_metadata.py index 1bd118f..c4c3536 100644 --- a/src/graphn/_generated/models/kb_document_metadata.py +++ b/src/graphn/_generated/models/kb_document_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="KbDocumentMetadata") @_attrs_define class KbDocumentMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/knowledge_base.py b/src/graphn/_generated/models/knowledge_base.py index b12a7d4..c602999 100644 --- a/src/graphn/_generated/models/knowledge_base.py +++ b/src/graphn/_generated/models/knowledge_base.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/knowledge_base_create.py b/src/graphn/_generated/models/knowledge_base_create.py index 5e4b39a..2bdf7d8 100644 --- a/src/graphn/_generated/models/knowledge_base_create.py +++ b/src/graphn/_generated/models/knowledge_base_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/knowledge_base_list_response.py b/src/graphn/_generated/models/knowledge_base_list_response.py new file mode 100644 index 0000000..9e41633 --- /dev/null +++ b/src/graphn/_generated/models/knowledge_base_list_response.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.knowledge_base import KnowledgeBase + + +T = TypeVar("T", bound="KnowledgeBaseListResponse") + + +@_attrs_define +class KnowledgeBaseListResponse: + """ + Attributes: + items (list[KnowledgeBase]): + has_more (bool): + next_cursor (str | Unset): + total (int | Unset): Matching item count, returned on the first page. + """ + + items: list[KnowledgeBase] + has_more: bool + next_cursor: str | Unset = UNSET + total: int | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + items = [] + for items_item_data in self.items: + items_item = items_item_data.to_dict() + items.append(items_item) + + has_more = self.has_more + + next_cursor = self.next_cursor + + total = self.total + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "items": items, + "has_more": has_more, + } + ) + if next_cursor is not UNSET: + field_dict["next_cursor"] = next_cursor + if total is not UNSET: + field_dict["total"] = total + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.knowledge_base import KnowledgeBase + + d = dict(src_dict) + items = [] + _items = d.pop("items") + for items_item_data in _items: + items_item = KnowledgeBase.from_dict(items_item_data) + + items.append(items_item) + + has_more = d.pop("has_more") + + next_cursor = d.pop("next_cursor", UNSET) + + total = d.pop("total", UNSET) + + knowledge_base_list_response = cls( + items=items, + has_more=has_more, + next_cursor=next_cursor, + total=total, + ) + + return knowledge_base_list_response diff --git a/src/graphn/_generated/models/knowledge_base_stats.py b/src/graphn/_generated/models/knowledge_base_stats.py index 6747b8e..3f28539 100644 --- a/src/graphn/_generated/models/knowledge_base_stats.py +++ b/src/graphn/_generated/models/knowledge_base_stats.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="KnowledgeBaseStats") diff --git a/src/graphn/_generated/models/knowledge_base_update.py b/src/graphn/_generated/models/knowledge_base_update.py index 4f03d94..84b8c5b 100644 --- a/src/graphn/_generated/models/knowledge_base_update.py +++ b/src/graphn/_generated/models/knowledge_base_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/list_billing_invoices_response_200.py b/src/graphn/_generated/models/list_billing_invoices_response_200.py index 562c10c..539ddb7 100644 --- a/src/graphn/_generated/models/list_billing_invoices_response_200.py +++ b/src/graphn/_generated/models/list_billing_invoices_response_200.py @@ -1,16 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self - -from ..models.list_billing_invoices_response_200_empty_reason import ( - ListBillingInvoicesResponse200EmptyReason, -) -from ..types import UNSET, Unset if TYPE_CHECKING: from ..models.invoice import Invoice @@ -24,11 +18,9 @@ class ListBillingInvoicesResponse200: """ Attributes: invoices (list[Invoice]): - empty_reason (ListBillingInvoicesResponse200EmptyReason | Unset): """ invoices: list[Invoice] - empty_reason: ListBillingInvoicesResponse200EmptyReason | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -37,10 +29,6 @@ def to_dict(self) -> dict[str, Any]: invoices_item = invoices_item_data.to_dict() invoices.append(invoices_item) - empty_reason: str | Unset = UNSET - if not isinstance(self.empty_reason, Unset): - empty_reason = self.empty_reason.value - field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( @@ -48,8 +36,6 @@ def to_dict(self) -> dict[str, Any]: "invoices": invoices, } ) - if empty_reason is not UNSET: - field_dict["emptyReason"] = empty_reason return field_dict @@ -65,16 +51,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: invoices.append(invoices_item) - _empty_reason = d.pop("emptyReason", UNSET) - empty_reason: ListBillingInvoicesResponse200EmptyReason | Unset - if isinstance(_empty_reason, Unset): - empty_reason = UNSET - else: - empty_reason = ListBillingInvoicesResponse200EmptyReason(_empty_reason) - list_billing_invoices_response_200 = cls( invoices=invoices, - empty_reason=empty_reason, ) list_billing_invoices_response_200.additional_properties = d diff --git a/src/graphn/_generated/models/list_billing_payment_methods_response_200.py b/src/graphn/_generated/models/list_billing_payment_methods_response_200.py index f4b86df..d95e8e6 100644 --- a/src/graphn/_generated/models/list_billing_payment_methods_response_200.py +++ b/src/graphn/_generated/models/list_billing_payment_methods_response_200.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.payment_method import PaymentMethod diff --git a/src/graphn/_generated/models/list_billing_statements_response_200.py b/src/graphn/_generated/models/list_billing_statements_response_200.py new file mode 100644 index 0000000..4c0b1ad --- /dev/null +++ b/src/graphn/_generated/models/list_billing_statements_response_200.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.list_billing_statements_response_200_empty_reason import ( + ListBillingStatementsResponse200EmptyReason, +) +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.billing_statement_summary import BillingStatementSummary + + +T = TypeVar("T", bound="ListBillingStatementsResponse200") + + +@_attrs_define +class ListBillingStatementsResponse200: + """ + Attributes: + statements (list[BillingStatementSummary]): + empty_reason (ListBillingStatementsResponse200EmptyReason | Unset): + """ + + statements: list[BillingStatementSummary] + empty_reason: ListBillingStatementsResponse200EmptyReason | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + statements = [] + for statements_item_data in self.statements: + statements_item = statements_item_data.to_dict() + statements.append(statements_item) + + empty_reason: str | Unset = UNSET + if not isinstance(self.empty_reason, Unset): + empty_reason = self.empty_reason.value + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "statements": statements, + } + ) + if empty_reason is not UNSET: + field_dict["emptyReason"] = empty_reason + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.billing_statement_summary import BillingStatementSummary + + d = dict(src_dict) + statements = [] + _statements = d.pop("statements") + for statements_item_data in _statements: + statements_item = BillingStatementSummary.from_dict(statements_item_data) + + statements.append(statements_item) + + _empty_reason = d.pop("emptyReason", UNSET) + empty_reason: ListBillingStatementsResponse200EmptyReason | Unset + if isinstance(_empty_reason, Unset): + empty_reason = UNSET + else: + empty_reason = ListBillingStatementsResponse200EmptyReason(_empty_reason) + + list_billing_statements_response_200 = cls( + statements=statements, + empty_reason=empty_reason, + ) + + list_billing_statements_response_200.additional_properties = d + return list_billing_statements_response_200 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/list_billing_statements_response_200_empty_reason.py b/src/graphn/_generated/models/list_billing_statements_response_200_empty_reason.py new file mode 100644 index 0000000..c7f3609 --- /dev/null +++ b/src/graphn/_generated/models/list_billing_statements_response_200_empty_reason.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class ListBillingStatementsResponse200EmptyReason(StrEnum): + NO_BILLING_HISTORY = "no_billing_history" + STATEMENTS_NOT_GENERATED_YET = "statements_not_generated_yet" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/list_custom_models_include.py b/src/graphn/_generated/models/list_custom_models_include.py new file mode 100644 index 0000000..d2246b1 --- /dev/null +++ b/src/graphn/_generated/models/list_custom_models_include.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class ListCustomModelsInclude(StrEnum): + ADAPTERS = "adapters" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/list_knowledgebases_order.py b/src/graphn/_generated/models/list_knowledgebases_order.py new file mode 100644 index 0000000..3956374 --- /dev/null +++ b/src/graphn/_generated/models/list_knowledgebases_order.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class ListKnowledgebasesOrder(StrEnum): + ASC = "asc" + DESC = "desc" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/list_knowledgebases_sort.py b/src/graphn/_generated/models/list_knowledgebases_sort.py new file mode 100644 index 0000000..714b950 --- /dev/null +++ b/src/graphn/_generated/models/list_knowledgebases_sort.py @@ -0,0 +1,8 @@ +from enum import StrEnum + + +class ListKnowledgebasesSort(StrEnum): + CREATED_AT = "created_at" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/list_knowledgebases_status.py b/src/graphn/_generated/models/list_knowledgebases_status.py new file mode 100644 index 0000000..86db3e7 --- /dev/null +++ b/src/graphn/_generated/models/list_knowledgebases_status.py @@ -0,0 +1,10 @@ +from enum import StrEnum + + +class ListKnowledgebasesStatus(StrEnum): + ACTIVE = "active" + ERROR = "error" + INDEXING = "indexing" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/list_tts_voices_response_200.py b/src/graphn/_generated/models/list_tts_voices_response_200.py index 15dba86..0097023 100644 --- a/src/graphn/_generated/models/list_tts_voices_response_200.py +++ b/src/graphn/_generated/models/list_tts_voices_response_200.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ListTtsVoicesResponse200") @_attrs_define class ListTtsVoicesResponse200: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/managed_connection_tool_call.py b/src/graphn/_generated/models/managed_connection_tool_call.py new file mode 100644 index 0000000..7596e19 --- /dev/null +++ b/src/graphn/_generated/models/managed_connection_tool_call.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar + +from attrs import define as _attrs_define + +if TYPE_CHECKING: + from ..models.managed_connection_tool_call_arguments import ( + ManagedConnectionToolCallArguments, + ) + + +T = TypeVar("T", bound="ManagedConnectionToolCall") + + +@_attrs_define +class ManagedConnectionToolCall: + """ + Attributes: + resource_id (str): + version_id (str): + arguments (ManagedConnectionToolCallArguments): + """ + + resource_id: str + version_id: str + arguments: ManagedConnectionToolCallArguments + + def to_dict(self) -> dict[str, Any]: + resource_id = self.resource_id + + version_id = self.version_id + + arguments = self.arguments.to_dict() + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "resource_id": resource_id, + "version_id": version_id, + "arguments": arguments, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.managed_connection_tool_call_arguments import ( + ManagedConnectionToolCallArguments, + ) + + d = dict(src_dict) + resource_id = d.pop("resource_id") + + version_id = d.pop("version_id") + + arguments = ManagedConnectionToolCallArguments.from_dict(d.pop("arguments")) + + managed_connection_tool_call = cls( + resource_id=resource_id, + version_id=version_id, + arguments=arguments, + ) + + return managed_connection_tool_call diff --git a/src/graphn/_generated/models/managed_connection_tool_call_arguments.py b/src/graphn/_generated/models/managed_connection_tool_call_arguments.py new file mode 100644 index 0000000..fdd79d1 --- /dev/null +++ b/src/graphn/_generated/models/managed_connection_tool_call_arguments.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="ManagedConnectionToolCallArguments") + + +@_attrs_define +class ManagedConnectionToolCallArguments: + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + managed_connection_tool_call_arguments = cls() + + managed_connection_tool_call_arguments.additional_properties = d + return managed_connection_tool_call_arguments + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/managed_connection_tool_result.py b/src/graphn/_generated/models/managed_connection_tool_result.py new file mode 100644 index 0000000..75c6a31 --- /dev/null +++ b/src/graphn/_generated/models/managed_connection_tool_result.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="ManagedConnectionToolResult") + + +@_attrs_define +class ManagedConnectionToolResult: + """ + Attributes: + success (bool): + output (Any | Unset): + """ + + success: bool + output: Any | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + success = self.success + + output = self.output + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "success": success, + } + ) + if output is not UNSET: + field_dict["output"] = output + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + success = d.pop("success") + + output = d.pop("output", UNSET) + + managed_connection_tool_result = cls( + success=success, + output=output, + ) + + return managed_connection_tool_result diff --git a/src/graphn/_generated/models/mcp_discover_tools_request.py b/src/graphn/_generated/models/mcp_discover_tools_request.py index 6b9f14d..20f1dd5 100644 --- a/src/graphn/_generated/models/mcp_discover_tools_request.py +++ b/src/graphn/_generated/models/mcp_discover_tools_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_discover_tools_request_files.py b/src/graphn/_generated/models/mcp_discover_tools_request_files.py index c68edd2..e9f6ac3 100644 --- a/src/graphn/_generated/models/mcp_discover_tools_request_files.py +++ b/src/graphn/_generated/models/mcp_discover_tools_request_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpDiscoverToolsRequestFiles") @_attrs_define class McpDiscoverToolsRequestFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_discover_tools_response.py b/src/graphn/_generated/models/mcp_discover_tools_response.py index bbbf0ea..a144656 100644 --- a/src/graphn/_generated/models/mcp_discover_tools_response.py +++ b/src/graphn/_generated/models/mcp_discover_tools_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_dry_run_test_request.py b/src/graphn/_generated/models/mcp_dry_run_test_request.py index c503065..f34bf89 100644 --- a/src/graphn/_generated/models/mcp_dry_run_test_request.py +++ b/src/graphn/_generated/models/mcp_dry_run_test_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_dry_run_test_request_files.py b/src/graphn/_generated/models/mcp_dry_run_test_request_files.py index 2eaad83..b936ea1 100644 --- a/src/graphn/_generated/models/mcp_dry_run_test_request_files.py +++ b/src/graphn/_generated/models/mcp_dry_run_test_request_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpDryRunTestRequestFiles") @_attrs_define class McpDryRunTestRequestFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_dry_run_test_request_input.py b/src/graphn/_generated/models/mcp_dry_run_test_request_input.py index 0ed19b3..e9474f2 100644 --- a/src/graphn/_generated/models/mcp_dry_run_test_request_input.py +++ b/src/graphn/_generated/models/mcp_dry_run_test_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpDryRunTestRequestInput") @_attrs_define class McpDryRunTestRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_save_version_request.py b/src/graphn/_generated/models/mcp_save_version_request.py index ff46b8a..3a153e9 100644 --- a/src/graphn/_generated/models/mcp_save_version_request.py +++ b/src/graphn/_generated/models/mcp_save_version_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_save_version_request_files.py b/src/graphn/_generated/models/mcp_save_version_request_files.py index a9bd398..eec0752 100644 --- a/src/graphn/_generated/models/mcp_save_version_request_files.py +++ b/src/graphn/_generated/models/mcp_save_version_request_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpSaveVersionRequestFiles") @_attrs_define class McpSaveVersionRequestFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server.py b/src/graphn/_generated/models/mcp_server.py index 22b9c0e..15f2686 100644 --- a/src/graphn/_generated/models/mcp_server.py +++ b/src/graphn/_generated/models/mcp_server.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_server_create.py b/src/graphn/_generated/models/mcp_server_create.py index 08a6d86..732931c 100644 --- a/src/graphn/_generated/models/mcp_server_create.py +++ b/src/graphn/_generated/models/mcp_server_create.py @@ -1,11 +1,11 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self +from ..models.mcp_server_create_type import McpServerCreateType from ..types import UNSET, Unset if TYPE_CHECKING: @@ -22,7 +22,7 @@ class McpServerCreate: """ Attributes: name (str): - type_ (str | Unset): + type_ (McpServerCreateType | Unset): files (McpServerCreateFiles | Unset): endpoint_url (str | Unset): workflow_id (str | Unset): @@ -31,7 +31,7 @@ class McpServerCreate: """ name: str - type_: str | Unset = UNSET + type_: McpServerCreateType | Unset = UNSET files: McpServerCreateFiles | Unset = UNSET endpoint_url: str | Unset = UNSET workflow_id: str | Unset = UNSET @@ -41,7 +41,9 @@ class McpServerCreate: def to_dict(self) -> dict[str, Any]: name = self.name - type_ = self.type_ + type_: str | Unset = UNSET + if not isinstance(self.type_, Unset): + type_ = self.type_.value files: dict[str, Any] | Unset = UNSET if not isinstance(self.files, Unset): @@ -90,7 +92,12 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") - type_ = d.pop("type", UNSET) + _type_ = d.pop("type", UNSET) + type_: McpServerCreateType | Unset + if isinstance(_type_, Unset): + type_ = UNSET + else: + type_ = McpServerCreateType(_type_) _files = d.pop("files", UNSET) files: McpServerCreateFiles | Unset diff --git a/src/graphn/_generated/models/mcp_server_create_files.py b/src/graphn/_generated/models/mcp_server_create_files.py index eb36cfa..788c223 100644 --- a/src/graphn/_generated/models/mcp_server_create_files.py +++ b/src/graphn/_generated/models/mcp_server_create_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerCreateFiles") @_attrs_define class McpServerCreateFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_create_secrets.py b/src/graphn/_generated/models/mcp_server_create_secrets.py index 7a45c46..9cf81f5 100644 --- a/src/graphn/_generated/models/mcp_server_create_secrets.py +++ b/src/graphn/_generated/models/mcp_server_create_secrets.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerCreateSecrets") @_attrs_define class McpServerCreateSecrets: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_create_type.py b/src/graphn/_generated/models/mcp_server_create_type.py new file mode 100644 index 0000000..071d6e3 --- /dev/null +++ b/src/graphn/_generated/models/mcp_server_create_type.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class McpServerCreateType(StrEnum): + HOSTED = "hosted" + REMOTE = "remote" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/mcp_server_list.py b/src/graphn/_generated/models/mcp_server_list.py index 6cf1980..8e82efb 100644 --- a/src/graphn/_generated/models/mcp_server_list.py +++ b/src/graphn/_generated/models/mcp_server_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_server_spec.py b/src/graphn/_generated/models/mcp_server_spec.py index 413bb06..6577436 100644 --- a/src/graphn/_generated/models/mcp_server_spec.py +++ b/src/graphn/_generated/models/mcp_server_spec.py @@ -1,17 +1,18 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self +from ..models.mcp_server_spec_type import McpServerSpecType from ..types import UNSET, Unset if TYPE_CHECKING: from ..models.mcp_server_spec_files import McpServerSpecFiles from ..models.mcp_server_spec_secrets import McpServerSpecSecrets + from ..models.mcp_server_spec_tool_capabilities import McpServerSpecToolCapabilities T = TypeVar("T", bound="McpServerSpec") @@ -21,20 +22,28 @@ class McpServerSpec: """ Attributes: - type_ (str | Unset): + type_ (McpServerSpecType | Unset): files (McpServerSpecFiles | Unset): endpoint_url (str | Unset): secrets (McpServerSpecSecrets | Unset): + provider_id (str | Unset): + connection_id (str | Unset): + tool_capabilities (McpServerSpecToolCapabilities | Unset): """ - type_: str | Unset = UNSET + type_: McpServerSpecType | Unset = UNSET files: McpServerSpecFiles | Unset = UNSET endpoint_url: str | Unset = UNSET secrets: McpServerSpecSecrets | Unset = UNSET + provider_id: str | Unset = UNSET + connection_id: str | Unset = UNSET + tool_capabilities: McpServerSpecToolCapabilities | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: - type_ = self.type_ + type_: str | Unset = UNSET + if not isinstance(self.type_, Unset): + type_ = self.type_.value files: dict[str, Any] | Unset = UNSET if not isinstance(self.files, Unset): @@ -46,6 +55,14 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.secrets, Unset): secrets = self.secrets.to_dict() + provider_id = self.provider_id + + connection_id = self.connection_id + + tool_capabilities: dict[str, Any] | Unset = UNSET + if not isinstance(self.tool_capabilities, Unset): + tool_capabilities = self.tool_capabilities.to_dict() + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({}) @@ -57,6 +74,12 @@ def to_dict(self) -> dict[str, Any]: field_dict["endpoint_url"] = endpoint_url if secrets is not UNSET: field_dict["secrets"] = secrets + if provider_id is not UNSET: + field_dict["provider_id"] = provider_id + if connection_id is not UNSET: + field_dict["connection_id"] = connection_id + if tool_capabilities is not UNSET: + field_dict["tool_capabilities"] = tool_capabilities return field_dict @@ -64,9 +87,17 @@ def to_dict(self) -> dict[str, Any]: def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: from ..models.mcp_server_spec_files import McpServerSpecFiles from ..models.mcp_server_spec_secrets import McpServerSpecSecrets + from ..models.mcp_server_spec_tool_capabilities import ( + McpServerSpecToolCapabilities, + ) d = dict(src_dict) - type_ = d.pop("type", UNSET) + _type_ = d.pop("type", UNSET) + type_: McpServerSpecType | Unset + if isinstance(_type_, Unset): + type_ = UNSET + else: + type_ = McpServerSpecType(_type_) _files = d.pop("files", UNSET) files: McpServerSpecFiles | Unset @@ -84,11 +115,27 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: else: secrets = McpServerSpecSecrets.from_dict(_secrets) + provider_id = d.pop("provider_id", UNSET) + + connection_id = d.pop("connection_id", UNSET) + + _tool_capabilities = d.pop("tool_capabilities", UNSET) + tool_capabilities: McpServerSpecToolCapabilities | Unset + if isinstance(_tool_capabilities, Unset): + tool_capabilities = UNSET + else: + tool_capabilities = McpServerSpecToolCapabilities.from_dict( + _tool_capabilities + ) + mcp_server_spec = cls( type_=type_, files=files, endpoint_url=endpoint_url, secrets=secrets, + provider_id=provider_id, + connection_id=connection_id, + tool_capabilities=tool_capabilities, ) mcp_server_spec.additional_properties = d diff --git a/src/graphn/_generated/models/mcp_server_spec_files.py b/src/graphn/_generated/models/mcp_server_spec_files.py index 3915ec9..661ae4b 100644 --- a/src/graphn/_generated/models/mcp_server_spec_files.py +++ b/src/graphn/_generated/models/mcp_server_spec_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerSpecFiles") @_attrs_define class McpServerSpecFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_spec_secrets.py b/src/graphn/_generated/models/mcp_server_spec_secrets.py index af0ddc7..931f67a 100644 --- a/src/graphn/_generated/models/mcp_server_spec_secrets.py +++ b/src/graphn/_generated/models/mcp_server_spec_secrets.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerSpecSecrets") @_attrs_define class McpServerSpecSecrets: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_spec_tool_capabilities.py b/src/graphn/_generated/models/mcp_server_spec_tool_capabilities.py new file mode 100644 index 0000000..92ad81c --- /dev/null +++ b/src/graphn/_generated/models/mcp_server_spec_tool_capabilities.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="McpServerSpecToolCapabilities") + + +@_attrs_define +class McpServerSpecToolCapabilities: + additional_properties: dict[str, list[str]] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + field_dict[prop_name] = prop + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + mcp_server_spec_tool_capabilities = cls() + + additional_properties = {} + for prop_name, prop_dict in d.items(): + additional_property = cast(list[str], prop_dict) + + additional_properties[prop_name] = additional_property + + mcp_server_spec_tool_capabilities.additional_properties = additional_properties + return mcp_server_spec_tool_capabilities + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str]: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str]) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/mcp_server_spec_type.py b/src/graphn/_generated/models/mcp_server_spec_type.py new file mode 100644 index 0000000..f8be16c --- /dev/null +++ b/src/graphn/_generated/models/mcp_server_spec_type.py @@ -0,0 +1,10 @@ +from enum import StrEnum + + +class McpServerSpecType(StrEnum): + HOSTED = "hosted" + MANAGED = "managed" + REMOTE = "remote" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/mcp_server_status.py b/src/graphn/_generated/models/mcp_server_status.py index b5a7b46..ac9a0ac 100644 --- a/src/graphn/_generated/models/mcp_server_status.py +++ b/src/graphn/_generated/models/mcp_server_status.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_server_update.py b/src/graphn/_generated/models/mcp_server_update.py index 2d55919..3bfde07 100644 --- a/src/graphn/_generated/models/mcp_server_update.py +++ b/src/graphn/_generated/models/mcp_server_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mcp_server_update_files.py b/src/graphn/_generated/models/mcp_server_update_files.py index 3d3fb34..2ec92ec 100644 --- a/src/graphn/_generated/models/mcp_server_update_files.py +++ b/src/graphn/_generated/models/mcp_server_update_files.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerUpdateFiles") @_attrs_define class McpServerUpdateFiles: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_update_secrets.py b/src/graphn/_generated/models/mcp_server_update_secrets.py index c51c30e..c4fea49 100644 --- a/src/graphn/_generated/models/mcp_server_update_secrets.py +++ b/src/graphn/_generated/models/mcp_server_update_secrets.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="McpServerUpdateSecrets") @_attrs_define class McpServerUpdateSecrets: - """ """ - additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/mcp_server_version_list.py b/src/graphn/_generated/models/mcp_server_version_list.py index b9e6b62..f686319 100644 --- a/src/graphn/_generated/models/mcp_server_version_list.py +++ b/src/graphn/_generated/models/mcp_server_version_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/member.py b/src/graphn/_generated/models/member.py index 15dae5c..1891b04 100644 --- a/src/graphn/_generated/models/member.py +++ b/src/graphn/_generated/models/member.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.member_role import MemberRole from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/member_list.py b/src/graphn/_generated/models/member_list.py index 39e8b2a..2b5172e 100644 --- a/src/graphn/_generated/models/member_list.py +++ b/src/graphn/_generated/models/member_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/member_role.py b/src/graphn/_generated/models/member_role.py index d67391d..572f862 100644 --- a/src/graphn/_generated/models/member_role.py +++ b/src/graphn/_generated/models/member_role.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class MemberRole(str, Enum): +class MemberRole(StrEnum): ADMIN = "admin" MEMBER = "member" OWNER = "owner" diff --git a/src/graphn/_generated/models/member_role_update.py b/src/graphn/_generated/models/member_role_update.py index 482ba2e..81412e2 100644 --- a/src/graphn/_generated/models/member_role_update.py +++ b/src/graphn/_generated/models/member_role_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.member_role_update_role import MemberRoleUpdateRole diff --git a/src/graphn/_generated/models/member_role_update_role.py b/src/graphn/_generated/models/member_role_update_role.py index a4db1e4..521bbc5 100644 --- a/src/graphn/_generated/models/member_role_update_role.py +++ b/src/graphn/_generated/models/member_role_update_role.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class MemberRoleUpdateRole(str, Enum): +class MemberRoleUpdateRole(StrEnum): ADMIN = "admin" MEMBER = "member" OWNER = "owner" diff --git a/src/graphn/_generated/models/model.py b/src/graphn/_generated/models/model.py index ae91848..a46e77b 100644 --- a/src/graphn/_generated/models/model.py +++ b/src/graphn/_generated/models/model.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.model_object import ModelObject from ..models.model_owned_by import ModelOwnedBy diff --git a/src/graphn/_generated/models/model_list.py b/src/graphn/_generated/models/model_list.py index 4b6c6a7..189ccb3 100644 --- a/src/graphn/_generated/models/model_list.py +++ b/src/graphn/_generated/models/model_list.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.model_list_object import ModelListObject diff --git a/src/graphn/_generated/models/model_list_object.py b/src/graphn/_generated/models/model_list_object.py index 2c8dc96..5d054e6 100644 --- a/src/graphn/_generated/models/model_list_object.py +++ b/src/graphn/_generated/models/model_list_object.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ModelListObject(str, Enum): +class ModelListObject(StrEnum): LIST = "list" def __str__(self) -> str: diff --git a/src/graphn/_generated/models/model_object.py b/src/graphn/_generated/models/model_object.py index d4fa554..5baeaa4 100644 --- a/src/graphn/_generated/models/model_object.py +++ b/src/graphn/_generated/models/model_object.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ModelObject(str, Enum): +class ModelObject(StrEnum): MODEL = "model" def __str__(self) -> str: diff --git a/src/graphn/_generated/models/model_owned_by.py b/src/graphn/_generated/models/model_owned_by.py index 98b5948..f031e75 100644 --- a/src/graphn/_generated/models/model_owned_by.py +++ b/src/graphn/_generated/models/model_owned_by.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ModelOwnedBy(str, Enum): +class ModelOwnedBy(StrEnum): BUILT_IN = "built-in" CUSTOM = "custom" IMPORTED = "imported" diff --git a/src/graphn/_generated/models/model_settings.py b/src/graphn/_generated/models/model_settings.py index 52ce00e..747997b 100644 --- a/src/graphn/_generated/models/model_settings.py +++ b/src/graphn/_generated/models/model_settings.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mpu_complete_request.py b/src/graphn/_generated/models/mpu_complete_request.py index 6386349..3fe133a 100644 --- a/src/graphn/_generated/models/mpu_complete_request.py +++ b/src/graphn/_generated/models/mpu_complete_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/mpu_part.py b/src/graphn/_generated/models/mpu_part.py index d4d5b9e..ae4e914 100644 --- a/src/graphn/_generated/models/mpu_part.py +++ b/src/graphn/_generated/models/mpu_part.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="MpuPart") diff --git a/src/graphn/_generated/models/opaque_object.py b/src/graphn/_generated/models/opaque_object.py index 6a08a19..11e858d 100644 --- a/src/graphn/_generated/models/opaque_object.py +++ b/src/graphn/_generated/models/opaque_object.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="OpaqueObject") diff --git a/src/graphn/_generated/models/organization.py b/src/graphn/_generated/models/organization.py index a8b7c77..147251a 100644 --- a/src/graphn/_generated/models/organization.py +++ b/src/graphn/_generated/models/organization.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.organization_type import OrganizationType diff --git a/src/graphn/_generated/models/organization_create.py b/src/graphn/_generated/models/organization_create.py index c6530eb..53ef083 100644 --- a/src/graphn/_generated/models/organization_create.py +++ b/src/graphn/_generated/models/organization_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.organization_create_type import OrganizationCreateType diff --git a/src/graphn/_generated/models/organization_create_type.py b/src/graphn/_generated/models/organization_create_type.py index fe8d27c..16a46e0 100644 --- a/src/graphn/_generated/models/organization_create_type.py +++ b/src/graphn/_generated/models/organization_create_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class OrganizationCreateType(str, Enum): +class OrganizationCreateType(StrEnum): PERSONAL = "personal" TEAM = "team" diff --git a/src/graphn/_generated/models/organization_list.py b/src/graphn/_generated/models/organization_list.py index 3fcc1fd..b945318 100644 --- a/src/graphn/_generated/models/organization_list.py +++ b/src/graphn/_generated/models/organization_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.organization import Organization diff --git a/src/graphn/_generated/models/organization_type.py b/src/graphn/_generated/models/organization_type.py index 7b93b42..5d94861 100644 --- a/src/graphn/_generated/models/organization_type.py +++ b/src/graphn/_generated/models/organization_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class OrganizationType(str, Enum): +class OrganizationType(StrEnum): PERSONAL = "personal" TEAM = "team" diff --git a/src/graphn/_generated/models/organization_update.py b/src/graphn/_generated/models/organization_update.py index c6bba03..93cfe4f 100644 --- a/src/graphn/_generated/models/organization_update.py +++ b/src/graphn/_generated/models/organization_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="OrganizationUpdate") diff --git a/src/graphn/_generated/models/payment_method.py b/src/graphn/_generated/models/payment_method.py index 147c57e..1b72092 100644 --- a/src/graphn/_generated/models/payment_method.py +++ b/src/graphn/_generated/models/payment_method.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="PaymentMethod") diff --git a/src/graphn/_generated/models/post_object_type.py b/src/graphn/_generated/models/post_object_type.py index 1e5f505..448fcbb 100644 --- a/src/graphn/_generated/models/post_object_type.py +++ b/src/graphn/_generated/models/post_object_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class PostObjectType(str, Enum): +class PostObjectType(StrEnum): DOWNLOAD = "download" UPLOAD = "upload" UPLOAD_PART = "upload_part" diff --git a/src/graphn/_generated/models/presigned_url.py b/src/graphn/_generated/models/presigned_url.py index 51c3ea1..ef00d69 100644 --- a/src/graphn/_generated/models/presigned_url.py +++ b/src/graphn/_generated/models/presigned_url.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="PresignedURL") diff --git a/src/graphn/_generated/models/publish_inference_router_body.py b/src/graphn/_generated/models/publish_inference_router_body.py new file mode 100644 index 0000000..9d18cd2 --- /dev/null +++ b/src/graphn/_generated/models/publish_inference_router_body.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="PublishInferenceRouterBody") + + +@_attrs_define +class PublishInferenceRouterBody: + """ + Attributes: + expected_draft_revision (int): + """ + + expected_draft_revision: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + expected_draft_revision = self.expected_draft_revision + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "expected_draft_revision": expected_draft_revision, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + expected_draft_revision = d.pop("expected_draft_revision") + + publish_inference_router_body = cls( + expected_draft_revision=expected_draft_revision, + ) + + publish_inference_router_body.additional_properties = d + return publish_inference_router_body + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/publish_message.py b/src/graphn/_generated/models/publish_message.py index c3ddeef..58529ee 100644 --- a/src/graphn/_generated/models/publish_message.py +++ b/src/graphn/_generated/models/publish_message.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/published_router_candidate.py b/src/graphn/_generated/models/published_router_candidate.py new file mode 100644 index 0000000..1c2e9a8 --- /dev/null +++ b/src/graphn/_generated/models/published_router_candidate.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="PublishedRouterCandidate") + + +@_attrs_define +class PublishedRouterCandidate: + """ + Attributes: + reference (str): + target (str): + lanes (list[str]): + weight (int): + order (int): + capabilities (list[str]): + context_window (int): + context_length (int): + quality_score (float): + prompt_per_1m (float): + completion_per_1m (float): + """ + + reference: str + target: str + lanes: list[str] + weight: int + order: int + capabilities: list[str] + context_window: int + context_length: int + quality_score: float + prompt_per_1m: float + completion_per_1m: float + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + reference = self.reference + + target = self.target + + lanes = self.lanes + + weight = self.weight + + order = self.order + + capabilities = self.capabilities + + context_window = self.context_window + + context_length = self.context_length + + quality_score = self.quality_score + + prompt_per_1m = self.prompt_per_1m + + completion_per_1m = self.completion_per_1m + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "reference": reference, + "target": target, + "lanes": lanes, + "weight": weight, + "order": order, + "capabilities": capabilities, + "context_window": context_window, + "context_length": context_length, + "quality_score": quality_score, + "prompt_per_1m": prompt_per_1m, + "completion_per_1m": completion_per_1m, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + reference = d.pop("reference") + + target = d.pop("target") + + lanes = cast(list[str], d.pop("lanes")) + + weight = d.pop("weight") + + order = d.pop("order") + + capabilities = cast(list[str], d.pop("capabilities")) + + context_window = d.pop("context_window") + + context_length = d.pop("context_length") + + quality_score = d.pop("quality_score") + + prompt_per_1m = d.pop("prompt_per_1m") + + completion_per_1m = d.pop("completion_per_1m") + + published_router_candidate = cls( + reference=reference, + target=target, + lanes=lanes, + weight=weight, + order=order, + capabilities=capabilities, + context_window=context_window, + context_length=context_length, + quality_score=quality_score, + prompt_per_1m=prompt_per_1m, + completion_per_1m=completion_per_1m, + ) + + published_router_candidate.additional_properties = d + return published_router_candidate + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/published_router_custom_lane.py b/src/graphn/_generated/models/published_router_custom_lane.py new file mode 100644 index 0000000..cef81b7 --- /dev/null +++ b/src/graphn/_generated/models/published_router_custom_lane.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.published_router_custom_lane_match import PublishedRouterCustomLaneMatch + +T = TypeVar("T", bound="PublishedRouterCustomLane") + + +@_attrs_define +class PublishedRouterCustomLane: + """ + Attributes: + reference (str): + match (PublishedRouterCustomLaneMatch): + phrases (list[str]): + """ + + reference: str + match: PublishedRouterCustomLaneMatch + phrases: list[str] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + reference = self.reference + + match = self.match.value + + phrases = self.phrases + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "reference": reference, + "match": match, + "phrases": phrases, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + reference = d.pop("reference") + + match = PublishedRouterCustomLaneMatch(d.pop("match")) + + phrases = cast(list[str], d.pop("phrases")) + + published_router_custom_lane = cls( + reference=reference, + match=match, + phrases=phrases, + ) + + published_router_custom_lane.additional_properties = d + return published_router_custom_lane + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/published_router_custom_lane_match.py b/src/graphn/_generated/models/published_router_custom_lane_match.py new file mode 100644 index 0000000..b46b1a7 --- /dev/null +++ b/src/graphn/_generated/models/published_router_custom_lane_match.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class PublishedRouterCustomLaneMatch(StrEnum): + ALL = "all" + ANY = "any" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/published_router_decision.py b/src/graphn/_generated/models/published_router_decision.py new file mode 100644 index 0000000..1b7acdc --- /dev/null +++ b/src/graphn/_generated/models/published_router_decision.py @@ -0,0 +1,98 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="PublishedRouterDecision") + + +@_attrs_define +class PublishedRouterDecision: + """ + Attributes: + name (str): + lane (str): + candidate_refs (list[str]): + priority (int): + constraints (list[str] | Unset): + """ + + name: str + lane: str + candidate_refs: list[str] + priority: int + constraints: list[str] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + name = self.name + + lane = self.lane + + candidate_refs = self.candidate_refs + + priority = self.priority + + constraints: list[str] | Unset = UNSET + if not isinstance(self.constraints, Unset): + constraints = self.constraints + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "name": name, + "lane": lane, + "candidate_refs": candidate_refs, + "priority": priority, + } + ) + if constraints is not UNSET: + field_dict["constraints"] = constraints + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + name = d.pop("name") + + lane = d.pop("lane") + + candidate_refs = cast(list[str], d.pop("candidate_refs")) + + priority = d.pop("priority") + + constraints = cast(list[str], d.pop("constraints", UNSET)) + + published_router_decision = cls( + name=name, + lane=lane, + candidate_refs=candidate_refs, + priority=priority, + constraints=constraints, + ) + + published_router_decision.additional_properties = d + return published_router_decision + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/published_router_revision.py b/src/graphn/_generated/models/published_router_revision.py new file mode 100644 index 0000000..4f7f1e3 --- /dev/null +++ b/src/graphn/_generated/models/published_router_revision.py @@ -0,0 +1,171 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.published_router_revision_state import PublishedRouterRevisionState +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.published_router_candidate import PublishedRouterCandidate + from ..models.published_router_custom_lane import PublishedRouterCustomLane + from ..models.published_router_decision import PublishedRouterDecision + + +T = TypeVar("T", bound="PublishedRouterRevision") + + +@_attrs_define +class PublishedRouterRevision: + """ + Attributes: + router_id (str): + revision (str): + state (PublishedRouterRevisionState): + candidates (list[PublishedRouterCandidate]): + decisions (list[PublishedRouterDecision]): + general_candidate_refs (list[str]): + manifest_hash (str): + preferred_shard_id (str | Unset): Operator-owned placement hint; populated only for Platform Auto. + custom_lanes (list[PublishedRouterCustomLane] | Unset): Snapshot of every workspace custom lane the revision + uses. + """ + + router_id: str + revision: str + state: PublishedRouterRevisionState + candidates: list[PublishedRouterCandidate] + decisions: list[PublishedRouterDecision] + general_candidate_refs: list[str] + manifest_hash: str + preferred_shard_id: str | Unset = UNSET + custom_lanes: list[PublishedRouterCustomLane] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + router_id = self.router_id + + revision = self.revision + + state = self.state.value + + candidates = [] + for candidates_item_data in self.candidates: + candidates_item = candidates_item_data.to_dict() + candidates.append(candidates_item) + + decisions = [] + for decisions_item_data in self.decisions: + decisions_item = decisions_item_data.to_dict() + decisions.append(decisions_item) + + general_candidate_refs = self.general_candidate_refs + + manifest_hash = self.manifest_hash + + preferred_shard_id = self.preferred_shard_id + + custom_lanes: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.custom_lanes, Unset): + custom_lanes = [] + for custom_lanes_item_data in self.custom_lanes: + custom_lanes_item = custom_lanes_item_data.to_dict() + custom_lanes.append(custom_lanes_item) + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "router_id": router_id, + "revision": revision, + "state": state, + "candidates": candidates, + "decisions": decisions, + "general_candidate_refs": general_candidate_refs, + "manifest_hash": manifest_hash, + } + ) + if preferred_shard_id is not UNSET: + field_dict["preferred_shard_id"] = preferred_shard_id + if custom_lanes is not UNSET: + field_dict["custom_lanes"] = custom_lanes + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + from ..models.published_router_candidate import PublishedRouterCandidate + from ..models.published_router_custom_lane import PublishedRouterCustomLane + from ..models.published_router_decision import PublishedRouterDecision + + d = dict(src_dict) + router_id = d.pop("router_id") + + revision = d.pop("revision") + + state = PublishedRouterRevisionState(d.pop("state")) + + candidates = [] + _candidates = d.pop("candidates") + for candidates_item_data in _candidates: + candidates_item = PublishedRouterCandidate.from_dict(candidates_item_data) + + candidates.append(candidates_item) + + decisions = [] + _decisions = d.pop("decisions") + for decisions_item_data in _decisions: + decisions_item = PublishedRouterDecision.from_dict(decisions_item_data) + + decisions.append(decisions_item) + + general_candidate_refs = cast(list[str], d.pop("general_candidate_refs")) + + manifest_hash = d.pop("manifest_hash") + + preferred_shard_id = d.pop("preferred_shard_id", UNSET) + + _custom_lanes = d.pop("custom_lanes", UNSET) + custom_lanes: list[PublishedRouterCustomLane] | Unset = UNSET + if _custom_lanes is not UNSET: + custom_lanes = [] + for custom_lanes_item_data in _custom_lanes: + custom_lanes_item = PublishedRouterCustomLane.from_dict( + custom_lanes_item_data + ) + + custom_lanes.append(custom_lanes_item) + + published_router_revision = cls( + router_id=router_id, + revision=revision, + state=state, + candidates=candidates, + decisions=decisions, + general_candidate_refs=general_candidate_refs, + manifest_hash=manifest_hash, + preferred_shard_id=preferred_shard_id, + custom_lanes=custom_lanes, + ) + + published_router_revision.additional_properties = d + return published_router_revision + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/published_router_revision_state.py b/src/graphn/_generated/models/published_router_revision_state.py new file mode 100644 index 0000000..41c52d2 --- /dev/null +++ b/src/graphn/_generated/models/published_router_revision_state.py @@ -0,0 +1,9 @@ +from enum import StrEnum + + +class PublishedRouterRevisionState(StrEnum): + ACTIVE = "active" + STAGED = "staged" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/graphn/_generated/models/resource_version_ref.py b/src/graphn/_generated/models/resource_version_ref.py index 9fe664c..95d5a98 100644 --- a/src/graphn/_generated/models/resource_version_ref.py +++ b/src/graphn/_generated/models/resource_version_ref.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/search_request.py b/src/graphn/_generated/models/search_request.py index 7148136..469ad99 100644 --- a/src/graphn/_generated/models/search_request.py +++ b/src/graphn/_generated/models/search_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset @@ -21,7 +20,9 @@ class SearchRequest: Attributes: query (str): top_k (int | Unset): - rerank (bool | Unset): + rerank (bool | Unset): Requests result reranking. When the vector top-K contains a video + hit, the batch remains in vector order and returned scores are + vector-similarity scores. reranker_model (str | Unset): score_threshold (float | Unset): metadata_filter (SearchRequestMetadataFilter | Unset): diff --git a/src/graphn/_generated/models/search_request_metadata_filter.py b/src/graphn/_generated/models/search_request_metadata_filter.py index f9fdfbe..dd76911 100644 --- a/src/graphn/_generated/models/search_request_metadata_filter.py +++ b/src/graphn/_generated/models/search_request_metadata_filter.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="SearchRequestMetadataFilter") @_attrs_define class SearchRequestMetadataFilter: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/search_response.py b/src/graphn/_generated/models/search_response.py index 098e7ff..f30bf31 100644 --- a/src/graphn/_generated/models/search_response.py +++ b/src/graphn/_generated/models/search_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.search_result import SearchResult diff --git a/src/graphn/_generated/models/search_result.py b/src/graphn/_generated/models/search_result.py index 6a138c8..b357a7e 100644 --- a/src/graphn/_generated/models/search_result.py +++ b/src/graphn/_generated/models/search_result.py @@ -1,11 +1,11 @@ from __future__ import annotations +import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset @@ -28,6 +28,9 @@ class SearchResult: document_type (str | Unset): image_url (str | Unset): video_url (str | Unset): + expires_at (datetime.datetime | Unset): + expires_in (int | Unset): + media_href (str | Unset): segment_start_sec (float | Unset): segment_end_sec (float | Unset): metadata (SearchResultMetadata | Unset): @@ -41,6 +44,9 @@ class SearchResult: document_type: str | Unset = UNSET image_url: str | Unset = UNSET video_url: str | Unset = UNSET + expires_at: datetime.datetime | Unset = UNSET + expires_in: int | Unset = UNSET + media_href: str | Unset = UNSET segment_start_sec: float | Unset = UNSET segment_end_sec: float | Unset = UNSET metadata: SearchResultMetadata | Unset = UNSET @@ -63,6 +69,14 @@ def to_dict(self) -> dict[str, Any]: video_url = self.video_url + expires_at: str | Unset = UNSET + if not isinstance(self.expires_at, Unset): + expires_at = self.expires_at.isoformat() + + expires_in = self.expires_in + + media_href = self.media_href + segment_start_sec = self.segment_start_sec segment_end_sec = self.segment_end_sec @@ -88,6 +102,12 @@ def to_dict(self) -> dict[str, Any]: field_dict["image_url"] = image_url if video_url is not UNSET: field_dict["video_url"] = video_url + if expires_at is not UNSET: + field_dict["expires_at"] = expires_at + if expires_in is not UNSET: + field_dict["expires_in"] = expires_in + if media_href is not UNSET: + field_dict["media_href"] = media_href if segment_start_sec is not UNSET: field_dict["segment_start_sec"] = segment_start_sec if segment_end_sec is not UNSET: @@ -118,6 +138,17 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: video_url = d.pop("video_url", UNSET) + _expires_at = d.pop("expires_at", UNSET) + expires_at: datetime.datetime | Unset + if isinstance(_expires_at, Unset): + expires_at = UNSET + else: + expires_at = datetime.datetime.fromisoformat(_expires_at) + + expires_in = d.pop("expires_in", UNSET) + + media_href = d.pop("media_href", UNSET) + segment_start_sec = d.pop("segment_start_sec", UNSET) segment_end_sec = d.pop("segment_end_sec", UNSET) @@ -138,6 +169,9 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: document_type=document_type, image_url=image_url, video_url=video_url, + expires_at=expires_at, + expires_in=expires_in, + media_href=media_href, segment_start_sec=segment_start_sec, segment_end_sec=segment_end_sec, metadata=metadata, diff --git a/src/graphn/_generated/models/search_result_metadata.py b/src/graphn/_generated/models/search_result_metadata.py index 822a035..23f0192 100644 --- a/src/graphn/_generated/models/search_result_metadata.py +++ b/src/graphn/_generated/models/search_result_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="SearchResultMetadata") @_attrs_define class SearchResultMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/secret.py b/src/graphn/_generated/models/secret.py index b0d52a0..0707b97 100644 --- a/src/graphn/_generated/models/secret.py +++ b/src/graphn/_generated/models/secret.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/secret_create.py b/src/graphn/_generated/models/secret_create.py index 127ec99..4a933d2 100644 --- a/src/graphn/_generated/models/secret_create.py +++ b/src/graphn/_generated/models/secret_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/secret_list.py b/src/graphn/_generated/models/secret_list.py index e045791..43af6d6 100644 --- a/src/graphn/_generated/models/secret_list.py +++ b/src/graphn/_generated/models/secret_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/secret_update.py b/src/graphn/_generated/models/secret_update.py index 31ae389..6956694 100644 --- a/src/graphn/_generated/models/secret_update.py +++ b/src/graphn/_generated/models/secret_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="SecretUpdate") diff --git a/src/graphn/_generated/models/storage.py b/src/graphn/_generated/models/storage.py index d930173..48c4bc3 100644 --- a/src/graphn/_generated/models/storage.py +++ b/src/graphn/_generated/models/storage.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/storage_create.py b/src/graphn/_generated/models/storage_create.py index 3f09050..546228f 100644 --- a/src/graphn/_generated/models/storage_create.py +++ b/src/graphn/_generated/models/storage_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/storage_file.py b/src/graphn/_generated/models/storage_file.py index c789a77..5c48429 100644 --- a/src/graphn/_generated/models/storage_file.py +++ b/src/graphn/_generated/models/storage_file.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/storage_file_list.py b/src/graphn/_generated/models/storage_file_list.py index 9522544..1d7adad 100644 --- a/src/graphn/_generated/models/storage_file_list.py +++ b/src/graphn/_generated/models/storage_file_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/storage_list.py b/src/graphn/_generated/models/storage_list.py index 1d88c9a..6f4bd52 100644 --- a/src/graphn/_generated/models/storage_list.py +++ b/src/graphn/_generated/models/storage_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.storage import Storage diff --git a/src/graphn/_generated/models/storage_post_result.py b/src/graphn/_generated/models/storage_post_result.py index fbc8356..53f3351 100644 --- a/src/graphn/_generated/models/storage_post_result.py +++ b/src/graphn/_generated/models/storage_post_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/storage_stats.py b/src/graphn/_generated/models/storage_stats.py index 70987fe..c5fbb98 100644 --- a/src/graphn/_generated/models/storage_stats.py +++ b/src/graphn/_generated/models/storage_stats.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="StorageStats") diff --git a/src/graphn/_generated/models/storage_upload.py b/src/graphn/_generated/models/storage_upload.py index 7d08080..9a7ad65 100644 --- a/src/graphn/_generated/models/storage_upload.py +++ b/src/graphn/_generated/models/storage_upload.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/submit_ingest_job_request.py b/src/graphn/_generated/models/submit_ingest_job_request.py index f8cddce..cd26139 100644 --- a/src/graphn/_generated/models/submit_ingest_job_request.py +++ b/src/graphn/_generated/models/submit_ingest_job_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.ingest_item_input import IngestItemInput diff --git a/src/graphn/_generated/models/supported_architectures.py b/src/graphn/_generated/models/supported_architectures.py index 45e23c9..4e537bc 100644 --- a/src/graphn/_generated/models/supported_architectures.py +++ b/src/graphn/_generated/models/supported_architectures.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self if TYPE_CHECKING: from ..models.architecture_info import ArchitectureInfo diff --git a/src/graphn/_generated/models/test_connection_request.py b/src/graphn/_generated/models/test_connection_request.py index 83b4409..04b3e3e 100644 --- a/src/graphn/_generated/models/test_connection_request.py +++ b/src/graphn/_generated/models/test_connection_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/test_connection_response.py b/src/graphn/_generated/models/test_connection_response.py index b547880..17e8547 100644 --- a/src/graphn/_generated/models/test_connection_response.py +++ b/src/graphn/_generated/models/test_connection_response.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/test_connection_response_usage.py b/src/graphn/_generated/models/test_connection_response_usage.py index 8dadbda..2a0cc3f 100644 --- a/src/graphn/_generated/models/test_connection_response_usage.py +++ b/src/graphn/_generated/models/test_connection_response_usage.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="TestConnectionResponseUsage") diff --git a/src/graphn/_generated/models/tool_definition.py b/src/graphn/_generated/models/tool_definition.py index 7f6903c..2396c1d 100644 --- a/src/graphn/_generated/models/tool_definition.py +++ b/src/graphn/_generated/models/tool_definition.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/tool_definition_input_schema.py b/src/graphn/_generated/models/tool_definition_input_schema.py index e25313c..fc16d24 100644 --- a/src/graphn/_generated/models/tool_definition_input_schema.py +++ b/src/graphn/_generated/models/tool_definition_input_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ToolDefinitionInputSchema") @_attrs_define class ToolDefinitionInputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/tool_reference.py b/src/graphn/_generated/models/tool_reference.py index 0c4000a..20faa55 100644 --- a/src/graphn/_generated/models/tool_reference.py +++ b/src/graphn/_generated/models/tool_reference.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="ToolReference") diff --git a/src/graphn/_generated/models/tool_test_request.py b/src/graphn/_generated/models/tool_test_request.py index c808290..6b0b4d8 100644 --- a/src/graphn/_generated/models/tool_test_request.py +++ b/src/graphn/_generated/models/tool_test_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/tool_test_request_input.py b/src/graphn/_generated/models/tool_test_request_input.py index 7075426..eb93ae0 100644 --- a/src/graphn/_generated/models/tool_test_request_input.py +++ b/src/graphn/_generated/models/tool_test_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="ToolTestRequestInput") @_attrs_define class ToolTestRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/tool_test_response.py b/src/graphn/_generated/models/tool_test_response.py index d787d0d..01dd237 100644 --- a/src/graphn/_generated/models/tool_test_response.py +++ b/src/graphn/_generated/models/tool_test_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/trigger.py b/src/graphn/_generated/models/trigger.py index 795f7a6..f5d1d00 100644 --- a/src/graphn/_generated/models/trigger.py +++ b/src/graphn/_generated/models/trigger.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset @@ -30,6 +29,8 @@ class Trigger: updated_at (datetime.datetime): cron_schedule (str | Unset): input_ (TriggerInput | Unset): + connection_id (str | Unset): + event_type (str | Unset): temporal_schedule_id (str | Unset): schedule_synced (bool | Unset): schedule_status (str | Unset): @@ -52,6 +53,8 @@ class Trigger: updated_at: datetime.datetime cron_schedule: str | Unset = UNSET input_: TriggerInput | Unset = UNSET + connection_id: str | Unset = UNSET + event_type: str | Unset = UNSET temporal_schedule_id: str | Unset = UNSET schedule_synced: bool | Unset = UNSET schedule_status: str | Unset = UNSET @@ -86,6 +89,10 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.input_, Unset): input_ = self.input_.to_dict() + connection_id = self.connection_id + + event_type = self.event_type + temporal_schedule_id = self.temporal_schedule_id schedule_synced = self.schedule_synced @@ -125,6 +132,10 @@ def to_dict(self) -> dict[str, Any]: field_dict["cron_schedule"] = cron_schedule if input_ is not UNSET: field_dict["input"] = input_ + if connection_id is not UNSET: + field_dict["connection_id"] = connection_id + if event_type is not UNSET: + field_dict["event_type"] = event_type if temporal_schedule_id is not UNSET: field_dict["temporal_schedule_id"] = temporal_schedule_id if schedule_synced is not UNSET: @@ -178,6 +189,10 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: else: input_ = TriggerInput.from_dict(_input_) + connection_id = d.pop("connection_id", UNSET) + + event_type = d.pop("event_type", UNSET) + temporal_schedule_id = d.pop("temporal_schedule_id", UNSET) schedule_synced = d.pop("schedule_synced", UNSET) @@ -210,6 +225,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: updated_at=updated_at, cron_schedule=cron_schedule, input_=input_, + connection_id=connection_id, + event_type=event_type, temporal_schedule_id=temporal_schedule_id, schedule_synced=schedule_synced, schedule_status=schedule_status, diff --git a/src/graphn/_generated/models/trigger_create.py b/src/graphn/_generated/models/trigger_create.py index 36b6f6b..59f5f98 100644 --- a/src/graphn/_generated/models/trigger_create.py +++ b/src/graphn/_generated/models/trigger_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset @@ -21,9 +20,11 @@ class TriggerCreate: Attributes: name (str): workflow_id (str): - cron_schedule (str): + cron_schedule (str | Unset): input_ (TriggerCreateInput | Unset): enabled (bool | Unset): + connection_id (str | Unset): + event_type (str | Unset): webhook_auth (str | Unset): hmac_secret_id (str | Unset): hmac_algorithm (str | Unset): @@ -33,9 +34,11 @@ class TriggerCreate: name: str workflow_id: str - cron_schedule: str + cron_schedule: str | Unset = UNSET input_: TriggerCreateInput | Unset = UNSET enabled: bool | Unset = UNSET + connection_id: str | Unset = UNSET + event_type: str | Unset = UNSET webhook_auth: str | Unset = UNSET hmac_secret_id: str | Unset = UNSET hmac_algorithm: str | Unset = UNSET @@ -55,6 +58,10 @@ def to_dict(self) -> dict[str, Any]: enabled = self.enabled + connection_id = self.connection_id + + event_type = self.event_type + webhook_auth = self.webhook_auth hmac_secret_id = self.hmac_secret_id @@ -71,13 +78,18 @@ def to_dict(self) -> dict[str, Any]: { "name": name, "workflow_id": workflow_id, - "cron_schedule": cron_schedule, } ) + if cron_schedule is not UNSET: + field_dict["cron_schedule"] = cron_schedule if input_ is not UNSET: field_dict["input"] = input_ if enabled is not UNSET: field_dict["enabled"] = enabled + if connection_id is not UNSET: + field_dict["connection_id"] = connection_id + if event_type is not UNSET: + field_dict["event_type"] = event_type if webhook_auth is not UNSET: field_dict["webhook_auth"] = webhook_auth if hmac_secret_id is not UNSET: @@ -100,7 +112,7 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: workflow_id = d.pop("workflow_id") - cron_schedule = d.pop("cron_schedule") + cron_schedule = d.pop("cron_schedule", UNSET) _input_ = d.pop("input", UNSET) input_: TriggerCreateInput | Unset @@ -111,6 +123,10 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: enabled = d.pop("enabled", UNSET) + connection_id = d.pop("connection_id", UNSET) + + event_type = d.pop("event_type", UNSET) + webhook_auth = d.pop("webhook_auth", UNSET) hmac_secret_id = d.pop("hmac_secret_id", UNSET) @@ -127,6 +143,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: cron_schedule=cron_schedule, input_=input_, enabled=enabled, + connection_id=connection_id, + event_type=event_type, webhook_auth=webhook_auth, hmac_secret_id=hmac_secret_id, hmac_algorithm=hmac_algorithm, diff --git a/src/graphn/_generated/models/trigger_create_input.py b/src/graphn/_generated/models/trigger_create_input.py index 84c8d52..08c4631 100644 --- a/src/graphn/_generated/models/trigger_create_input.py +++ b/src/graphn/_generated/models/trigger_create_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="TriggerCreateInput") @_attrs_define class TriggerCreateInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/trigger_create_nested.py b/src/graphn/_generated/models/trigger_create_nested.py index d6dad2b..371c034 100644 --- a/src/graphn/_generated/models/trigger_create_nested.py +++ b/src/graphn/_generated/models/trigger_create_nested.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset @@ -20,9 +19,11 @@ class TriggerCreateNested: """ Attributes: name (str): - cron_schedule (str): + cron_schedule (str | Unset): input_ (TriggerCreateNestedInput | Unset): enabled (bool | Unset): + connection_id (str | Unset): + event_type (str | Unset): webhook_auth (str | Unset): hmac_secret_id (str | Unset): hmac_algorithm (str | Unset): @@ -31,9 +32,11 @@ class TriggerCreateNested: """ name: str - cron_schedule: str + cron_schedule: str | Unset = UNSET input_: TriggerCreateNestedInput | Unset = UNSET enabled: bool | Unset = UNSET + connection_id: str | Unset = UNSET + event_type: str | Unset = UNSET webhook_auth: str | Unset = UNSET hmac_secret_id: str | Unset = UNSET hmac_algorithm: str | Unset = UNSET @@ -51,6 +54,10 @@ def to_dict(self) -> dict[str, Any]: enabled = self.enabled + connection_id = self.connection_id + + event_type = self.event_type + webhook_auth = self.webhook_auth hmac_secret_id = self.hmac_secret_id @@ -66,13 +73,18 @@ def to_dict(self) -> dict[str, Any]: field_dict.update( { "name": name, - "cron_schedule": cron_schedule, } ) + if cron_schedule is not UNSET: + field_dict["cron_schedule"] = cron_schedule if input_ is not UNSET: field_dict["input"] = input_ if enabled is not UNSET: field_dict["enabled"] = enabled + if connection_id is not UNSET: + field_dict["connection_id"] = connection_id + if event_type is not UNSET: + field_dict["event_type"] = event_type if webhook_auth is not UNSET: field_dict["webhook_auth"] = webhook_auth if hmac_secret_id is not UNSET: @@ -93,7 +105,7 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: d = dict(src_dict) name = d.pop("name") - cron_schedule = d.pop("cron_schedule") + cron_schedule = d.pop("cron_schedule", UNSET) _input_ = d.pop("input", UNSET) input_: TriggerCreateNestedInput | Unset @@ -104,6 +116,10 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: enabled = d.pop("enabled", UNSET) + connection_id = d.pop("connection_id", UNSET) + + event_type = d.pop("event_type", UNSET) + webhook_auth = d.pop("webhook_auth", UNSET) hmac_secret_id = d.pop("hmac_secret_id", UNSET) @@ -119,6 +135,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: cron_schedule=cron_schedule, input_=input_, enabled=enabled, + connection_id=connection_id, + event_type=event_type, webhook_auth=webhook_auth, hmac_secret_id=hmac_secret_id, hmac_algorithm=hmac_algorithm, diff --git a/src/graphn/_generated/models/trigger_create_nested_input.py b/src/graphn/_generated/models/trigger_create_nested_input.py index 4cf0d94..2b80db6 100644 --- a/src/graphn/_generated/models/trigger_create_nested_input.py +++ b/src/graphn/_generated/models/trigger_create_nested_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="TriggerCreateNestedInput") @_attrs_define class TriggerCreateNestedInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/trigger_input.py b/src/graphn/_generated/models/trigger_input.py index 4498bc1..0d2f758 100644 --- a/src/graphn/_generated/models/trigger_input.py +++ b/src/graphn/_generated/models/trigger_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="TriggerInput") @_attrs_define class TriggerInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/trigger_list.py b/src/graphn/_generated/models/trigger_list.py index 47c19c4..ae5861c 100644 --- a/src/graphn/_generated/models/trigger_list.py +++ b/src/graphn/_generated/models/trigger_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self if TYPE_CHECKING: from ..models.trigger import Trigger diff --git a/src/graphn/_generated/models/trigger_update.py b/src/graphn/_generated/models/trigger_update.py index c9116d8..cb3ee37 100644 --- a/src/graphn/_generated/models/trigger_update.py +++ b/src/graphn/_generated/models/trigger_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset @@ -23,6 +22,8 @@ class TriggerUpdate: cron_schedule (str | Unset): input_ (TriggerUpdateInput | Unset): enabled (bool | Unset): + connection_id (str | Unset): + event_type (str | Unset): webhook_auth (str | Unset): hmac_secret_id (str | Unset): hmac_algorithm (str | Unset): @@ -34,6 +35,8 @@ class TriggerUpdate: cron_schedule: str | Unset = UNSET input_: TriggerUpdateInput | Unset = UNSET enabled: bool | Unset = UNSET + connection_id: str | Unset = UNSET + event_type: str | Unset = UNSET webhook_auth: str | Unset = UNSET hmac_secret_id: str | Unset = UNSET hmac_algorithm: str | Unset = UNSET @@ -51,6 +54,10 @@ def to_dict(self) -> dict[str, Any]: enabled = self.enabled + connection_id = self.connection_id + + event_type = self.event_type + webhook_auth = self.webhook_auth hmac_secret_id = self.hmac_secret_id @@ -72,6 +79,10 @@ def to_dict(self) -> dict[str, Any]: field_dict["input"] = input_ if enabled is not UNSET: field_dict["enabled"] = enabled + if connection_id is not UNSET: + field_dict["connection_id"] = connection_id + if event_type is not UNSET: + field_dict["event_type"] = event_type if webhook_auth is not UNSET: field_dict["webhook_auth"] = webhook_auth if hmac_secret_id is not UNSET: @@ -103,6 +114,10 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: enabled = d.pop("enabled", UNSET) + connection_id = d.pop("connection_id", UNSET) + + event_type = d.pop("event_type", UNSET) + webhook_auth = d.pop("webhook_auth", UNSET) hmac_secret_id = d.pop("hmac_secret_id", UNSET) @@ -118,6 +133,8 @@ def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: cron_schedule=cron_schedule, input_=input_, enabled=enabled, + connection_id=connection_id, + event_type=event_type, webhook_auth=webhook_auth, hmac_secret_id=hmac_secret_id, hmac_algorithm=hmac_algorithm, diff --git a/src/graphn/_generated/models/trigger_update_input.py b/src/graphn/_generated/models/trigger_update_input.py index 9198e60..94ee7ef 100644 --- a/src/graphn/_generated/models/trigger_update_input.py +++ b/src/graphn/_generated/models/trigger_update_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="TriggerUpdateInput") @_attrs_define class TriggerUpdateInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/tts_request.py b/src/graphn/_generated/models/tts_request.py index a529339..eda3c3b 100644 --- a/src/graphn/_generated/models/tts_request.py +++ b/src/graphn/_generated/models/tts_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..models.tts_request_response_format import TTSRequestResponseFormat from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/tts_request_response_format.py b/src/graphn/_generated/models/tts_request_response_format.py index 114cae2..46a34d3 100644 --- a/src/graphn/_generated/models/tts_request_response_format.py +++ b/src/graphn/_generated/models/tts_request_response_format.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class TTSRequestResponseFormat(str, Enum): +class TTSRequestResponseFormat(StrEnum): FLAC = "flac" MP3 = "mp3" OPUS = "opus" diff --git a/src/graphn/_generated/models/upload_document_from_url_request.py b/src/graphn/_generated/models/upload_document_from_url_request.py index 1e3ee5a..ed6365f 100644 --- a/src/graphn/_generated/models/upload_document_from_url_request.py +++ b/src/graphn/_generated/models/upload_document_from_url_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/upload_document_from_url_request_metadata.py b/src/graphn/_generated/models/upload_document_from_url_request_metadata.py index bf89716..ad1a7fc 100644 --- a/src/graphn/_generated/models/upload_document_from_url_request_metadata.py +++ b/src/graphn/_generated/models/upload_document_from_url_request_metadata.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="UploadDocumentFromURLRequestMetadata") @_attrs_define class UploadDocumentFromURLRequestMetadata: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/upload_knowledgebase_document_files_body.py b/src/graphn/_generated/models/upload_knowledgebase_document_files_body.py index 5824847..6f87b63 100644 --- a/src/graphn/_generated/models/upload_knowledgebase_document_files_body.py +++ b/src/graphn/_generated/models/upload_knowledgebase_document_files_body.py @@ -2,10 +2,9 @@ from collections.abc import Mapping from io import BytesIO -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from .. import types from ..types import UNSET, File, Unset diff --git a/src/graphn/_generated/models/upload_storage_file_body.py b/src/graphn/_generated/models/upload_storage_file_body.py index 435409b..e491ff6 100644 --- a/src/graphn/_generated/models/upload_storage_file_body.py +++ b/src/graphn/_generated/models/upload_storage_file_body.py @@ -2,10 +2,9 @@ from collections.abc import Mapping from io import BytesIO -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from .. import types from ..types import File diff --git a/src/graphn/_generated/models/usage_day.py b/src/graphn/_generated/models/usage_day.py new file mode 100644 index 0000000..8ab3708 --- /dev/null +++ b/src/graphn/_generated/models/usage_day.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="UsageDay") + + +@_attrs_define +class UsageDay: + """ + Attributes: + date (datetime.date): + amount_cents (int): + """ + + date: datetime.date + amount_cents: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + date = self.date.isoformat() + + amount_cents = self.amount_cents + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "date": date, + "amountCents": amount_cents, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + date = datetime.date.fromisoformat(d.pop("date")) + + amount_cents = d.pop("amountCents") + + usage_day = cls( + date=date, + amount_cents=amount_cents, + ) + + usage_day.additional_properties = d + return usage_day + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/usage_week.py b/src/graphn/_generated/models/usage_week.py new file mode 100644 index 0000000..08ab030 --- /dev/null +++ b/src/graphn/_generated/models/usage_week.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, Self, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="UsageWeek") + + +@_attrs_define +class UsageWeek: + """ + Attributes: + period_start (datetime.datetime): + period_end (datetime.datetime): + amount_cents (int): + """ + + period_start: datetime.datetime + period_end: datetime.datetime + amount_cents: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + period_start = self.period_start.isoformat() + + period_end = self.period_end.isoformat() + + amount_cents = self.amount_cents + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "periodStart": period_start, + "periodEnd": period_end, + "amountCents": amount_cents, + } + ) + + return field_dict + + @classmethod + def from_dict(cls, src_dict: Mapping[str, Any]) -> Self: + d = dict(src_dict) + period_start = datetime.datetime.fromisoformat(d.pop("periodStart")) + + period_end = datetime.datetime.fromisoformat(d.pop("periodEnd")) + + amount_cents = d.pop("amountCents") + + usage_week = cls( + period_start=period_start, + period_end=period_end, + amount_cents=amount_cents, + ) + + usage_week.additional_properties = d + return usage_week + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/graphn/_generated/models/validate_model_request.py b/src/graphn/_generated/models/validate_model_request.py index b6feb9d..fe0739f 100644 --- a/src/graphn/_generated/models/validate_model_request.py +++ b/src/graphn/_generated/models/validate_model_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..models.validate_model_request_quantization import ( ValidateModelRequestQuantization, diff --git a/src/graphn/_generated/models/validate_model_request_quantization.py b/src/graphn/_generated/models/validate_model_request_quantization.py index 1e132cc..f2939ff 100644 --- a/src/graphn/_generated/models/validate_model_request_quantization.py +++ b/src/graphn/_generated/models/validate_model_request_quantization.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ValidateModelRequestQuantization(str, Enum): +class ValidateModelRequestQuantization(StrEnum): AWQ = "awq" FP8 = "fp8" GGUF = "gguf" diff --git a/src/graphn/_generated/models/validate_model_request_weight_source.py b/src/graphn/_generated/models/validate_model_request_weight_source.py index 8b29625..5b514ed 100644 --- a/src/graphn/_generated/models/validate_model_request_weight_source.py +++ b/src/graphn/_generated/models/validate_model_request_weight_source.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ValidateModelRequestWeightSource(str, Enum): +class ValidateModelRequestWeightSource(StrEnum): HUGGINGFACE = "huggingface" S3_ASSUME_ROLE = "s3_assume_role" diff --git a/src/graphn/_generated/models/validate_model_response.py b/src/graphn/_generated/models/validate_model_response.py index 9eb28d1..203de45 100644 --- a/src/graphn/_generated/models/validate_model_response.py +++ b/src/graphn/_generated/models/validate_model_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..models.validate_model_response_artifact_type import ( ValidateModelResponseArtifactType, diff --git a/src/graphn/_generated/models/validate_model_response_artifact_type.py b/src/graphn/_generated/models/validate_model_response_artifact_type.py index 07adb92..eb62adf 100644 --- a/src/graphn/_generated/models/validate_model_response_artifact_type.py +++ b/src/graphn/_generated/models/validate_model_response_artifact_type.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class ValidateModelResponseArtifactType(str, Enum): +class ValidateModelResponseArtifactType(StrEnum): BASE = "base" LORA = "lora" diff --git a/src/graphn/_generated/models/weight_source.py b/src/graphn/_generated/models/weight_source.py index c60e9ad..b87eebd 100644 --- a/src/graphn/_generated/models/weight_source.py +++ b/src/graphn/_generated/models/weight_source.py @@ -1,7 +1,7 @@ -from enum import Enum +from enum import StrEnum -class WeightSource(str, Enum): +class WeightSource(StrEnum): HUGGINGFACE = "huggingface" S3_ASSUME_ROLE = "s3_assume_role" S3_PRESIGNED = "s3_presigned" diff --git a/src/graphn/_generated/models/workflow.py b/src/graphn/_generated/models/workflow.py index 48cc891..e334e56 100644 --- a/src/graphn/_generated/models/workflow.py +++ b/src/graphn/_generated/models/workflow.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_bundle.py b/src/graphn/_generated/models/workflow_bundle.py index a5c3779..7363a27 100644 --- a/src/graphn/_generated/models/workflow_bundle.py +++ b/src/graphn/_generated/models/workflow_bundle.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_bundle_agents_item.py b/src/graphn/_generated/models/workflow_bundle_agents_item.py index 0764935..dec050d 100644 --- a/src/graphn/_generated/models/workflow_bundle_agents_item.py +++ b/src/graphn/_generated/models/workflow_bundle_agents_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleAgentsItem") @_attrs_define class WorkflowBundleAgentsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_functions_item.py b/src/graphn/_generated/models/workflow_bundle_functions_item.py index 11fddfc..a3e4d36 100644 --- a/src/graphn/_generated/models/workflow_bundle_functions_item.py +++ b/src/graphn/_generated/models/workflow_bundle_functions_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleFunctionsItem") @_attrs_define class WorkflowBundleFunctionsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_mcp_servers_item.py b/src/graphn/_generated/models/workflow_bundle_mcp_servers_item.py index fbf8f31..235d1d3 100644 --- a/src/graphn/_generated/models/workflow_bundle_mcp_servers_item.py +++ b/src/graphn/_generated/models/workflow_bundle_mcp_servers_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleMcpServersItem") @_attrs_define class WorkflowBundleMcpServersItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_save.py b/src/graphn/_generated/models/workflow_bundle_save.py index 2bc944e..ddcd9e6 100644 --- a/src/graphn/_generated/models/workflow_bundle_save.py +++ b/src/graphn/_generated/models/workflow_bundle_save.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_bundle_save_response.py b/src/graphn/_generated/models/workflow_bundle_save_response.py index ef968f5..c716bf1 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_bundle_save_response_agents_item.py b/src/graphn/_generated/models/workflow_bundle_save_response_agents_item.py index 51e5199..a5eaef4 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response_agents_item.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response_agents_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleSaveResponseAgentsItem") @_attrs_define class WorkflowBundleSaveResponseAgentsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_save_response_functions_item.py b/src/graphn/_generated/models/workflow_bundle_save_response_functions_item.py index 9de4977..9907e0f 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response_functions_item.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response_functions_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleSaveResponseFunctionsItem") @_attrs_define class WorkflowBundleSaveResponseFunctionsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_save_response_mcp_servers_item.py b/src/graphn/_generated/models/workflow_bundle_save_response_mcp_servers_item.py index 43dc70d..a615cc4 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response_mcp_servers_item.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response_mcp_servers_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleSaveResponseMcpServersItem") @_attrs_define class WorkflowBundleSaveResponseMcpServersItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_bundle_save_response_validation.py b/src/graphn/_generated/models/workflow_bundle_save_response_validation.py index 992a5ef..feaec05 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response_validation.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response_validation.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_bundle_save_response_validation_errors_item.py b/src/graphn/_generated/models/workflow_bundle_save_response_validation_errors_item.py index 596ae2e..3d2eee6 100644 --- a/src/graphn/_generated/models/workflow_bundle_save_response_validation_errors_item.py +++ b/src/graphn/_generated/models/workflow_bundle_save_response_validation_errors_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowBundleSaveResponseValidationErrorsItem") @_attrs_define class WorkflowBundleSaveResponseValidationErrorsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_create.py b/src/graphn/_generated/models/workflow_create.py index 3fa2382..ed39fac 100644 --- a/src/graphn/_generated/models/workflow_create.py +++ b/src/graphn/_generated/models/workflow_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_create_input_schema.py b/src/graphn/_generated/models/workflow_create_input_schema.py index c2ca5d1..4ddac8e 100644 --- a/src/graphn/_generated/models/workflow_create_input_schema.py +++ b/src/graphn/_generated/models/workflow_create_input_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowCreateInputSchema") @_attrs_define class WorkflowCreateInputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_create_layout.py b/src/graphn/_generated/models/workflow_create_layout.py index ebee208..238d87f 100644 --- a/src/graphn/_generated/models/workflow_create_layout.py +++ b/src/graphn/_generated/models/workflow_create_layout.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowCreateLayout") @_attrs_define class WorkflowCreateLayout: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_create_output_schema.py b/src/graphn/_generated/models/workflow_create_output_schema.py index 7f1812e..7528e2e 100644 --- a/src/graphn/_generated/models/workflow_create_output_schema.py +++ b/src/graphn/_generated/models/workflow_create_output_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowCreateOutputSchema") @_attrs_define class WorkflowCreateOutputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_create_source.py b/src/graphn/_generated/models/workflow_create_source.py index 534effd..7bba347 100644 --- a/src/graphn/_generated/models/workflow_create_source.py +++ b/src/graphn/_generated/models/workflow_create_source.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowCreateSource") @_attrs_define class WorkflowCreateSource: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_input_schema.py b/src/graphn/_generated/models/workflow_input_schema.py index d7d6d42..59edefa 100644 --- a/src/graphn/_generated/models/workflow_input_schema.py +++ b/src/graphn/_generated/models/workflow_input_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowInputSchema") @_attrs_define class WorkflowInputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_layout.py b/src/graphn/_generated/models/workflow_layout.py index 098c680..6be7e98 100644 --- a/src/graphn/_generated/models/workflow_layout.py +++ b/src/graphn/_generated/models/workflow_layout.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowLayout") @_attrs_define class WorkflowLayout: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_list.py b/src/graphn/_generated/models/workflow_list.py index a1c651e..09adeb1 100644 --- a/src/graphn/_generated/models/workflow_list.py +++ b/src/graphn/_generated/models/workflow_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_output_schema.py b/src/graphn/_generated/models/workflow_output_schema.py index 345b18d..c8b673a 100644 --- a/src/graphn/_generated/models/workflow_output_schema.py +++ b/src/graphn/_generated/models/workflow_output_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowOutputSchema") @_attrs_define class WorkflowOutputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_run_request.py b/src/graphn/_generated/models/workflow_run_request.py index 273ce3f..04d201b 100644 --- a/src/graphn/_generated/models/workflow_run_request.py +++ b/src/graphn/_generated/models/workflow_run_request.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_run_request_input.py b/src/graphn/_generated/models/workflow_run_request_input.py index fe769af..7a0ef70 100644 --- a/src/graphn/_generated/models/workflow_run_request_input.py +++ b/src/graphn/_generated/models/workflow_run_request_input.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowRunRequestInput") @_attrs_define class WorkflowRunRequestInput: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_run_result.py b/src/graphn/_generated/models/workflow_run_result.py index 6893aad..2a37038 100644 --- a/src/graphn/_generated/models/workflow_run_result.py +++ b/src/graphn/_generated/models/workflow_run_result.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_run_result_node_results_item.py b/src/graphn/_generated/models/workflow_run_result_node_results_item.py index 7f662a6..6925abd 100644 --- a/src/graphn/_generated/models/workflow_run_result_node_results_item.py +++ b/src/graphn/_generated/models/workflow_run_result_node_results_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowRunResultNodeResultsItem") @_attrs_define class WorkflowRunResultNodeResultsItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_run_result_resources_accessed_item.py b/src/graphn/_generated/models/workflow_run_result_resources_accessed_item.py index 3db5e5c..7ea15f6 100644 --- a/src/graphn/_generated/models/workflow_run_result_resources_accessed_item.py +++ b/src/graphn/_generated/models/workflow_run_result_resources_accessed_item.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowRunResultResourcesAccessedItem") @_attrs_define class WorkflowRunResultResourcesAccessedItem: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_run_result_trace.py b/src/graphn/_generated/models/workflow_run_result_trace.py index c25770f..ce7afc0 100644 --- a/src/graphn/_generated/models/workflow_run_result_trace.py +++ b/src/graphn/_generated/models/workflow_run_result_trace.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowRunResultTrace") @_attrs_define class WorkflowRunResultTrace: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_source.py b/src/graphn/_generated/models/workflow_source.py index 0b59b8a..ee07c59 100644 --- a/src/graphn/_generated/models/workflow_source.py +++ b/src/graphn/_generated/models/workflow_source.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowSource") @_attrs_define class WorkflowSource: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_update.py b/src/graphn/_generated/models/workflow_update.py index b432efa..f977e03 100644 --- a/src/graphn/_generated/models/workflow_update.py +++ b/src/graphn/_generated/models/workflow_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, Self, TypeVar, cast from attrs import define as _attrs_define -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_update_input_schema.py b/src/graphn/_generated/models/workflow_update_input_schema.py index 6689a45..211d4c9 100644 --- a/src/graphn/_generated/models/workflow_update_input_schema.py +++ b/src/graphn/_generated/models/workflow_update_input_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowUpdateInputSchema") @_attrs_define class WorkflowUpdateInputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_update_layout.py b/src/graphn/_generated/models/workflow_update_layout.py index f49fff9..8ad6941 100644 --- a/src/graphn/_generated/models/workflow_update_layout.py +++ b/src/graphn/_generated/models/workflow_update_layout.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowUpdateLayout") @_attrs_define class WorkflowUpdateLayout: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_update_output_schema.py b/src/graphn/_generated/models/workflow_update_output_schema.py index d1930ac..9a1c551 100644 --- a/src/graphn/_generated/models/workflow_update_output_schema.py +++ b/src/graphn/_generated/models/workflow_update_output_schema.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowUpdateOutputSchema") @_attrs_define class WorkflowUpdateOutputSchema: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_version_detail.py b/src/graphn/_generated/models/workflow_version_detail.py index b62df28..28619ae 100644 --- a/src/graphn/_generated/models/workflow_version_detail.py +++ b/src/graphn/_generated/models/workflow_version_detail.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workflow_version_detail_resource_pins.py b/src/graphn/_generated/models/workflow_version_detail_resource_pins.py index 06c2b5a..aba7371 100644 --- a/src/graphn/_generated/models/workflow_version_detail_resource_pins.py +++ b/src/graphn/_generated/models/workflow_version_detail_resource_pins.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowVersionDetailResourcePins") @_attrs_define class WorkflowVersionDetailResourcePins: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_version_detail_resource_snapshots.py b/src/graphn/_generated/models/workflow_version_detail_resource_snapshots.py index 243c387..e023d77 100644 --- a/src/graphn/_generated/models/workflow_version_detail_resource_snapshots.py +++ b/src/graphn/_generated/models/workflow_version_detail_resource_snapshots.py @@ -1,19 +1,16 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self T = TypeVar("T", bound="WorkflowVersionDetailResourceSnapshots") @_attrs_define class WorkflowVersionDetailResourceSnapshots: - """ """ - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: diff --git a/src/graphn/_generated/models/workflow_version_list.py b/src/graphn/_generated/models/workflow_version_list.py index 703d155..e54a9e2 100644 --- a/src/graphn/_generated/models/workflow_version_list.py +++ b/src/graphn/_generated/models/workflow_version_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workspace.py b/src/graphn/_generated/models/workspace.py index 7e921cc..0d1d5e1 100644 --- a/src/graphn/_generated/models/workspace.py +++ b/src/graphn/_generated/models/workspace.py @@ -2,11 +2,10 @@ import datetime from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workspace_create.py b/src/graphn/_generated/models/workspace_create.py index 4bcb1fd..4009997 100644 --- a/src/graphn/_generated/models/workspace_create.py +++ b/src/graphn/_generated/models/workspace_create.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="WorkspaceCreate") diff --git a/src/graphn/_generated/models/workspace_list.py b/src/graphn/_generated/models/workspace_list.py index e0e3532..96f28cd 100644 --- a/src/graphn/_generated/models/workspace_list.py +++ b/src/graphn/_generated/models/workspace_list.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING, Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset diff --git a/src/graphn/_generated/models/workspace_update.py b/src/graphn/_generated/models/workspace_update.py index b484508..e5ef6f8 100644 --- a/src/graphn/_generated/models/workspace_update.py +++ b/src/graphn/_generated/models/workspace_update.py @@ -1,10 +1,9 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define -from typing_extensions import Self T = TypeVar("T", bound="WorkspaceUpdate") diff --git a/src/graphn/_generated/models/workspace_usage.py b/src/graphn/_generated/models/workspace_usage.py index cfa44f7..b183d5e 100644 --- a/src/graphn/_generated/models/workspace_usage.py +++ b/src/graphn/_generated/models/workspace_usage.py @@ -1,11 +1,10 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Any, TypeVar +from typing import Any, Self, TypeVar from attrs import define as _attrs_define from attrs import field as _attrs_field -from typing_extensions import Self from ..types import UNSET, Unset