client: regenerate from hanzoai/[email protected] (3.2.5)

The document types 1495 of its 2459 operations, up from 1242. 87 new model
modules carry the response shapes ai, eval, functions, domain, experiments,
security and benchmark now declare, so those calls return a typed object
instead of a dict. 2524 generated modules import clean.

.spec-lock moves from v1.801.497 to @ffbc86064, which is v1.801.498.
This commit is contained in:
2026-08-08 14:20:07 -07:00
parent fcec4c3d80
commit cafae37f4e
108 changed files with 21076 additions and 2311 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
ref=v1.801.497
sha256=2cb7fd763cb872dd56d9d72b6b83e4594c009ee28cb04732e8531da0f7e7fda8
ref=ffbc860642bc4a78ffffc6566976e060e3e27dcd
sha256=92086aff143fcce33bdaa37a558ecb6724d5c8fde8b137e9182c38c5118c4e1e
repo=hanzoai/cloud
path=openapi.yaml
+174
View File
@@ -258,6 +258,7 @@ __all__ = [
"AdminReportData",
"AdminReportOut",
"AdminSummary",
"Admission",
"AdvanceIn",
"AffiliateBoard",
"AffiliateData",
@@ -271,6 +272,7 @@ __all__ = [
"AgentList",
"AgentRunView",
"AgentView",
"AiEnvelope",
"AiMCPApp",
"AiMCPSurface",
"AiMetrics",
@@ -285,10 +287,12 @@ __all__ = [
"AimetricsOut",
"AllowlistPutIn",
"AllowlistView",
"Analysis",
"AnalyticsData",
"AnalyticsOut",
"AnalyticsSlice",
"AnalyticsView",
"AnalyzeQuery",
"AnchorData",
"AnchorOut",
"AnchorStatus",
@@ -328,6 +332,7 @@ __all__ = [
"ArgoSyncStatus",
"ArgoSyncWindows",
"ArgoTree",
"Arm",
"Artifact",
"ArtifactOut",
"ArtifactsOut",
@@ -335,6 +340,7 @@ __all__ = [
"AskPostIn",
"AskRequest",
"AskResponse",
"Assignment",
"Attempt",
"AttributeRequest",
"Attribution",
@@ -371,6 +377,8 @@ __all__ = [
"BasesOut",
"BasisResult",
"BeginIn",
"Benchmark",
"BenchmarkCatalog",
"BinarySpec",
"BindAgentReq",
"BindingList",
@@ -384,9 +392,14 @@ __all__ = [
"BlueprintRow",
"BlueprintVersionsView",
"BlueprintView",
"Board",
"BoardItem",
"BoardPage",
"BoardPoint",
"BoardRange",
"BoardResp",
"BoardScope",
"BoardTotals",
"BoardView",
"BookRequest",
"BookResponse",
@@ -553,6 +566,7 @@ __all__ = [
"Contact",
"ContactList",
"ContactReq",
"Contacts",
"ContextBundle",
"ContextIn",
"ControlCommandView",
@@ -561,12 +575,14 @@ __all__ = [
"CordonIn",
"CorpusView",
"Cost",
"CostLine",
"CrawlDocument",
"CrawlRequest",
"CrawlResult",
"CreateAccountIn",
"CreateAgentIn",
"CreateAppReq",
"CreateBody",
"CreateClusterReq",
"CreateClusterReqNodePool",
"CreateEndpointIn",
@@ -613,11 +629,16 @@ __all__ = [
"DataroomRoomOne",
"DataroomRooms",
"DataroomStats",
"DatasetList",
"DatasetReq",
"DatasetView",
"DatastoreVolume",
"DayCount",
"DecideBody",
"DecisionIn",
"DeckOut",
"DefRow",
"Definition",
"DefsOut",
"DeletedOut",
"DeliveryList",
@@ -688,11 +709,15 @@ __all__ = [
"EsignCompleteIn",
"EsignOut",
"EvaluateIn",
"EvaluatorList",
"EvaluatorReq",
"EvaluatorView",
"Event",
"EventList",
"EventView",
"Exception",
"Experiment",
"ExperimentList",
"ExperimentsOut",
"Extracted",
"FetchQuery",
@@ -719,6 +744,8 @@ __all__ = [
"FinanceUsageView",
"FinancialPackage",
"Finding",
"FindingList",
"FindingView",
"FingerprintRequest",
"FingerprintResponse",
"FlagsOut",
@@ -736,11 +763,14 @@ __all__ = [
"FlowTrigger",
"FlowUpdate",
"FlowVersion",
"FnList",
"Formation",
"FormationView",
"Founder",
"FoundersIn",
"Frame",
"FunctionDetail",
"FunctionView",
"Funnel",
"FwdRule",
"GLRow",
@@ -803,6 +833,8 @@ __all__ = [
"HelpTicketFiled",
"HelpTicketIntake",
"Hit",
"Holding",
"Holdings",
"Host",
"IamAccountItem",
"IamAddress",
@@ -940,20 +972,28 @@ __all__ = [
"InstallReq",
"InstallState",
"Integrity",
"InvocationList",
"InvocationView",
"InvoiceLineIn",
"InvoiceOut",
"InvoiceRow",
"InvoicesOut",
"InvokeReq",
"IssueEdit",
"IssueRequest",
"IssueResponse",
"IssueView",
"ItemList",
"ItemReq",
"ItemResult",
"ItemView",
"JWK",
"JobCancel",
"JobCanceled",
"JobList",
"JournalEntry",
"JourneyStep",
"JudgeSpec",
"KbAuthorizeOut",
"KbConnectorsOut",
"KbSyncOut",
@@ -972,8 +1012,11 @@ __all__ = [
"LLM",
"LLMOverview",
"LastEventView",
"LatencyStat",
"LbList",
"LbView",
"LeaderRow",
"Leaderboard",
"LeaderboardRow",
"LeaderboardView",
"LeaseIn",
@@ -998,6 +1041,7 @@ __all__ = [
"LoadBalancer",
"Location",
"LogBody",
"LogLines",
"Loss",
"MCPListing",
"MCPPackage",
@@ -1038,6 +1082,7 @@ __all__ = [
"MlResourceList",
"ModelField",
"ModelRow",
"ModelStat",
"ModuleInfo",
"ModuleList",
"ModuleState",
@@ -1857,6 +1902,7 @@ __all__ = [
"O11yWebhookConfig",
"O11yWechatConfig",
"OauthBundleIn",
"Offer",
"OnboardReq",
"OnboardResp",
"OpenReq",
@@ -1867,12 +1913,14 @@ __all__ = [
"OptinView",
"OracleView",
"OraclesOut",
"Order",
"OrgEarningView",
"OrgOptinReq",
"OrgOptinView",
"OrgRow",
"OrgView",
"OrgsOut",
"Outcome",
"Overlay",
"Overview",
"OverviewData",
@@ -1887,6 +1935,7 @@ __all__ = [
"PagesKVBinding",
"PagesProjectCreate",
"PagesR2Binding",
"Pairing",
"PairingApproved",
"PairingQueue",
"PairingView",
@@ -1926,6 +1975,7 @@ __all__ = [
"PluginMountList",
"PnL",
"PnLLine",
"PointView",
"Policy",
"PolicyData",
"PolicyOut",
@@ -1938,6 +1988,9 @@ __all__ = [
"PostV1EventRequest",
"Posting",
"PrefsView",
"Preset",
"PresetAccepted",
"PresetList",
"PreviewReq",
"PreviewView",
"Price",
@@ -2022,12 +2075,14 @@ __all__ = [
"Question",
"QuestionsResponse",
"Quote",
"QuoteList",
"RaiseInvoiceIn",
"Ran",
"Range",
"RateCard",
"RateSet",
"RawOut",
"Reachability",
"ReadOut",
"Readiness",
"ReadingReq",
@@ -2062,6 +2117,8 @@ __all__ = [
"RegisterKeyReq",
"RegisterPage",
"RegisterReq",
"RegisterResult",
"Registrant",
"Registration",
"RegistrationView",
"RegistryImage",
@@ -2081,6 +2138,8 @@ __all__ = [
"ReleaseState",
"ReloadIn",
"Remittance",
"RenewReq",
"RenewResult",
"ReplaceKitIn",
"ReplayBody",
"RepoList",
@@ -2176,15 +2235,22 @@ __all__ = [
"RouterList",
"RouterView",
"Rule",
"RuleList",
"RuleView",
"RulesOut",
"Ruleset",
"RunIn",
"RunList",
"RunPage",
"RunRecord",
"RunReq",
"RunRequest",
"RunResp",
"RunSummary",
"RunView",
"RunnerBuildReq",
"RunnerBuildResp",
"Runs",
"SaaSCategory",
"SaaSCustomer",
"SaaSEvent",
@@ -2206,9 +2272,19 @@ __all__ = [
"SbomIngest",
"SbomIngested",
"ScaleIn",
"Scan",
"ScanDetail",
"ScanDraft",
"ScanList",
"ScanView",
"ScheduleInput",
"Scope",
"ScoreConfigList",
"ScoreConfigReq",
"ScoreConfigView",
"ScoreList",
"ScoreReq",
"ScoreView",
"ScreenResult",
"SearchIn",
"SearchIndex",
@@ -2216,6 +2292,8 @@ __all__ = [
"SearchOut",
"SearchResults",
"SearchStats",
"SecretList",
"SecretView",
"Section",
"SeedData",
"SeedOut",
@@ -2284,6 +2362,7 @@ __all__ = [
"StatsSessions",
"StatsUser",
"Status",
"StatusBreakdown",
"StatusCounts",
"StatusView",
"Step",
@@ -2312,6 +2391,7 @@ __all__ = [
"SubjectList",
"SubjectReq",
"SubjectSummary",
"SubmitReq",
"SubscribeReq",
"SubscriptionList",
"SubscriptionRow",
@@ -2323,6 +2403,7 @@ __all__ = [
"SubsystemsOut",
"SuggestResponse",
"Suggestion",
"Suite",
"Summary",
"SummaryResp",
"SummaryView",
@@ -2366,11 +2447,14 @@ __all__ = [
"TopProducts",
"TotalView",
"Totals",
"TraceList",
"TraceView",
"TrackerProject",
"TrafficCaller",
"TrafficView",
"TrailPage",
"TransactionsOut",
"TransferReq",
"TransitionIn",
"TransitionResult",
"TreasuryReport",
@@ -2378,8 +2462,11 @@ __all__ = [
"TreeEntryJSON",
"TreeJSON",
"TreeNode",
"Trial",
"TrialBalance",
"TrialBalanceRow",
"TriggerList",
"TriggerView",
"Txn",
"UTM",
"UnlinkedView",
@@ -2704,6 +2791,7 @@ from hanzoai.cloud.models.admin_referral_view import AdminReferralView as AdminR
from hanzoai.cloud.models.admin_report_data import AdminReportData as AdminReportData
from hanzoai.cloud.models.admin_report_out import AdminReportOut as AdminReportOut
from hanzoai.cloud.models.admin_summary import AdminSummary as AdminSummary
from hanzoai.cloud.models.admission import Admission as Admission
from hanzoai.cloud.models.advance_in import AdvanceIn as AdvanceIn
from hanzoai.cloud.models.affiliate_board import AffiliateBoard as AffiliateBoard
from hanzoai.cloud.models.affiliate_data import AffiliateData as AffiliateData
@@ -2717,6 +2805,7 @@ from hanzoai.cloud.models.agent_detail import AgentDetail as AgentDetail
from hanzoai.cloud.models.agent_list import AgentList as AgentList
from hanzoai.cloud.models.agent_run_view import AgentRunView as AgentRunView
from hanzoai.cloud.models.agent_view import AgentView as AgentView
from hanzoai.cloud.models.ai_envelope import AiEnvelope as AiEnvelope
from hanzoai.cloud.models.ai_mcp_app import AiMCPApp as AiMCPApp
from hanzoai.cloud.models.ai_mcp_surface import AiMCPSurface as AiMCPSurface
from hanzoai.cloud.models.ai_metrics import AiMetrics as AiMetrics
@@ -2731,10 +2820,12 @@ from hanzoai.cloud.models.aim_usage import AimUsage as AimUsage
from hanzoai.cloud.models.aimetrics_out import AimetricsOut as AimetricsOut
from hanzoai.cloud.models.allowlist_put_in import AllowlistPutIn as AllowlistPutIn
from hanzoai.cloud.models.allowlist_view import AllowlistView as AllowlistView
from hanzoai.cloud.models.analysis import Analysis as Analysis
from hanzoai.cloud.models.analytics_data import AnalyticsData as AnalyticsData
from hanzoai.cloud.models.analytics_out import AnalyticsOut as AnalyticsOut
from hanzoai.cloud.models.analytics_slice import AnalyticsSlice as AnalyticsSlice
from hanzoai.cloud.models.analytics_view import AnalyticsView as AnalyticsView
from hanzoai.cloud.models.analyze_query import AnalyzeQuery as AnalyzeQuery
from hanzoai.cloud.models.anchor_data import AnchorData as AnchorData
from hanzoai.cloud.models.anchor_out import AnchorOut as AnchorOut
from hanzoai.cloud.models.anchor_status import AnchorStatus as AnchorStatus
@@ -2774,6 +2865,7 @@ from hanzoai.cloud.models.argo_summary import ArgoSummary as ArgoSummary
from hanzoai.cloud.models.argo_sync_status import ArgoSyncStatus as ArgoSyncStatus
from hanzoai.cloud.models.argo_sync_windows import ArgoSyncWindows as ArgoSyncWindows
from hanzoai.cloud.models.argo_tree import ArgoTree as ArgoTree
from hanzoai.cloud.models.arm import Arm as Arm
from hanzoai.cloud.models.artifact import Artifact as Artifact
from hanzoai.cloud.models.artifact_out import ArtifactOut as ArtifactOut
from hanzoai.cloud.models.artifacts_out import ArtifactsOut as ArtifactsOut
@@ -2781,6 +2873,7 @@ from hanzoai.cloud.models.ask_answer import AskAnswer as AskAnswer
from hanzoai.cloud.models.ask_post_in import AskPostIn as AskPostIn
from hanzoai.cloud.models.ask_request import AskRequest as AskRequest
from hanzoai.cloud.models.ask_response import AskResponse as AskResponse
from hanzoai.cloud.models.assignment import Assignment as Assignment
from hanzoai.cloud.models.attempt import Attempt as Attempt
from hanzoai.cloud.models.attribute_request import AttributeRequest as AttributeRequest
from hanzoai.cloud.models.attribution import Attribution as Attribution
@@ -2817,6 +2910,8 @@ from hanzoai.cloud.models.base_instance import BaseInstance as BaseInstance
from hanzoai.cloud.models.bases_out import BasesOut as BasesOut
from hanzoai.cloud.models.basis_result import BasisResult as BasisResult
from hanzoai.cloud.models.begin_in import BeginIn as BeginIn
from hanzoai.cloud.models.benchmark import Benchmark as Benchmark
from hanzoai.cloud.models.benchmark_catalog import BenchmarkCatalog as BenchmarkCatalog
from hanzoai.cloud.models.binary_spec import BinarySpec as BinarySpec
from hanzoai.cloud.models.bind_agent_req import BindAgentReq as BindAgentReq
from hanzoai.cloud.models.binding_list import BindingList as BindingList
@@ -2830,9 +2925,14 @@ from hanzoai.cloud.models.blueprint_index import BlueprintIndex as BlueprintInde
from hanzoai.cloud.models.blueprint_row import BlueprintRow as BlueprintRow
from hanzoai.cloud.models.blueprint_versions_view import BlueprintVersionsView as BlueprintVersionsView
from hanzoai.cloud.models.blueprint_view import BlueprintView as BlueprintView
from hanzoai.cloud.models.board import Board as Board
from hanzoai.cloud.models.board_item import BoardItem as BoardItem
from hanzoai.cloud.models.board_page import BoardPage as BoardPage
from hanzoai.cloud.models.board_point import BoardPoint as BoardPoint
from hanzoai.cloud.models.board_range import BoardRange as BoardRange
from hanzoai.cloud.models.board_resp import BoardResp as BoardResp
from hanzoai.cloud.models.board_scope import BoardScope as BoardScope
from hanzoai.cloud.models.board_totals import BoardTotals as BoardTotals
from hanzoai.cloud.models.board_view import BoardView as BoardView
from hanzoai.cloud.models.book_request import BookRequest as BookRequest
from hanzoai.cloud.models.book_response import BookResponse as BookResponse
@@ -2999,6 +3099,7 @@ from hanzoai.cloud.models.consumer_write import ConsumerWrite as ConsumerWrite
from hanzoai.cloud.models.contact import Contact as Contact
from hanzoai.cloud.models.contact_list import ContactList as ContactList
from hanzoai.cloud.models.contact_req import ContactReq as ContactReq
from hanzoai.cloud.models.contacts import Contacts as Contacts
from hanzoai.cloud.models.context_bundle import ContextBundle as ContextBundle
from hanzoai.cloud.models.context_in import ContextIn as ContextIn
from hanzoai.cloud.models.control_command_view import ControlCommandView as ControlCommandView
@@ -3007,12 +3108,14 @@ from hanzoai.cloud.models.cookie_ack import CookieAck as CookieAck
from hanzoai.cloud.models.cordon_in import CordonIn as CordonIn
from hanzoai.cloud.models.corpus_view import CorpusView as CorpusView
from hanzoai.cloud.models.cost import Cost as Cost
from hanzoai.cloud.models.cost_line import CostLine as CostLine
from hanzoai.cloud.models.crawl_document import CrawlDocument as CrawlDocument
from hanzoai.cloud.models.crawl_request import CrawlRequest as CrawlRequest
from hanzoai.cloud.models.crawl_result import CrawlResult as CrawlResult
from hanzoai.cloud.models.create_account_in import CreateAccountIn as CreateAccountIn
from hanzoai.cloud.models.create_agent_in import CreateAgentIn as CreateAgentIn
from hanzoai.cloud.models.create_app_req import CreateAppReq as CreateAppReq
from hanzoai.cloud.models.create_body import CreateBody as CreateBody
from hanzoai.cloud.models.create_cluster_req import CreateClusterReq as CreateClusterReq
from hanzoai.cloud.models.create_cluster_req_node_pool import CreateClusterReqNodePool as CreateClusterReqNodePool
from hanzoai.cloud.models.create_endpoint_in import CreateEndpointIn as CreateEndpointIn
@@ -3059,11 +3162,16 @@ from hanzoai.cloud.models.dataroom_room_detail_one import DataroomRoomDetailOne
from hanzoai.cloud.models.dataroom_room_one import DataroomRoomOne as DataroomRoomOne
from hanzoai.cloud.models.dataroom_rooms import DataroomRooms as DataroomRooms
from hanzoai.cloud.models.dataroom_stats import DataroomStats as DataroomStats
from hanzoai.cloud.models.dataset_list import DatasetList as DatasetList
from hanzoai.cloud.models.dataset_req import DatasetReq as DatasetReq
from hanzoai.cloud.models.dataset_view import DatasetView as DatasetView
from hanzoai.cloud.models.datastore_volume import DatastoreVolume as DatastoreVolume
from hanzoai.cloud.models.day_count import DayCount as DayCount
from hanzoai.cloud.models.decide_body import DecideBody as DecideBody
from hanzoai.cloud.models.decision_in import DecisionIn as DecisionIn
from hanzoai.cloud.models.deck_out import DeckOut as DeckOut
from hanzoai.cloud.models.def_row import DefRow as DefRow
from hanzoai.cloud.models.definition import Definition as Definition
from hanzoai.cloud.models.defs_out import DefsOut as DefsOut
from hanzoai.cloud.models.deleted_out import DeletedOut as DeletedOut
from hanzoai.cloud.models.delivery_list import DeliveryList as DeliveryList
@@ -3134,11 +3242,15 @@ from hanzoai.cloud.models.error_list import ErrorList as ErrorList
from hanzoai.cloud.models.esign_complete_in import EsignCompleteIn as EsignCompleteIn
from hanzoai.cloud.models.esign_out import EsignOut as EsignOut
from hanzoai.cloud.models.evaluate_in import EvaluateIn as EvaluateIn
from hanzoai.cloud.models.evaluator_list import EvaluatorList as EvaluatorList
from hanzoai.cloud.models.evaluator_req import EvaluatorReq as EvaluatorReq
from hanzoai.cloud.models.evaluator_view import EvaluatorView as EvaluatorView
from hanzoai.cloud.models.event import Event as Event
from hanzoai.cloud.models.event_list import EventList as EventList
from hanzoai.cloud.models.event_view import EventView as EventView
from hanzoai.cloud.models.exception import Exception as Exception
from hanzoai.cloud.models.experiment import Experiment as Experiment
from hanzoai.cloud.models.experiment_list import ExperimentList as ExperimentList
from hanzoai.cloud.models.experiments_out import ExperimentsOut as ExperimentsOut
from hanzoai.cloud.models.extracted import Extracted as Extracted
from hanzoai.cloud.models.fetch_query import FetchQuery as FetchQuery
@@ -3165,6 +3277,8 @@ from hanzoai.cloud.models.finance_revenue import FinanceRevenue as FinanceRevenu
from hanzoai.cloud.models.finance_usage_view import FinanceUsageView as FinanceUsageView
from hanzoai.cloud.models.financial_package import FinancialPackage as FinancialPackage
from hanzoai.cloud.models.finding import Finding as Finding
from hanzoai.cloud.models.finding_list import FindingList as FindingList
from hanzoai.cloud.models.finding_view import FindingView as FindingView
from hanzoai.cloud.models.fingerprint_request import FingerprintRequest as FingerprintRequest
from hanzoai.cloud.models.fingerprint_response import FingerprintResponse as FingerprintResponse
from hanzoai.cloud.models.flags_out import FlagsOut as FlagsOut
@@ -3182,11 +3296,14 @@ from hanzoai.cloud.models.flow_status import FlowStatus as FlowStatus
from hanzoai.cloud.models.flow_trigger import FlowTrigger as FlowTrigger
from hanzoai.cloud.models.flow_update import FlowUpdate as FlowUpdate
from hanzoai.cloud.models.flow_version import FlowVersion as FlowVersion
from hanzoai.cloud.models.fn_list import FnList as FnList
from hanzoai.cloud.models.formation import Formation as Formation
from hanzoai.cloud.models.formation_view import FormationView as FormationView
from hanzoai.cloud.models.founder import Founder as Founder
from hanzoai.cloud.models.founders_in import FoundersIn as FoundersIn
from hanzoai.cloud.models.frame import Frame as Frame
from hanzoai.cloud.models.function_detail import FunctionDetail as FunctionDetail
from hanzoai.cloud.models.function_view import FunctionView as FunctionView
from hanzoai.cloud.models.funnel import Funnel as Funnel
from hanzoai.cloud.models.fwd_rule import FwdRule as FwdRule
from hanzoai.cloud.models.gl_row import GLRow as GLRow
@@ -3249,6 +3366,8 @@ from hanzoai.cloud.models.help_category_list import HelpCategoryList as HelpCate
from hanzoai.cloud.models.help_ticket_filed import HelpTicketFiled as HelpTicketFiled
from hanzoai.cloud.models.help_ticket_intake import HelpTicketIntake as HelpTicketIntake
from hanzoai.cloud.models.hit import Hit as Hit
from hanzoai.cloud.models.holding import Holding as Holding
from hanzoai.cloud.models.holdings import Holdings as Holdings
from hanzoai.cloud.models.host import Host as Host
from hanzoai.cloud.models.iam_account_item import IamAccountItem as IamAccountItem
from hanzoai.cloud.models.iam_address import IamAddress as IamAddress
@@ -3386,20 +3505,28 @@ from hanzoai.cloud.models.install import Install as Install
from hanzoai.cloud.models.install_req import InstallReq as InstallReq
from hanzoai.cloud.models.install_state import InstallState as InstallState
from hanzoai.cloud.models.integrity import Integrity as Integrity
from hanzoai.cloud.models.invocation_list import InvocationList as InvocationList
from hanzoai.cloud.models.invocation_view import InvocationView as InvocationView
from hanzoai.cloud.models.invoice_line_in import InvoiceLineIn as InvoiceLineIn
from hanzoai.cloud.models.invoice_out import InvoiceOut as InvoiceOut
from hanzoai.cloud.models.invoice_row import InvoiceRow as InvoiceRow
from hanzoai.cloud.models.invoices_out import InvoicesOut as InvoicesOut
from hanzoai.cloud.models.invoke_req import InvokeReq as InvokeReq
from hanzoai.cloud.models.issue_edit import IssueEdit as IssueEdit
from hanzoai.cloud.models.issue_request import IssueRequest as IssueRequest
from hanzoai.cloud.models.issue_response import IssueResponse as IssueResponse
from hanzoai.cloud.models.issue_view import IssueView as IssueView
from hanzoai.cloud.models.item_list import ItemList as ItemList
from hanzoai.cloud.models.item_req import ItemReq as ItemReq
from hanzoai.cloud.models.item_result import ItemResult as ItemResult
from hanzoai.cloud.models.item_view import ItemView as ItemView
from hanzoai.cloud.models.jwk import JWK as JWK
from hanzoai.cloud.models.job_cancel import JobCancel as JobCancel
from hanzoai.cloud.models.job_canceled import JobCanceled as JobCanceled
from hanzoai.cloud.models.job_list import JobList as JobList
from hanzoai.cloud.models.journal_entry import JournalEntry as JournalEntry
from hanzoai.cloud.models.journey_step import JourneyStep as JourneyStep
from hanzoai.cloud.models.judge_spec import JudgeSpec as JudgeSpec
from hanzoai.cloud.models.kb_authorize_out import KbAuthorizeOut as KbAuthorizeOut
from hanzoai.cloud.models.kb_connectors_out import KbConnectorsOut as KbConnectorsOut
from hanzoai.cloud.models.kb_sync_out import KbSyncOut as KbSyncOut
@@ -3418,8 +3545,11 @@ from hanzoai.cloud.models.kyc_start_out import KycStartOut as KycStartOut
from hanzoai.cloud.models.llm import LLM as LLM
from hanzoai.cloud.models.llm_overview import LLMOverview as LLMOverview
from hanzoai.cloud.models.last_event_view import LastEventView as LastEventView
from hanzoai.cloud.models.latency_stat import LatencyStat as LatencyStat
from hanzoai.cloud.models.lb_list import LbList as LbList
from hanzoai.cloud.models.lb_view import LbView as LbView
from hanzoai.cloud.models.leader_row import LeaderRow as LeaderRow
from hanzoai.cloud.models.leaderboard import Leaderboard as Leaderboard
from hanzoai.cloud.models.leaderboard_row import LeaderboardRow as LeaderboardRow
from hanzoai.cloud.models.leaderboard_view import LeaderboardView as LeaderboardView
from hanzoai.cloud.models.lease_in import LeaseIn as LeaseIn
@@ -3444,6 +3574,7 @@ from hanzoai.cloud.models.liveness import Liveness as Liveness
from hanzoai.cloud.models.load_balancer import LoadBalancer as LoadBalancer
from hanzoai.cloud.models.location import Location as Location
from hanzoai.cloud.models.log_body import LogBody as LogBody
from hanzoai.cloud.models.log_lines import LogLines as LogLines
from hanzoai.cloud.models.loss import Loss as Loss
from hanzoai.cloud.models.mcp_listing import MCPListing as MCPListing
from hanzoai.cloud.models.mcp_package import MCPPackage as MCPPackage
@@ -3484,6 +3615,7 @@ from hanzoai.cloud.models.ml_resource import MlResource as MlResource
from hanzoai.cloud.models.ml_resource_list import MlResourceList as MlResourceList
from hanzoai.cloud.models.model_field import ModelField as ModelField
from hanzoai.cloud.models.model_row import ModelRow as ModelRow
from hanzoai.cloud.models.model_stat import ModelStat as ModelStat
from hanzoai.cloud.models.module_info import ModuleInfo as ModuleInfo
from hanzoai.cloud.models.module_list import ModuleList as ModuleList
from hanzoai.cloud.models.module_state import ModuleState as ModuleState
@@ -4303,6 +4435,7 @@ from hanzoai.cloud.models.o11y_webex_config import O11yWebexConfig as O11yWebexC
from hanzoai.cloud.models.o11y_webhook_config import O11yWebhookConfig as O11yWebhookConfig
from hanzoai.cloud.models.o11y_wechat_config import O11yWechatConfig as O11yWechatConfig
from hanzoai.cloud.models.oauth_bundle_in import OauthBundleIn as OauthBundleIn
from hanzoai.cloud.models.offer import Offer as Offer
from hanzoai.cloud.models.onboard_req import OnboardReq as OnboardReq
from hanzoai.cloud.models.onboard_resp import OnboardResp as OnboardResp
from hanzoai.cloud.models.open_req import OpenReq as OpenReq
@@ -4313,12 +4446,14 @@ from hanzoai.cloud.models.opportunity import Opportunity as Opportunity
from hanzoai.cloud.models.optin_view import OptinView as OptinView
from hanzoai.cloud.models.oracle_view import OracleView as OracleView
from hanzoai.cloud.models.oracles_out import OraclesOut as OraclesOut
from hanzoai.cloud.models.order import Order as Order
from hanzoai.cloud.models.org_earning_view import OrgEarningView as OrgEarningView
from hanzoai.cloud.models.org_optin_req import OrgOptinReq as OrgOptinReq
from hanzoai.cloud.models.org_optin_view import OrgOptinView as OrgOptinView
from hanzoai.cloud.models.org_row import OrgRow as OrgRow
from hanzoai.cloud.models.org_view import OrgView as OrgView
from hanzoai.cloud.models.orgs_out import OrgsOut as OrgsOut
from hanzoai.cloud.models.outcome import Outcome as Outcome
from hanzoai.cloud.models.overlay import Overlay as Overlay
from hanzoai.cloud.models.overview import Overview as Overview
from hanzoai.cloud.models.overview_data import OverviewData as OverviewData
@@ -4333,6 +4468,7 @@ from hanzoai.cloud.models.pages_env_var import PagesEnvVar as PagesEnvVar
from hanzoai.cloud.models.pages_kv_binding import PagesKVBinding as PagesKVBinding
from hanzoai.cloud.models.pages_project_create import PagesProjectCreate as PagesProjectCreate
from hanzoai.cloud.models.pages_r2_binding import PagesR2Binding as PagesR2Binding
from hanzoai.cloud.models.pairing import Pairing as Pairing
from hanzoai.cloud.models.pairing_approved import PairingApproved as PairingApproved
from hanzoai.cloud.models.pairing_queue import PairingQueue as PairingQueue
from hanzoai.cloud.models.pairing_view import PairingView as PairingView
@@ -4372,6 +4508,7 @@ from hanzoai.cloud.models.plugin_mount import PluginMount as PluginMount
from hanzoai.cloud.models.plugin_mount_list import PluginMountList as PluginMountList
from hanzoai.cloud.models.pn_l import PnL as PnL
from hanzoai.cloud.models.pn_l_line import PnLLine as PnLLine
from hanzoai.cloud.models.point_view import PointView as PointView
from hanzoai.cloud.models.policy import Policy as Policy
from hanzoai.cloud.models.policy_data import PolicyData as PolicyData
from hanzoai.cloud.models.policy_out import PolicyOut as PolicyOut
@@ -4384,6 +4521,9 @@ from hanzoai.cloud.models.post_list import PostList as PostList
from hanzoai.cloud.models.post_v1_event_request import PostV1EventRequest as PostV1EventRequest
from hanzoai.cloud.models.posting import Posting as Posting
from hanzoai.cloud.models.prefs_view import PrefsView as PrefsView
from hanzoai.cloud.models.preset import Preset as Preset
from hanzoai.cloud.models.preset_accepted import PresetAccepted as PresetAccepted
from hanzoai.cloud.models.preset_list import PresetList as PresetList
from hanzoai.cloud.models.preview_req import PreviewReq as PreviewReq
from hanzoai.cloud.models.preview_view import PreviewView as PreviewView
from hanzoai.cloud.models.price import Price as Price
@@ -4468,12 +4608,14 @@ from hanzoai.cloud.models.query import Query as Query
from hanzoai.cloud.models.question import Question as Question
from hanzoai.cloud.models.questions_response import QuestionsResponse as QuestionsResponse
from hanzoai.cloud.models.quote import Quote as Quote
from hanzoai.cloud.models.quote_list import QuoteList as QuoteList
from hanzoai.cloud.models.raise_invoice_in import RaiseInvoiceIn as RaiseInvoiceIn
from hanzoai.cloud.models.ran import Ran as Ran
from hanzoai.cloud.models.range import Range as Range
from hanzoai.cloud.models.rate_card import RateCard as RateCard
from hanzoai.cloud.models.rate_set import RateSet as RateSet
from hanzoai.cloud.models.raw_out import RawOut as RawOut
from hanzoai.cloud.models.reachability import Reachability as Reachability
from hanzoai.cloud.models.read_out import ReadOut as ReadOut
from hanzoai.cloud.models.readiness import Readiness as Readiness
from hanzoai.cloud.models.reading_req import ReadingReq as ReadingReq
@@ -4508,6 +4650,8 @@ from hanzoai.cloud.models.register_counts import RegisterCounts as RegisterCount
from hanzoai.cloud.models.register_key_req import RegisterKeyReq as RegisterKeyReq
from hanzoai.cloud.models.register_page import RegisterPage as RegisterPage
from hanzoai.cloud.models.register_req import RegisterReq as RegisterReq
from hanzoai.cloud.models.register_result import RegisterResult as RegisterResult
from hanzoai.cloud.models.registrant import Registrant as Registrant
from hanzoai.cloud.models.registration import Registration as Registration
from hanzoai.cloud.models.registration_view import RegistrationView as RegistrationView
from hanzoai.cloud.models.registry_image import RegistryImage as RegistryImage
@@ -4527,6 +4671,8 @@ from hanzoai.cloud.models.release_row import ReleaseRow as ReleaseRow
from hanzoai.cloud.models.release_state import ReleaseState as ReleaseState
from hanzoai.cloud.models.reload_in import ReloadIn as ReloadIn
from hanzoai.cloud.models.remittance import Remittance as Remittance
from hanzoai.cloud.models.renew_req import RenewReq as RenewReq
from hanzoai.cloud.models.renew_result import RenewResult as RenewResult
from hanzoai.cloud.models.replace_kit_in import ReplaceKitIn as ReplaceKitIn
from hanzoai.cloud.models.replay_body import ReplayBody as ReplayBody
from hanzoai.cloud.models.repo_list import RepoList as RepoList
@@ -4622,15 +4768,22 @@ from hanzoai.cloud.models.routed_usage import RoutedUsage as RoutedUsage
from hanzoai.cloud.models.router_list import RouterList as RouterList
from hanzoai.cloud.models.router_view import RouterView as RouterView
from hanzoai.cloud.models.rule import Rule as Rule
from hanzoai.cloud.models.rule_list import RuleList as RuleList
from hanzoai.cloud.models.rule_view import RuleView as RuleView
from hanzoai.cloud.models.rules_out import RulesOut as RulesOut
from hanzoai.cloud.models.ruleset import Ruleset as Ruleset
from hanzoai.cloud.models.run_in import RunIn as RunIn
from hanzoai.cloud.models.run_list import RunList as RunList
from hanzoai.cloud.models.run_page import RunPage as RunPage
from hanzoai.cloud.models.run_record import RunRecord as RunRecord
from hanzoai.cloud.models.run_req import RunReq as RunReq
from hanzoai.cloud.models.run_request import RunRequest as RunRequest
from hanzoai.cloud.models.run_resp import RunResp as RunResp
from hanzoai.cloud.models.run_summary import RunSummary as RunSummary
from hanzoai.cloud.models.run_view import RunView as RunView
from hanzoai.cloud.models.runner_build_req import RunnerBuildReq as RunnerBuildReq
from hanzoai.cloud.models.runner_build_resp import RunnerBuildResp as RunnerBuildResp
from hanzoai.cloud.models.runs import Runs as Runs
from hanzoai.cloud.models.saa_s_category import SaaSCategory as SaaSCategory
from hanzoai.cloud.models.saa_s_customer import SaaSCustomer as SaaSCustomer
from hanzoai.cloud.models.saa_s_event import SaaSEvent as SaaSEvent
@@ -4652,9 +4805,19 @@ from hanzoai.cloud.models.sbom_health import SbomHealth as SbomHealth
from hanzoai.cloud.models.sbom_ingest import SbomIngest as SbomIngest
from hanzoai.cloud.models.sbom_ingested import SbomIngested as SbomIngested
from hanzoai.cloud.models.scale_in import ScaleIn as ScaleIn
from hanzoai.cloud.models.scan import Scan as Scan
from hanzoai.cloud.models.scan_detail import ScanDetail as ScanDetail
from hanzoai.cloud.models.scan_draft import ScanDraft as ScanDraft
from hanzoai.cloud.models.scan_list import ScanList as ScanList
from hanzoai.cloud.models.scan_view import ScanView as ScanView
from hanzoai.cloud.models.schedule_input import ScheduleInput as ScheduleInput
from hanzoai.cloud.models.scope import Scope as Scope
from hanzoai.cloud.models.score_config_list import ScoreConfigList as ScoreConfigList
from hanzoai.cloud.models.score_config_req import ScoreConfigReq as ScoreConfigReq
from hanzoai.cloud.models.score_config_view import ScoreConfigView as ScoreConfigView
from hanzoai.cloud.models.score_list import ScoreList as ScoreList
from hanzoai.cloud.models.score_req import ScoreReq as ScoreReq
from hanzoai.cloud.models.score_view import ScoreView as ScoreView
from hanzoai.cloud.models.screen_result import ScreenResult as ScreenResult
from hanzoai.cloud.models.search_in import SearchIn as SearchIn
from hanzoai.cloud.models.search_index import SearchIndex as SearchIndex
@@ -4662,6 +4825,8 @@ from hanzoai.cloud.models.search_index_list import SearchIndexList as SearchInde
from hanzoai.cloud.models.search_out import SearchOut as SearchOut
from hanzoai.cloud.models.search_results import SearchResults as SearchResults
from hanzoai.cloud.models.search_stats import SearchStats as SearchStats
from hanzoai.cloud.models.secret_list import SecretList as SecretList
from hanzoai.cloud.models.secret_view import SecretView as SecretView
from hanzoai.cloud.models.section import Section as Section
from hanzoai.cloud.models.seed_data import SeedData as SeedData
from hanzoai.cloud.models.seed_out import SeedOut as SeedOut
@@ -4730,6 +4895,7 @@ from hanzoai.cloud.models.stats_out import StatsOut as StatsOut
from hanzoai.cloud.models.stats_sessions import StatsSessions as StatsSessions
from hanzoai.cloud.models.stats_user import StatsUser as StatsUser
from hanzoai.cloud.models.status import Status as Status
from hanzoai.cloud.models.status_breakdown import StatusBreakdown as StatusBreakdown
from hanzoai.cloud.models.status_counts import StatusCounts as StatusCounts
from hanzoai.cloud.models.status_view import StatusView as StatusView
from hanzoai.cloud.models.step import Step as Step
@@ -4758,6 +4924,7 @@ from hanzoai.cloud.models.subject import Subject as Subject
from hanzoai.cloud.models.subject_list import SubjectList as SubjectList
from hanzoai.cloud.models.subject_req import SubjectReq as SubjectReq
from hanzoai.cloud.models.subject_summary import SubjectSummary as SubjectSummary
from hanzoai.cloud.models.submit_req import SubmitReq as SubmitReq
from hanzoai.cloud.models.subscribe_req import SubscribeReq as SubscribeReq
from hanzoai.cloud.models.subscription_list import SubscriptionList as SubscriptionList
from hanzoai.cloud.models.subscription_row import SubscriptionRow as SubscriptionRow
@@ -4769,6 +4936,7 @@ from hanzoai.cloud.models.subsystem_totals import SubsystemTotals as SubsystemTo
from hanzoai.cloud.models.subsystems_out import SubsystemsOut as SubsystemsOut
from hanzoai.cloud.models.suggest_response import SuggestResponse as SuggestResponse
from hanzoai.cloud.models.suggestion import Suggestion as Suggestion
from hanzoai.cloud.models.suite import Suite as Suite
from hanzoai.cloud.models.summary import Summary as Summary
from hanzoai.cloud.models.summary_resp import SummaryResp as SummaryResp
from hanzoai.cloud.models.summary_view import SummaryView as SummaryView
@@ -4812,11 +4980,14 @@ from hanzoai.cloud.models.top_models import TopModels as TopModels
from hanzoai.cloud.models.top_products import TopProducts as TopProducts
from hanzoai.cloud.models.total_view import TotalView as TotalView
from hanzoai.cloud.models.totals import Totals as Totals
from hanzoai.cloud.models.trace_list import TraceList as TraceList
from hanzoai.cloud.models.trace_view import TraceView as TraceView
from hanzoai.cloud.models.tracker_project import TrackerProject as TrackerProject
from hanzoai.cloud.models.traffic_caller import TrafficCaller as TrafficCaller
from hanzoai.cloud.models.traffic_view import TrafficView as TrafficView
from hanzoai.cloud.models.trail_page import TrailPage as TrailPage
from hanzoai.cloud.models.transactions_out import TransactionsOut as TransactionsOut
from hanzoai.cloud.models.transfer_req import TransferReq as TransferReq
from hanzoai.cloud.models.transition_in import TransitionIn as TransitionIn
from hanzoai.cloud.models.transition_result import TransitionResult as TransitionResult
from hanzoai.cloud.models.treasury_report import TreasuryReport as TreasuryReport
@@ -4824,8 +4995,11 @@ from hanzoai.cloud.models.tree_entry import TreeEntry as TreeEntry
from hanzoai.cloud.models.tree_entry_json import TreeEntryJSON as TreeEntryJSON
from hanzoai.cloud.models.tree_json import TreeJSON as TreeJSON
from hanzoai.cloud.models.tree_node import TreeNode as TreeNode
from hanzoai.cloud.models.trial import Trial as Trial
from hanzoai.cloud.models.trial_balance import TrialBalance as TrialBalance
from hanzoai.cloud.models.trial_balance_row import TrialBalanceRow as TrialBalanceRow
from hanzoai.cloud.models.trigger_list import TriggerList as TriggerList
from hanzoai.cloud.models.trigger_view import TriggerView as TriggerView
from hanzoai.cloud.models.txn import Txn as Txn
from hanzoai.cloud.models.utm import UTM as UTM
from hanzoai.cloud.models.unlinked_view import UnlinkedView as UnlinkedView
+6 -6
View File
@@ -5703,9 +5703,9 @@ class AgentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Runs one of the caller org's agents and gets the recorded run back.
"""Run one of your org's agents and get the recorded run back.
Runs one of the caller org's agents and gets the recorded run back. It composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
Composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
:param ref: (required)
:type ref: str
@@ -5769,9 +5769,9 @@ class AgentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Runs one of the caller org's agents and gets the recorded run back.
"""Run one of your org's agents and get the recorded run back.
Runs one of the caller org's agents and gets the recorded run back. It composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
Composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
:param ref: (required)
:type ref: str
@@ -5835,9 +5835,9 @@ class AgentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Runs one of the caller org's agents and gets the recorded run back.
"""Run one of your org's agents and get the recorded run back.
Runs one of the caller org's agents and gets the recorded run back. It composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
Composes the agent's stored instructions with the caller's `input`, executes one real chat completion through the same in-process AI client the rest of the console uses, and answers with the run that was recorded: its id, status, model, output, duration and error. Every run this returns reflects an execution that actually happened — a model failure is recorded and reported, never hidden and never fabricated. A transient upstream failure (429, 5xx, empty choices) is retried up to three times with jittered backoff, and a configured failover model is tried before the run is called an error. `ref` is the agent's public `agent_…` id or its org-unique name; either resolves the same agent, and it must belong to the caller's org, so an agent in another tenant is a 404 exactly like one that does not exist. A validated principal is required and the check is made twice on purpose: this route MOVES MONEY, so the debit's principal requirement is asserted where the money moves rather than inherited from the tenant lookup. The org's balance is authorized BEFORE any inference, so an unfunded tenant gets 402 and no free compute, and a billing plane that cannot answer gets 503 rather than a free run. The flat per-run fee is an operator knob; setting it to zero makes runs free and removes the balance gate with them. Only a SUCCESSFUL run is billed, attributed to the model actually used — a failover run bills the model it fell over to, not the one it started on. A deployment with no inference wired answers 503 before any of this. THE RULE A READER GETS WRONG: a failed run is a 502 whose body is the RUN, not an error envelope. The execution happened, the run was persisted to this agent's history, and its `error` field is the product — so a client that treats every non-2xx as an opaque failure throws away the only account of what went wrong. Each run also opens a root session in the live session registry, best-effort: a bookkeeping failure there never fails the run, because the run and its billing already happened.
:param ref: (required)
:type ref: str
File diff suppressed because it is too large Load Diff
+243 -48
View File
@@ -16,6 +16,17 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from pydantic import Field, StrictStr
from typing import Optional
from typing_extensions import Annotated
from hanzoai.cloud.models.admission import Admission
from hanzoai.cloud.models.benchmark_catalog import BenchmarkCatalog
from hanzoai.cloud.models.leaderboard import Leaderboard
from hanzoai.cloud.models.pairing import Pairing
from hanzoai.cloud.models.preset import Preset
from hanzoai.cloud.models.preset_accepted import PresetAccepted
from hanzoai.cloud.models.preset_list import PresetList
from hanzoai.cloud.models.suite import Suite
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -50,10 +61,10 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The canonical public benchmarks this arena runs
) -> BenchmarkCatalog:
"""Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending.
Lists the top-14 set every major provider reports — the id, title, axis, item count and upstream source of each — with `native` marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from `?benchmark=`. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from ?benchmark=. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -85,6 +96,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "BenchmarkCatalog",
}
response_data = self.api_client.call_api(
*_param,
@@ -112,10 +124,10 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The canonical public benchmarks this arena runs
) -> ApiResponse[BenchmarkCatalog]:
"""Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending.
Lists the top-14 set every major provider reports — the id, title, axis, item count and upstream source of each — with `native` marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from `?benchmark=`. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from ?benchmark=. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -147,6 +159,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "BenchmarkCatalog",
}
response_data = self.api_client.call_api(
*_param,
@@ -175,9 +188,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The canonical public benchmarks this arena runs
"""Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending.
Lists the top-14 set every major provider reports — the id, title, axis, item count and upstream source of each — with `native` marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from `?benchmark=`. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending. These ids are the vocabulary the rest of the surface takes: a run names them, and the leaderboard and compare read them from ?benchmark=. The catalog is deployment-wide and identical for every caller — there is no tenant in it.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -209,6 +222,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "BenchmarkCatalog",
}
response_data = self.api_client.call_api(
*_param,
@@ -246,6 +260,13 @@ class BenchmarkApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -273,6 +294,9 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_compare(
self,
a: Annotated[StrictStr, Field(description="A is the first model id. It is required.")],
b: Annotated[StrictStr, Field(description="B is the second model id. It is required.")],
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -285,11 +309,17 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The only sound head-to-head: two models on the items they BOTH answered
) -> Pairing:
"""Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p.
Scores model `?a=` against model `?b=` on one benchmark, paired over the items both arms actually completed. It answers the common-item count, each arm's correct count, the rescues each way (items one got right and the other did not), the net, and a two-sided exact McNemar p over the discordant pairs. Pairing is what makes it valid. Reading two leaderboard rows against each other compares one model's coverage with another's, so an arm that only ran the easy subset looks better than it is; this endpoint refuses that by construction — items only one arm attempted are dropped before anything is counted. A p of 1 with zero discordant pairs means the arms never disagreed, not that they are identical. Both `a` and `b` are required (400 without them); the benchmark defaults to GPQA-Diamond.
Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p. Pairing is what prevents the subset artifact — comparing one model's easy subset against another's full run — so n_common, not either arm's own coverage, is the number to read this by. Both a and b are required. The benchmark defaults to gpqa_diamond.
:param a: A is the first model id. It is required. (required)
:type a: str
:param b: B is the second model id. It is required. (required)
:type b: str
:param benchmark: Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -313,6 +343,9 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_compare_serialize(
a=a,
b=b,
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -320,6 +353,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Pairing",
}
response_data = self.api_client.call_api(
*_param,
@@ -335,6 +369,9 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_compare_with_http_info(
self,
a: Annotated[StrictStr, Field(description="A is the first model id. It is required.")],
b: Annotated[StrictStr, Field(description="B is the second model id. It is required.")],
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -347,11 +384,17 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The only sound head-to-head: two models on the items they BOTH answered
) -> ApiResponse[Pairing]:
"""Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p.
Scores model `?a=` against model `?b=` on one benchmark, paired over the items both arms actually completed. It answers the common-item count, each arm's correct count, the rescues each way (items one got right and the other did not), the net, and a two-sided exact McNemar p over the discordant pairs. Pairing is what makes it valid. Reading two leaderboard rows against each other compares one model's coverage with another's, so an arm that only ran the easy subset looks better than it is; this endpoint refuses that by construction — items only one arm attempted are dropped before anything is counted. A p of 1 with zero discordant pairs means the arms never disagreed, not that they are identical. Both `a` and `b` are required (400 without them); the benchmark defaults to GPQA-Diamond.
Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p. Pairing is what prevents the subset artifact — comparing one model's easy subset against another's full run — so n_common, not either arm's own coverage, is the number to read this by. Both a and b are required. The benchmark defaults to gpqa_diamond.
:param a: A is the first model id. It is required. (required)
:type a: str
:param b: B is the second model id. It is required. (required)
:type b: str
:param benchmark: Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -375,6 +418,9 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_compare_serialize(
a=a,
b=b,
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -382,6 +428,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Pairing",
}
response_data = self.api_client.call_api(
*_param,
@@ -397,6 +444,9 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_compare_without_preload_content(
self,
a: Annotated[StrictStr, Field(description="A is the first model id. It is required.")],
b: Annotated[StrictStr, Field(description="B is the second model id. It is required.")],
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -410,10 +460,16 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The only sound head-to-head: two models on the items they BOTH answered
"""Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p.
Scores model `?a=` against model `?b=` on one benchmark, paired over the items both arms actually completed. It answers the common-item count, each arm's correct count, the rescues each way (items one got right and the other did not), the net, and a two-sided exact McNemar p over the discordant pairs. Pairing is what makes it valid. Reading two leaderboard rows against each other compares one model's coverage with another's, so an arm that only ran the easy subset looks better than it is; this endpoint refuses that by construction — items only one arm attempted are dropped before anything is counted. A p of 1 with zero discordant pairs means the arms never disagreed, not that they are identical. Both `a` and `b` are required (400 without them); the benchmark defaults to GPQA-Diamond.
Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p. Pairing is what prevents the subset artifact — comparing one model's easy subset against another's full run — so n_common, not either arm's own coverage, is the number to read this by. Both a and b are required. The benchmark defaults to gpqa_diamond.
:param a: A is the first model id. It is required. (required)
:type a: str
:param b: B is the second model id. It is required. (required)
:type b: str
:param benchmark: Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -437,6 +493,9 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_compare_serialize(
a=a,
b=b,
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -444,6 +503,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Pairing",
}
response_data = self.api_client.call_api(
*_param,
@@ -454,6 +514,9 @@ class BenchmarkApi:
def _get_v1_benchmark_compare_serialize(
self,
a,
b,
benchmark,
_request_auth,
_content_type,
_headers,
@@ -476,11 +539,30 @@ class BenchmarkApi:
# process the path parameters
# process the query parameters
if benchmark is not None:
_query_params.append(('benchmark', benchmark))
if a is not None:
_query_params.append(('a', a))
if b is not None:
_query_params.append(('b', b))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -508,6 +590,7 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_leaderboard(
self,
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to read, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -520,11 +603,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Per-model scores for one benchmark: what we measured beside what the vendor claims
) -> Leaderboard:
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named by `?benchmark=` (GPQA-Diamond when omitted), carrying `measured` — the accuracy our own harness got — beside `published`, the provider's own claim, and `gap`, the claim minus the measurement. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows `published` null, a model with only a claim shows `measured` null, and `gap` exists only where both do. Each row also carries `n`, the number of items actually attempted — coverage differs between models, so two `measured` values at different `n` are not comparable and the compare endpoint is what settles that properly. Rows are ordered by measured accuracy, unmeasured last. Scores are deployment-wide evidence, not per-tenant.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -548,6 +633,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_leaderboard_serialize(
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -555,6 +641,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Leaderboard",
}
response_data = self.api_client.call_api(
*_param,
@@ -570,6 +657,7 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_leaderboard_with_http_info(
self,
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to read, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -582,11 +670,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Per-model scores for one benchmark: what we measured beside what the vendor claims
) -> ApiResponse[Leaderboard]:
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named by `?benchmark=` (GPQA-Diamond when omitted), carrying `measured` — the accuracy our own harness got — beside `published`, the provider's own claim, and `gap`, the claim minus the measurement. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows `published` null, a model with only a claim shows `measured` null, and `gap` exists only where both do. Each row also carries `n`, the number of items actually attempted — coverage differs between models, so two `measured` values at different `n` are not comparable and the compare endpoint is what settles that properly. Rows are ordered by measured accuracy, unmeasured last. Scores are deployment-wide evidence, not per-tenant.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -610,6 +700,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_leaderboard_serialize(
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -617,6 +708,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Leaderboard",
}
response_data = self.api_client.call_api(
*_param,
@@ -632,6 +724,7 @@ class BenchmarkApi:
@validate_call
def get_v1_benchmark_leaderboard_without_preload_content(
self,
benchmark: Annotated[Optional[StrictStr], Field(description="Benchmark is the catalog id to read, defaulting to gpqa_diamond.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -645,10 +738,12 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Per-model scores for one benchmark: what we measured beside what the vendor claims
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named by `?benchmark=` (GPQA-Diamond when omitted), carrying `measured` — the accuracy our own harness got — beside `published`, the provider's own claim, and `gap`, the claim minus the measurement. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows `published` null, a model with only a claim shows `measured` null, and `gap` exists only where both do. Each row also carries `n`, the number of items actually attempted — coverage differs between models, so two `measured` values at different `n` are not comparable and the compare endpoint is what settles that properly. Rows are ordered by measured accuracy, unmeasured last. Scores are deployment-wide evidence, not per-tenant.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -672,6 +767,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._get_v1_benchmark_leaderboard_serialize(
benchmark=benchmark,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -679,6 +775,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Leaderboard",
}
response_data = self.api_client.call_api(
*_param,
@@ -689,6 +786,7 @@ class BenchmarkApi:
def _get_v1_benchmark_leaderboard_serialize(
self,
benchmark,
_request_auth,
_content_type,
_headers,
@@ -711,11 +809,22 @@ class BenchmarkApi:
# process the path parameters
# process the query parameters
if benchmark is not None:
_query_params.append(('benchmark', benchmark))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -755,10 +864,10 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The router blends available to compose from
) -> PresetList:
"""Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>.
Lists preset router blends — a named set of model `arms`, the `rank` they escalate through and the `panel` width that bounds fan-out — each served by the model layer as `enso-<name>`. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -790,6 +899,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PresetList",
}
response_data = self.api_client.call_api(
*_param,
@@ -817,10 +927,10 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The router blends available to compose from
) -> ApiResponse[PresetList]:
"""Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>.
Lists preset router blends — a named set of model `arms`, the `rank` they escalate through and the `panel` width that bounds fan-out — each served by the model layer as `enso-<name>`. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -852,6 +962,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PresetList",
}
response_data = self.api_client.call_api(
*_param,
@@ -880,9 +991,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The router blends available to compose from
"""Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>.
Lists preset router blends — a named set of model `arms`, the `rank` they escalate through and the `panel` width that bounds fan-out — each served by the model layer as `enso-<name>`. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>. Today it answers exactly one row, the reference blend: a worked example written in models we name, published as an example of the FORM. It is deliberately not the composition of a Hanzo-served tier — the tier name exists to abstract that — so fork it and swap arms by what the leaderboard measures on your own tasks rather than reading it as a disclosure.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -914,6 +1025,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PresetList",
}
response_data = self.api_client.call_api(
*_param,
@@ -951,6 +1063,13 @@ class BenchmarkApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -978,6 +1097,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_presets(
self,
preset: Preset,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -990,11 +1110,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Compose a router blend from the arms that win your tasks
) -> PresetAccepted:
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a blend — `name`, its `arms`, the `rank` they escalate through and the `panel` fan-out width — and answers 202 with the preset and the `enso-<name>` it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted `rank` becomes the arms in declared order and a `panel` below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param preset: (required)
:type preset: Preset
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1018,6 +1140,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_presets_serialize(
preset=preset,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1025,6 +1148,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PresetAccepted",
}
response_data = self.api_client.call_api(
*_param,
@@ -1040,6 +1164,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_presets_with_http_info(
self,
preset: Preset,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1052,11 +1177,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Compose a router blend from the arms that win your tasks
) -> ApiResponse[PresetAccepted]:
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a blend — `name`, its `arms`, the `rank` they escalate through and the `panel` fan-out width — and answers 202 with the preset and the `enso-<name>` it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted `rank` becomes the arms in declared order and a `panel` below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param preset: (required)
:type preset: Preset
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1080,6 +1207,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_presets_serialize(
preset=preset,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1087,6 +1215,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PresetAccepted",
}
response_data = self.api_client.call_api(
*_param,
@@ -1102,6 +1231,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_presets_without_preload_content(
self,
preset: Preset,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1115,10 +1245,12 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Compose a router blend from the arms that win your tasks
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a blend — `name`, its `arms`, the `rank` they escalate through and the `panel` fan-out width — and answers 202 with the preset and the `enso-<name>` it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted `rank` becomes the arms in declared order and a `panel` below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param preset: (required)
:type preset: Preset
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1142,6 +1274,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_presets_serialize(
preset=preset,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1149,6 +1282,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PresetAccepted",
}
response_data = self.api_client.call_api(
*_param,
@@ -1159,6 +1293,7 @@ class BenchmarkApi:
def _post_v1_benchmark_presets_serialize(
self,
preset,
_request_auth,
_content_type,
_headers,
@@ -1184,9 +1319,31 @@ class BenchmarkApi:
# process the header parameters
# process the form parameters
# process the body parameter
if preset is not None:
_body_params = preset
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
@@ -1213,6 +1370,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_runs(
self,
suite: Suite,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1225,11 +1383,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Queue a benchmark run against a catalog model or your own endpoint
) -> Admission:
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits a request to run one or more catalog benchmarks against `model` — a catalog model id — or against `endpoint`, an endpoint of your own on the chat-completions wire, and answers 202 with what was queued. It ADMITS AND QUEUES ONLY: nothing is executed on this call and no scores come back with it. Results land in the leaderboard as the worker completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither `model` nor `endpoint` is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param suite: (required)
:type suite: Suite
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1253,6 +1413,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_runs_serialize(
suite=suite,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1260,6 +1421,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "Admission",
}
response_data = self.api_client.call_api(
*_param,
@@ -1275,6 +1437,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_runs_with_http_info(
self,
suite: Suite,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1287,11 +1450,13 @@ class BenchmarkApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Queue a benchmark run against a catalog model or your own endpoint
) -> ApiResponse[Admission]:
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits a request to run one or more catalog benchmarks against `model` — a catalog model id — or against `endpoint`, an endpoint of your own on the chat-completions wire, and answers 202 with what was queued. It ADMITS AND QUEUES ONLY: nothing is executed on this call and no scores come back with it. Results land in the leaderboard as the worker completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither `model` nor `endpoint` is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param suite: (required)
:type suite: Suite
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1315,6 +1480,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_runs_serialize(
suite=suite,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1322,6 +1488,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "Admission",
}
response_data = self.api_client.call_api(
*_param,
@@ -1337,6 +1504,7 @@ class BenchmarkApi:
@validate_call
def post_v1_benchmark_runs_without_preload_content(
self,
suite: Suite,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1350,10 +1518,12 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Queue a benchmark run against a catalog model or your own endpoint
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits a request to run one or more catalog benchmarks against `model` — a catalog model id — or against `endpoint`, an endpoint of your own on the chat-completions wire, and answers 202 with what was queued. It ADMITS AND QUEUES ONLY: nothing is executed on this call and no scores come back with it. Results land in the leaderboard as the worker completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither `model` nor `endpoint` is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param suite: (required)
:type suite: Suite
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1377,6 +1547,7 @@ class BenchmarkApi:
""" # noqa: E501
_param = self._post_v1_benchmark_runs_serialize(
suite=suite,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1384,6 +1555,7 @@ class BenchmarkApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "Admission",
}
response_data = self.api_client.call_api(
*_param,
@@ -1394,6 +1566,7 @@ class BenchmarkApi:
def _post_v1_benchmark_runs_serialize(
self,
suite,
_request_auth,
_content_type,
_headers,
@@ -1419,9 +1592,31 @@ class BenchmarkApi:
# process the header parameters
# process the form parameters
# process the body parameter
if suite is not None:
_body_params = suite
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
+6 -6
View File
@@ -1093,9 +1093,9 @@ class ChannelsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Sends a message from the caller org's bot to one chat room.
"""Send a message from your org's bot to one chat room
Sends a message from the caller org's bot to one chat room. It delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
Delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
:param channel: (required)
:type channel: str
@@ -1159,9 +1159,9 @@ class ChannelsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Sends a message from the caller org's bot to one chat room.
"""Send a message from your org's bot to one chat room
Sends a message from the caller org's bot to one chat room. It delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
Delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
:param channel: (required)
:type channel: str
@@ -1225,9 +1225,9 @@ class ChannelsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Sends a message from the caller org's bot to one chat room.
"""Send a message from your org's bot to one chat room
Sends a message from the caller org's bot to one chat room. It delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
Delivers text, attachments and actions to one room on a connected chat transport — discord, slack, teams or telegram — and answers that transport's own receipt, the `messageId` it assigned and the Unix second it landed. An unknown channel is a 404. The body is the envelope's NARROW outbound projection: `room`, `text`, `attachments`, `actions`, `replyTo` and `idempotency`, and nothing else. Identity is not a field — the channel is the path segment and the sender is the caller's validated org — so a body carrying `sender`, `account` or `channel` is refused with 400 rather than having it silently dropped. `room.id` is required, and so is something to say: text, or at least one attachment. Requires a validated principal; 403 without one. The room must already belong to the caller's org — each transport verifies the binding itself, so a room this org has not bound is 403 and a room whose route the bot has never learned is 409, meaning someone has to message the bot there first. A transport that fails answers 502 carrying status and shape only, never a token. Sending is at-most-once only if you ask for it: pass an `idempotency` string and a replay answers 200 with the PRIOR receipt instead of sending twice, while a send that fails releases the key so the caller can re-attempt. Bodies over 1 MiB are refused. All four transports currently render text only, so attachments and actions are flattened deterministically to one line each after the text rather than dropped.
:param channel: (required)
:type channel: str
+6 -6
View File
@@ -7432,9 +7432,9 @@ class CommerceApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The public org configuration a checkout page boots from
"""The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept.
Answers the branding, identity issuer and client id, identity-verification config, enabled payment providers, return-URL allowlist and public payment application config for the org the request HOST resolves to. It is genuinely public and unauthenticated — a checkout page calls it before anyone has signed in — and it carries the same public payment config the authenticated config read does, so the card iframe can never initialize against a different application than the one that will be charged. The org comes from the hostname and from nothing a caller can pass, so asking about someone else's is not expressible. Only ENABLED providers are listed and no credential path is ever projected. An unresolvable host answers a constant 404 that does not echo the host, so the endpoint cannot be used to enumerate orgs; a successful answer is cacheable for a minute.
The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept. Unauthenticated and cached briefly, because a storefront asks for it before anyone has signed in. An unknown host is a plain 404 that does not echo the host back, so it cannot be used to discover which orgs exist.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -7494,9 +7494,9 @@ class CommerceApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The public org configuration a checkout page boots from
"""The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept.
Answers the branding, identity issuer and client id, identity-verification config, enabled payment providers, return-URL allowlist and public payment application config for the org the request HOST resolves to. It is genuinely public and unauthenticated — a checkout page calls it before anyone has signed in — and it carries the same public payment config the authenticated config read does, so the card iframe can never initialize against a different application than the one that will be charged. The org comes from the hostname and from nothing a caller can pass, so asking about someone else's is not expressible. Only ENABLED providers are listed and no credential path is ever projected. An unresolvable host answers a constant 404 that does not echo the host, so the endpoint cannot be used to enumerate orgs; a successful answer is cacheable for a minute.
The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept. Unauthenticated and cached briefly, because a storefront asks for it before anyone has signed in. An unknown host is a plain 404 that does not echo the host back, so it cannot be used to discover which orgs exist.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -7556,9 +7556,9 @@ class CommerceApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The public org configuration a checkout page boots from
"""The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept.
Answers the branding, identity issuer and client id, identity-verification config, enabled payment providers, return-URL allowlist and public payment application config for the org the request HOST resolves to. It is genuinely public and unauthenticated — a checkout page calls it before anyone has signed in — and it carries the same public payment config the authenticated config read does, so the card iframe can never initialize against a different application than the one that will be charged. The org comes from the hostname and from nothing a caller can pass, so asking about someone else's is not expressible. Only ENABLED providers are listed and no credential path is ever projected. An unresolvable host answers a constant 404 that does not echo the host, so the endpoint cannot be used to enumerate orgs; a successful answer is cacheable for a minute.
The public configuration for the org that owns this hostname: its branding, its checkout options and the return URLs it will accept. Unauthenticated and cached briefly, because a storefront asks for it before anyone has signed in. An unknown host is a plain 404 that does not echo the host back, so it cannot be used to discover which orgs exist.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
File diff suppressed because it is too large Load Diff
+275 -56
View File
@@ -16,6 +16,17 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from pydantic import Field, StrictStr
from typing import Optional
from typing_extensions import Annotated
from hanzoai.cloud.models.holdings import Holdings
from hanzoai.cloud.models.order import Order
from hanzoai.cloud.models.quote_list import QuoteList
from hanzoai.cloud.models.reachability import Reachability
from hanzoai.cloud.models.register_result import RegisterResult
from hanzoai.cloud.models.renew_req import RenewReq
from hanzoai.cloud.models.renew_result import RenewResult
from hanzoai.cloud.models.transfer_req import TransferReq
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -38,6 +49,7 @@ class DomainApi:
@validate_call
def get_v1_domain_availability(
self,
domain: Annotated[StrictStr, Field(description="Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -50,11 +62,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Availability and price for names you already have in mind
) -> QuoteList:
"""Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. Pass `domain` with one name or several comma-separated to check them in one call; names are lowercased. An empty `domain` is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. It requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
:param domain: Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required. (required)
:type domain: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -78,6 +92,7 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_availability_serialize(
domain=domain,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -85,6 +100,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -100,6 +116,7 @@ class DomainApi:
@validate_call
def get_v1_domain_availability_with_http_info(
self,
domain: Annotated[StrictStr, Field(description="Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -112,11 +129,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Availability and price for names you already have in mind
) -> ApiResponse[QuoteList]:
"""Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. Pass `domain` with one name or several comma-separated to check them in one call; names are lowercased. An empty `domain` is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. It requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
:param domain: Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required. (required)
:type domain: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -140,6 +159,7 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_availability_serialize(
domain=domain,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -147,6 +167,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -162,6 +183,7 @@ class DomainApi:
@validate_call
def get_v1_domain_availability_without_preload_content(
self,
domain: Annotated[StrictStr, Field(description="Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -175,10 +197,12 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Availability and price for names you already have in mind
"""Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. Pass `domain` with one name or several comma-separated to check them in one call; names are lowercased. An empty `domain` is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents. It requires a validated principal; 403 without one. Nothing is charged and nothing is held. A deployment with no registrar credentials answers 503.
:param domain: Domain is one name, or several comma-separated, to check in one call. Names are lowercased. It is required. (required)
:type domain: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -202,6 +226,7 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_availability_serialize(
domain=domain,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -209,6 +234,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -219,6 +245,7 @@ class DomainApi:
def _get_v1_domain_availability_serialize(
self,
domain,
_request_auth,
_content_type,
_headers,
@@ -241,11 +268,22 @@ class DomainApi:
# process the path parameters
# process the query parameters
if domain is not None:
_query_params.append(('domain', domain))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -285,10 +323,10 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The domains your org has bought here
) -> Holdings:
"""Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at.
Lists the caller org's domains, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -320,6 +358,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Holdings",
}
response_data = self.api_client.call_api(
*_param,
@@ -347,10 +386,10 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The domains your org has bought here
) -> ApiResponse[Holdings]:
"""Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at.
Lists the caller org's domains, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -382,6 +421,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Holdings",
}
response_data = self.api_client.call_api(
*_param,
@@ -410,9 +450,9 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The domains your org has bought here
"""Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at.
Lists the caller org's domains, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at. Scoped to the validated principal's org — 403 without one, and there is no parameter that reaches another org's holdings. This is the deployment's OWN ownership record, not a query to the registrar: it lists what was bought THROUGH this surface, so a domain the org holds elsewhere is not here. The default store is in-process, so a deployment that has not swapped in a durable store answers from what this process registered.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -444,6 +484,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Holdings",
}
response_data = self.api_client.call_api(
*_param,
@@ -481,6 +522,13 @@ class DomainApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -520,10 +568,10 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Whether this deployment can actually sell domains, and why not when it cannot
) -> Reachability:
"""Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited.
Reports registrar reachability honestly: `ok` only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying `configured`, `reachable` and the reason, so an operator reads the blocker instead of guessing at it. Takes no principal, like every subsystem health probe. The answer also names the registrar `env`, which is the fact that decides whether money moves: only `prod` reaches the live, billable registrar — anything else, including unset, is the sandbox.
Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying configured, reachable and the reason, so an operator reads the blocker instead of guessing at it. It takes no principal, like every subsystem health probe.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -555,6 +603,8 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Reachability",
'503': "Reachability",
}
response_data = self.api_client.call_api(
*_param,
@@ -582,10 +632,10 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Whether this deployment can actually sell domains, and why not when it cannot
) -> ApiResponse[Reachability]:
"""Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited.
Reports registrar reachability honestly: `ok` only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying `configured`, `reachable` and the reason, so an operator reads the blocker instead of guessing at it. Takes no principal, like every subsystem health probe. The answer also names the registrar `env`, which is the fact that decides whether money moves: only `prod` reaches the live, billable registrar — anything else, including unset, is the sandbox.
Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying configured, reachable and the reason, so an operator reads the blocker instead of guessing at it. It takes no principal, like every subsystem health probe.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -617,6 +667,8 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Reachability",
'503': "Reachability",
}
response_data = self.api_client.call_api(
*_param,
@@ -645,9 +697,9 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Whether this deployment can actually sell domains, and why not when it cannot
"""Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited.
Reports registrar reachability honestly: `ok` only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying `configured`, `reachable` and the reason, so an operator reads the blocker instead of guessing at it. Takes no principal, like every subsystem health probe. The answer also names the registrar `env`, which is the fact that decides whether money moves: only `prod` reaches the live, billable registrar — anything else, including unset, is the sandbox.
Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited. Missing credentials or an unreachable registrar is 503 carrying configured, reachable and the reason, so an operator reads the blocker instead of guessing at it. It takes no principal, like every subsystem health probe.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -679,6 +731,8 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Reachability",
'503': "Reachability",
}
response_data = self.api_client.call_api(
*_param,
@@ -716,6 +770,13 @@ class DomainApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -743,6 +804,8 @@ class DomainApi:
@validate_call
def get_v1_domain_search(
self,
q: Annotated[StrictStr, Field(description="Q is the keyword to build names from. It is required.")],
tld: Annotated[Optional[StrictStr], Field(description="TLD narrows the search to a comma-separated set of top-level domains.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -755,11 +818,15 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Buyable names for a keyword, priced
) -> QuoteList:
"""Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD.
Searches the registrar for names built from the keyword `q`, plus its alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. Narrow the TLDs with a comma-separated `tld`; `q` is required and its absence is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. It requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
:param q: Q is the keyword to build names from. It is required. (required)
:type q: str
:param tld: TLD narrows the search to a comma-separated set of top-level domains.
:type tld: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -783,6 +850,8 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_search_serialize(
q=q,
tld=tld,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -790,6 +859,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -805,6 +875,8 @@ class DomainApi:
@validate_call
def get_v1_domain_search_with_http_info(
self,
q: Annotated[StrictStr, Field(description="Q is the keyword to build names from. It is required.")],
tld: Annotated[Optional[StrictStr], Field(description="TLD narrows the search to a comma-separated set of top-level domains.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -817,11 +889,15 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Buyable names for a keyword, priced
) -> ApiResponse[QuoteList]:
"""Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD.
Searches the registrar for names built from the keyword `q`, plus its alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. Narrow the TLDs with a comma-separated `tld`; `q` is required and its absence is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. It requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
:param q: Q is the keyword to build names from. It is required. (required)
:type q: str
:param tld: TLD narrows the search to a comma-separated set of top-level domains.
:type tld: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -845,6 +921,8 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_search_serialize(
q=q,
tld=tld,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -852,6 +930,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -867,6 +946,8 @@ class DomainApi:
@validate_call
def get_v1_domain_search_without_preload_content(
self,
q: Annotated[StrictStr, Field(description="Q is the keyword to build names from. It is required.")],
tld: Annotated[Optional[StrictStr], Field(description="TLD narrows the search to a comma-separated set of top-level domains.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -880,10 +961,14 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Buyable names for a keyword, priced
"""Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD.
Searches the registrar for names built from the keyword `q`, plus its alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. Narrow the TLDs with a comma-separated `tld`; `q` is required and its absence is 400. Requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD. Prices are RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire. It requires a validated principal; 403 without one. Nothing is charged and nothing is held — a quote is not a reservation, and the price is re-quoted at purchase, so a name quoted here can be gone or dearer by the time you buy it. A deployment with no registrar credentials answers 503.
:param q: Q is the keyword to build names from. It is required. (required)
:type q: str
:param tld: TLD narrows the search to a comma-separated set of top-level domains.
:type tld: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -907,6 +992,8 @@ class DomainApi:
""" # noqa: E501
_param = self._get_v1_domain_search_serialize(
q=q,
tld=tld,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -914,6 +1001,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "QuoteList",
}
response_data = self.api_client.call_api(
*_param,
@@ -924,6 +1012,8 @@ class DomainApi:
def _get_v1_domain_search_serialize(
self,
q,
tld,
_request_auth,
_content_type,
_headers,
@@ -946,11 +1036,26 @@ class DomainApi:
# process the path parameters
# process the query parameters
if q is not None:
_query_params.append(('q', q))
if tld is not None:
_query_params.append(('tld', tld))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -978,6 +1083,7 @@ class DomainApi:
@validate_call
def post_v1_domain_register(
self,
order: Order,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -990,11 +1096,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Buy a domain for your org — charged only once the registrar confirms
) -> RegisterResult:
"""Buys a domain for your org and answers the ownership record together with the quote it was bought at.
Buys `domain` for `years` (default 1) and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. Requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. `contacts` is optional — omit it and the registrar uses the reseller account's default WHOIS contacts. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
Buys a domain for your org and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. It requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
:param order: (required)
:type order: Order
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1018,6 +1126,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_register_serialize(
order=order,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1025,6 +1134,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1040,6 +1150,7 @@ class DomainApi:
@validate_call
def post_v1_domain_register_with_http_info(
self,
order: Order,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1052,11 +1163,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Buy a domain for your org — charged only once the registrar confirms
) -> ApiResponse[RegisterResult]:
"""Buys a domain for your org and answers the ownership record together with the quote it was bought at.
Buys `domain` for `years` (default 1) and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. Requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. `contacts` is optional — omit it and the registrar uses the reseller account's default WHOIS contacts. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
Buys a domain for your org and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. It requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
:param order: (required)
:type order: Order
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1080,6 +1193,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_register_serialize(
order=order,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1087,6 +1201,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1102,6 +1217,7 @@ class DomainApi:
@validate_call
def post_v1_domain_register_without_preload_content(
self,
order: Order,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1115,10 +1231,12 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Buy a domain for your org — charged only once the registrar confirms
"""Buys a domain for your org and answers the ownership record together with the quote it was bought at.
Buys `domain` for `years` (default 1) and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. Requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. `contacts` is optional — omit it and the registrar uses the reseller account's default WHOIS contacts. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
Buys a domain for your org and answers the ownership record together with the quote it was bought at. The order of operations is the product guarantee: quote, refuse anything unpurchasable or unpriced, AUTHORIZE the org's prepaid balance, provision the authoritative zone in Hanzo DNS, register at the registrar already pointing at Hanzo's nameservers, and only then CAPTURE the charge and record ownership. A registrar failure therefore leaves the balance untouched — the org is never billed for a domain it did not get. It requires a validated principal; that principal's org owns the domain and is the ledger the charge lands on. Re-buying a name the org already holds is 409, not a second purchase. Refusals are distinct on purpose: 402 when the prepaid balance cannot cover the quoted price, 409 when the name is not available, 503 when the deployment has no registrar credentials, and the registrar's own message with its own 4xx — or 502 for its 5xx — when it rejects the purchase. Zone provisioning is best-effort: if the zone service is down the domain is still registered against Hanzo's nameservers and the zone reconciles afterwards, rather than the purchase failing.
:param order: (required)
:type order: Order
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1142,6 +1260,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_register_serialize(
order=order,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1149,6 +1268,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1159,6 +1279,7 @@ class DomainApi:
def _post_v1_domain_register_serialize(
self,
order,
_request_auth,
_content_type,
_headers,
@@ -1184,9 +1305,31 @@ class DomainApi:
# process the header parameters
# process the form parameters
# process the body parameter
if order is not None:
_body_params = order
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
@@ -1213,6 +1356,7 @@ class DomainApi:
@validate_call
def post_v1_domain_renew(
self,
renew_req: RenewReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1225,11 +1369,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Extend a domain your org already owns
) -> RenewResult:
"""Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid.
Renews `domain` for `years` (default 1) and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. Balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. The balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
:param renew_req: (required)
:type renew_req: RenewReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1253,6 +1399,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_renew_serialize(
renew_req=renew_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1260,6 +1407,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RenewResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1275,6 +1423,7 @@ class DomainApi:
@validate_call
def post_v1_domain_renew_with_http_info(
self,
renew_req: RenewReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1287,11 +1436,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Extend a domain your org already owns
) -> ApiResponse[RenewResult]:
"""Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid.
Renews `domain` for `years` (default 1) and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. Balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. The balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
:param renew_req: (required)
:type renew_req: RenewReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1315,6 +1466,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_renew_serialize(
renew_req=renew_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1322,6 +1474,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RenewResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1337,6 +1490,7 @@ class DomainApi:
@validate_call
def post_v1_domain_renew_without_preload_content(
self,
renew_req: RenewReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1350,10 +1504,12 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Extend a domain your org already owns
"""Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid.
Renews `domain` for `years` (default 1) and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. Balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid. Ownership is the gate: a name the caller's org does not hold is 404, so a renewal can never reach another tenant's domain. The price is re-quoted at the CURRENT renewal rate rather than the one paid at purchase. If the registrar returns no renewal price the org's original price is charged instead, so a renewal is never accidentally free. The balance is authorized before the registrar is called and captured after it confirms — 402 when the prepaid balance cannot cover it, 503 when the deployment has no registrar credentials. Requires a validated principal.
:param renew_req: (required)
:type renew_req: RenewReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1377,6 +1533,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_renew_serialize(
renew_req=renew_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1384,6 +1541,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RenewResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1394,6 +1552,7 @@ class DomainApi:
def _post_v1_domain_renew_serialize(
self,
renew_req,
_request_auth,
_content_type,
_headers,
@@ -1419,9 +1578,31 @@ class DomainApi:
# process the header parameters
# process the form parameters
# process the body parameter
if renew_req is not None:
_body_params = renew_req
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
@@ -1448,6 +1629,7 @@ class DomainApi:
@validate_call
def post_v1_domain_transfer(
self,
transfer_req: TransferReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1460,11 +1642,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Move a domain you own at another registrar onto your org here
) -> RegisterResult:
"""Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does.
Transfers `domain` in using its `authCode` — both required, 400 otherwise — for `years` (default 1), and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. Requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. It requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
:param transfer_req: (required)
:type transfer_req: TransferReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1488,6 +1672,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_transfer_serialize(
transfer_req=transfer_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1495,6 +1680,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1510,6 +1696,7 @@ class DomainApi:
@validate_call
def post_v1_domain_transfer_with_http_info(
self,
transfer_req: TransferReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1522,11 +1709,13 @@ class DomainApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Move a domain you own at another registrar onto your org here
) -> ApiResponse[RegisterResult]:
"""Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does.
Transfers `domain` in using its `authCode` — both required, 400 otherwise — for `years` (default 1), and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. Requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. It requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
:param transfer_req: (required)
:type transfer_req: TransferReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1550,6 +1739,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_transfer_serialize(
transfer_req=transfer_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1557,6 +1747,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1572,6 +1763,7 @@ class DomainApi:
@validate_call
def post_v1_domain_transfer_without_preload_content(
self,
transfer_req: TransferReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1585,10 +1777,12 @@ class DomainApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Move a domain you own at another registrar onto your org here
"""Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does.
Transfers `domain` in using its `authCode` — both required, 400 otherwise — for `years` (default 1), and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. Requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does. It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503. It requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.
:param transfer_req: (required)
:type transfer_req: TransferReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1612,6 +1806,7 @@ class DomainApi:
""" # noqa: E501
_param = self._post_v1_domain_transfer_serialize(
transfer_req=transfer_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1619,6 +1814,7 @@ class DomainApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RegisterResult",
}
response_data = self.api_client.call_api(
*_param,
@@ -1629,6 +1825,7 @@ class DomainApi:
def _post_v1_domain_transfer_serialize(
self,
transfer_req,
_request_auth,
_content_type,
_headers,
@@ -1654,9 +1851,31 @@ class DomainApi:
# process the header parameters
# process the form parameters
# process the body parameter
if transfer_req is not None:
_body_params = transfer_req
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
File diff suppressed because it is too large Load Diff
+273 -75
View File
@@ -16,7 +16,17 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from pydantic import StrictStr
from pydantic import Field, StrictStr
from typing import Optional
from typing_extensions import Annotated
from hanzoai.cloud.models.analysis import Analysis
from hanzoai.cloud.models.analyze_query import AnalyzeQuery
from hanzoai.cloud.models.assignment import Assignment
from hanzoai.cloud.models.create_body import CreateBody
from hanzoai.cloud.models.decide_body import DecideBody
from hanzoai.cloud.models.experiment_list import ExperimentList
from hanzoai.cloud.models.health import Health
from hanzoai.cloud.models.trial import Trial
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -51,10 +61,10 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Every experiment in the caller's org, with its variants, status and decision.
) -> ExperimentList:
"""Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id.
Returns {data, total} ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -86,6 +96,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ExperimentList",
}
response_data = self.api_client.call_api(
*_param,
@@ -113,10 +124,10 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Every experiment in the caller's org, with its variants, status and decision.
) -> ApiResponse[ExperimentList]:
"""Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id.
Returns {data, total} ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -148,6 +159,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ExperimentList",
}
response_data = self.api_client.call_api(
*_param,
@@ -176,9 +188,9 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Every experiment in the caller's org, with its variants, status and decision.
"""Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id.
Returns {data, total} ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id. Scoped to the org resolved from the validated principal — a distinct org is a distinct physical store, so no query here can reach another tenant's rows — and further narrowed to the caller's project scope when the credential carries one. A principal with NO project scope sees the org's experiments across all of its projects, which is the answer a reader most often expects to be filtered and is not. Requires a validated principal; refuses without one rather than answering an empty list.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -210,6 +222,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ExperimentList",
}
response_data = self.api_client.call_api(
*_param,
@@ -247,6 +260,13 @@ class ExperimentsApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -274,7 +294,7 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -287,12 +307,12 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""One experiment's definition and lifecycle: variants, weights, control arm, status and winner.
) -> Trial:
"""Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner.
Reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner. It reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -325,6 +345,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -340,7 +361,7 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id_with_http_info(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -353,12 +374,12 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""One experiment's definition and lifecycle: variants, weights, control arm, status and winner.
) -> ApiResponse[Trial]:
"""Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner.
Reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner. It reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -391,6 +412,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -406,7 +428,7 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id_without_preload_content(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -420,11 +442,11 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""One experiment's definition and lifecycle: variants, weights, control arm, status and winner.
"""Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner.
Reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner. It reads the registry row only — the definition and the decision, never live measurements. Assignment lives in the flags plane and outcomes in analytics; this is the value that names both. Scoped to the caller's org and project from the validated principal, so another tenant's experiment of the same id is simply not found. An id that is not a legal slug is answered the same way, without a store read — the shape check and the existence check are one answer, so neither leaks the other.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -457,6 +479,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -497,6 +520,13 @@ class ExperimentsApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -524,7 +554,9 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id_assign(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
subject: Annotated[StrictStr, Field(description="Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind.")],
props: Annotated[Optional[StrictStr], Field(description="Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -537,13 +569,17 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The variant one subject is bucketed into, and the payload that variant carries.
) -> Assignment:
"""Is the variant one subject is bucketed into, and the payload that variant carries.
Evaluates the experiment's assignment flag for the `subject` in the query and answers {experiment, subject, variant, on, payload}. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. `subject` is required. `props` may carry a JSON object of person properties for targeting; a `props` value that is not valid JSON is dropped silently rather than refused, so a malformed one changes the bucketing without saying so. An empty `variant` with `on` false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
Is the variant one subject is bucketed into, and the payload that variant carries. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. An empty variant with on false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param subject: Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind. (required)
:type subject: str
:param props: Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.
:type props: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -568,6 +604,8 @@ class ExperimentsApi:
_param = self._get_v1_experiments_by_id_assign_serialize(
id=id,
subject=subject,
props=props,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -575,6 +613,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Assignment",
}
response_data = self.api_client.call_api(
*_param,
@@ -590,7 +629,9 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id_assign_with_http_info(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
subject: Annotated[StrictStr, Field(description="Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind.")],
props: Annotated[Optional[StrictStr], Field(description="Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -603,13 +644,17 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The variant one subject is bucketed into, and the payload that variant carries.
) -> ApiResponse[Assignment]:
"""Is the variant one subject is bucketed into, and the payload that variant carries.
Evaluates the experiment's assignment flag for the `subject` in the query and answers {experiment, subject, variant, on, payload}. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. `subject` is required. `props` may carry a JSON object of person properties for targeting; a `props` value that is not valid JSON is dropped silently rather than refused, so a malformed one changes the bucketing without saying so. An empty `variant` with `on` false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
Is the variant one subject is bucketed into, and the payload that variant carries. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. An empty variant with on false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param subject: Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind. (required)
:type subject: str
:param props: Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.
:type props: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -634,6 +679,8 @@ class ExperimentsApi:
_param = self._get_v1_experiments_by_id_assign_serialize(
id=id,
subject=subject,
props=props,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -641,6 +688,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Assignment",
}
response_data = self.api_client.call_api(
*_param,
@@ -656,7 +704,9 @@ class ExperimentsApi:
@validate_call
def get_v1_experiments_by_id_assign_without_preload_content(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
subject: Annotated[StrictStr, Field(description="Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind.")],
props: Annotated[Optional[StrictStr], Field(description="Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -670,12 +720,16 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The variant one subject is bucketed into, and the payload that variant carries.
"""Is the variant one subject is bucketed into, and the payload that variant carries.
Evaluates the experiment's assignment flag for the `subject` in the query and answers {experiment, subject, variant, on, payload}. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. `subject` is required. `props` may carry a JSON object of person properties for targeting; a `props` value that is not valid JSON is dropped silently rather than refused, so a malformed one changes the bucketing without saying so. An empty `variant` with `on` false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
Is the variant one subject is bucketed into, and the payload that variant carries. The bucketing is a deterministic hash of the subject, so the same subject gets the same arm on every call for as long as the flag definition is unchanged — and this is a pure READ: it records nothing. In particular it does NOT record an exposure. The caller's SDK must emit the experiment's exposure event itself, or the analysis has an empty denominator and every arm measures zero. An empty variant with on false is not an error — it means the flag returned nothing for this subject, so the subject is not enrolled. A flags engine that is unavailable refuses rather than defaulting to an arm. Requires a validated principal, and the experiment must exist in the caller's org and project.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param subject: Subject is the unit to bucket — a user, org, session or audience key, matching the experiment's subjectKind. (required)
:type subject: str
:param props: Props is a JSON object of person properties for targeting. A value that is not valid JSON is dropped rather than refused, so a malformed one changes the bucketing without saying so.
:type props: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -700,6 +754,8 @@ class ExperimentsApi:
_param = self._get_v1_experiments_by_id_assign_serialize(
id=id,
subject=subject,
props=props,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -707,6 +763,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Assignment",
}
response_data = self.api_client.call_api(
*_param,
@@ -718,6 +775,8 @@ class ExperimentsApi:
def _get_v1_experiments_by_id_assign_serialize(
self,
id,
subject,
props,
_request_auth,
_content_type,
_headers,
@@ -742,11 +801,26 @@ class ExperimentsApi:
if id is not None:
_path_params['id'] = id
# process the query parameters
if subject is not None:
_query_params.append(('subject', subject))
if props is not None:
_query_params.append(('props', props))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -786,10 +860,10 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Whether the experiments subsystem is mounted and serving in this process.
) -> Health:
"""Is whether the experiments subsystem is mounted and serving in this process.
Answers {\"ok\":true,\"subsystem\":\"experiments\"} unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. `health` is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
Is whether the experiments subsystem is mounted and serving in this process. It answers unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. \"health\" is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -821,6 +895,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Health",
}
response_data = self.api_client.call_api(
*_param,
@@ -848,10 +923,10 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Whether the experiments subsystem is mounted and serving in this process.
) -> ApiResponse[Health]:
"""Is whether the experiments subsystem is mounted and serving in this process.
Answers {\"ok\":true,\"subsystem\":\"experiments\"} unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. `health` is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
Is whether the experiments subsystem is mounted and serving in this process. It answers unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. \"health\" is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -883,6 +958,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Health",
}
response_data = self.api_client.call_api(
*_param,
@@ -911,9 +987,9 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Whether the experiments subsystem is mounted and serving in this process.
"""Is whether the experiments subsystem is mounted and serving in this process.
Answers {\"ok\":true,\"subsystem\":\"experiments\"} unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. `health` is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
Is whether the experiments subsystem is mounted and serving in this process. It answers unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org. The static path is registered ahead of the /:id read, so it always wins the first-match scan. \"health\" is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -945,6 +1021,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Health",
}
response_data = self.api_client.call_api(
*_param,
@@ -982,6 +1059,13 @@ class ExperimentsApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -1009,6 +1093,7 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments(
self,
create_body: CreateBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1021,11 +1106,13 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Create a controlled experiment and put its assignment flag live.
) -> Trial:
"""Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared.
Registers the experiment AND writes its multivariate assignment flag, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. The body names the experiment (`id`, a slug that is claimed once), what it measures (`metricEvent`, required; `exposureEvent` defaults to the SDK's `$feature_flag_called` marker), the unit it assigns (`subjectKind`: user, org, session or audience — user by default), and at least two `variants`. A variant carries an opaque `payload` this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Weights that are all zero become an even split; otherwise they must sum to 100. At most one variant may be flagged `control`; with none, the first arm is the baseline. `flagKey` defaults to `exp_<id>`. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. A variant carries an opaque payload this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
:param create_body: (required)
:type create_body: CreateBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1049,6 +1136,7 @@ class ExperimentsApi:
""" # noqa: E501
_param = self._post_v1_experiments_serialize(
create_body=create_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1056,6 +1144,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1071,6 +1160,7 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments_with_http_info(
self,
create_body: CreateBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1083,11 +1173,13 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Create a controlled experiment and put its assignment flag live.
) -> ApiResponse[Trial]:
"""Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared.
Registers the experiment AND writes its multivariate assignment flag, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. The body names the experiment (`id`, a slug that is claimed once), what it measures (`metricEvent`, required; `exposureEvent` defaults to the SDK's `$feature_flag_called` marker), the unit it assigns (`subjectKind`: user, org, session or audience — user by default), and at least two `variants`. A variant carries an opaque `payload` this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Weights that are all zero become an even split; otherwise they must sum to 100. At most one variant may be flagged `control`; with none, the first arm is the baseline. `flagKey` defaults to `exp_<id>`. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. A variant carries an opaque payload this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
:param create_body: (required)
:type create_body: CreateBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1111,6 +1203,7 @@ class ExperimentsApi:
""" # noqa: E501
_param = self._post_v1_experiments_serialize(
create_body=create_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1118,6 +1211,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1133,6 +1227,7 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments_without_preload_content(
self,
create_body: CreateBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1146,10 +1241,12 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Create a controlled experiment and put its assignment flag live.
"""Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared.
Registers the experiment AND writes its multivariate assignment flag, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. The body names the experiment (`id`, a slug that is claimed once), what it measures (`metricEvent`, required; `exposureEvent` defaults to the SDK's `$feature_flag_called` marker), the unit it assigns (`subjectKind`: user, org, session or audience — user by default), and at least two `variants`. A variant carries an opaque `payload` this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Weights that are all zero become an even split; otherwise they must sum to 100. At most one variant may be flagged `control`; with none, the first arm is the baseline. `flagKey` defaults to `exp_<id>`. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared. There is no separate start call; creating IS starting. A variant carries an opaque payload this primitive never interprets: a feature config, an ad-creative id, a subject line, a model id. Requires a validated principal, and refuses without one. The org and project are taken from that principal and the creator is stamped from the credential — none of the three is a body field, so an experiment cannot be filed against another tenant. An id already used in this project is a conflict, never a silent overwrite: re-creating would stomp the assignment flag of a run in progress. It fails closed on the flag write. An experiment whose assignment flag does not exist would assign nobody, so if that write fails nothing is registered.
:param create_body: (required)
:type create_body: CreateBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1173,6 +1270,7 @@ class ExperimentsApi:
""" # noqa: E501
_param = self._post_v1_experiments_serialize(
create_body=create_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1180,6 +1278,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1190,6 +1289,7 @@ class ExperimentsApi:
def _post_v1_experiments_serialize(
self,
create_body,
_request_auth,
_content_type,
_headers,
@@ -1215,9 +1315,31 @@ class ExperimentsApi:
# process the header parameters
# process the form parameters
# process the body parameter
if create_body is not None:
_body_params = create_body
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
@@ -1244,7 +1366,8 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments_by_id_analyze(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
analyze_query: AnalyzeQuery,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1257,13 +1380,15 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Per-variant conversion, lift and statistical significance against the control arm.
) -> Analysis:
"""Is per-variant conversion, lift and statistical significance against the control arm.
Reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. The window is `start`/`end` in RFC3339 if given, otherwise the last `days` (1 to 365, 30 by default) up to now. `alpha` overrides the 0.05 two-tailed threshold when it lies strictly between 0 and 1; anything else leaves the default in place. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. `winner` in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable `ab` rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
Is per-variant conversion, lift and statistical significance against the control arm. It reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. The winner in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable ab rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param analyze_query: (required)
:type analyze_query: AnalyzeQuery
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1288,6 +1413,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_analyze_serialize(
id=id,
analyze_query=analyze_query,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1295,6 +1421,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Analysis",
}
response_data = self.api_client.call_api(
*_param,
@@ -1310,7 +1437,8 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments_by_id_analyze_with_http_info(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
analyze_query: AnalyzeQuery,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1323,13 +1451,15 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Per-variant conversion, lift and statistical significance against the control arm.
) -> ApiResponse[Analysis]:
"""Is per-variant conversion, lift and statistical significance against the control arm.
Reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. The window is `start`/`end` in RFC3339 if given, otherwise the last `days` (1 to 365, 30 by default) up to now. `alpha` overrides the 0.05 two-tailed threshold when it lies strictly between 0 and 1; anything else leaves the default in place. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. `winner` in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable `ab` rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
Is per-variant conversion, lift and statistical significance against the control arm. It reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. The winner in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable ab rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param analyze_query: (required)
:type analyze_query: AnalyzeQuery
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1354,6 +1484,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_analyze_serialize(
id=id,
analyze_query=analyze_query,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1361,6 +1492,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Analysis",
}
response_data = self.api_client.call_api(
*_param,
@@ -1376,7 +1508,8 @@ class ExperimentsApi:
@validate_call
def post_v1_experiments_by_id_analyze_without_preload_content(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the experiment the URL names.")],
analyze_query: AnalyzeQuery,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1390,12 +1523,14 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Per-variant conversion, lift and statistical significance against the control arm.
"""Is per-variant conversion, lift and statistical significance against the control arm.
Reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. The window is `start`/`end` in RFC3339 if given, otherwise the last `days` (1 to 365, 30 by default) up to now. `alpha` overrides the 0.05 two-tailed threshold when it lies strictly between 0 and 1; anything else leaves the default in place. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. `winner` in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable `ab` rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
Is per-variant conversion, lift and statistical significance against the control arm. It reads per-subject outcomes from the analytics plane over a window, folds them into per-variant samples, and returns each arm's exposed count, conversions, rate, lift versus control, two-proportion z, two-tailed p-value and whether it clears alpha. Arms with no data still appear with zero exposed, so the read is complete over the experiment's declared arms; the control arm sorts first. The pooled-variance estimator is used and the p-value is exact; a degenerate comparison (an empty arm, no variance) answers z 0 and p 1 — not significant, never an error. Only EXPOSED subjects are counted, and each is joined to its arm by re-evaluating the assignment flag AT ANALYSIS TIME — not from what was in force during the window. That is the one rule to get right: analyzing an experiment after its winner has been promoted re-buckets every subject into the promoted arm, collapsing the control to zero exposed and making the result meaningless. Read the analysis before deciding. A subject the flag cannot place is dropped rather than allowed to poison the fold. The winner in the response is ADVISORY — the significant, control-beating arm with the highest rate, or empty when inconclusive. It promotes nothing; the decision is a separate, explicit act. Every plane read is scoped to the caller's org. Per-variant samples are also written to the research evidence plane as immutable ab rows, best-effort: the analysis is still returned if that write fails, because the samples are recomputable, and the failure is logged rather than swallowed.
:param id: (required)
:param id: ID is the experiment the URL names. (required)
:type id: str
:param analyze_query: (required)
:type analyze_query: AnalyzeQuery
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1420,6 +1555,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_analyze_serialize(
id=id,
analyze_query=analyze_query,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1427,6 +1563,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Analysis",
}
response_data = self.api_client.call_api(
*_param,
@@ -1438,6 +1575,7 @@ class ExperimentsApi:
def _post_v1_experiments_by_id_analyze_serialize(
self,
id,
analyze_query,
_request_auth,
_content_type,
_headers,
@@ -1465,9 +1603,31 @@ class ExperimentsApi:
# process the header parameters
# process the form parameters
# process the body parameter
if analyze_query is not None:
_body_params = analyze_query
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
@@ -1495,6 +1655,7 @@ class ExperimentsApi:
def post_v1_experiments_by_id_decide(
self,
id: StrictStr,
decide_body: DecideBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1507,13 +1668,15 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Promote one variant to the whole rollout and record who decided.
) -> Trial:
"""Promotes one variant to the whole rollout and records who decided.
Rewrites the assignment flag so the named `winner` serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. Requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. `winner` is required and must name one of the experiment's own variants. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
Promotes one variant to the whole rollout and records who decided. It rewrites the assignment flag so the named winner serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. It requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
:param id: (required)
:type id: str
:param decide_body: (required)
:type decide_body: DecideBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1538,6 +1701,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_decide_serialize(
id=id,
decide_body=decide_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1545,6 +1709,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1561,6 +1726,7 @@ class ExperimentsApi:
def post_v1_experiments_by_id_decide_with_http_info(
self,
id: StrictStr,
decide_body: DecideBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1573,13 +1739,15 @@ class ExperimentsApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Promote one variant to the whole rollout and record who decided.
) -> ApiResponse[Trial]:
"""Promotes one variant to the whole rollout and records who decided.
Rewrites the assignment flag so the named `winner` serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. Requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. `winner` is required and must name one of the experiment's own variants. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
Promotes one variant to the whole rollout and records who decided. It rewrites the assignment flag so the named winner serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. It requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
:param id: (required)
:type id: str
:param decide_body: (required)
:type decide_body: DecideBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1604,6 +1772,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_decide_serialize(
id=id,
decide_body=decide_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1611,6 +1780,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1627,6 +1797,7 @@ class ExperimentsApi:
def post_v1_experiments_by_id_decide_without_preload_content(
self,
id: StrictStr,
decide_body: DecideBody,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1640,12 +1811,14 @@ class ExperimentsApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Promote one variant to the whole rollout and record who decided.
"""Promotes one variant to the whole rollout and records who decided.
Rewrites the assignment flag so the named `winner` serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. Requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. `winner` is required and must name one of the experiment's own variants. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
Promotes one variant to the whole rollout and records who decided. It rewrites the assignment flag so the named winner serves 100% of the rollout and every other arm 0%, preserving the flag's targeting groups and payloads, then stamps the experiment decided with the winner, the deciding credential and the time. This is a production behaviour change that takes effect immediately for every subject the flag evaluates. It requires an ORG ADMIN of the caller's own org — a stricter gate than the rest of this surface, matching the flags write plane, because promoting is a flag write. The admin check runs AFTER the experiment is found, so a caller from another tenant is answered not-found rather than forbidden and learns nothing about what exists. An experiment whose assignment flag has gone missing is a conflict rather than a silent no-op — there is nothing to promote. Deciding is NOT terminal. A second call re-promotes a different variant and re-stamps the row; the status stays decided and the previous winner is overwritten with no record that it was ever chosen. Nothing here reverts the flag to its original weights either, so an experiment cannot be un-decided through this route — restoring a split means writing the flag definition back through the flags plane.
:param id: (required)
:type id: str
:param decide_body: (required)
:type decide_body: DecideBody
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1670,6 +1843,7 @@ class ExperimentsApi:
_param = self._post_v1_experiments_by_id_decide_serialize(
id=id,
decide_body=decide_body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1677,6 +1851,7 @@ class ExperimentsApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Trial",
}
response_data = self.api_client.call_api(
*_param,
@@ -1688,6 +1863,7 @@ class ExperimentsApi:
def _post_v1_experiments_by_id_decide_serialize(
self,
id,
decide_body,
_request_auth,
_content_type,
_headers,
@@ -1715,9 +1891,31 @@ class ExperimentsApi:
# process the header parameters
# process the form parameters
# process the body parameter
if decide_body is not None:
_body_params = decide_body
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
File diff suppressed because it is too large Load Diff
+30 -30
View File
@@ -53,7 +53,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -115,7 +115,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -177,7 +177,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -288,7 +288,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -350,7 +350,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -412,7 +412,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -523,7 +523,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -585,7 +585,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -647,7 +647,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -758,7 +758,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -820,7 +820,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -882,7 +882,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -993,7 +993,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1055,7 +1055,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1117,7 +1117,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1228,7 +1228,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1290,7 +1290,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1352,7 +1352,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1463,7 +1463,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1525,7 +1525,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1587,7 +1587,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1698,7 +1698,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1760,7 +1760,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1822,7 +1822,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1933,7 +1933,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1995,7 +1995,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2057,7 +2057,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2168,7 +2168,7 @@ class OrgApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2230,7 +2230,7 @@ class OrgApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2292,7 +2292,7 @@ class OrgApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+112 -79
View File
@@ -16,6 +16,7 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from hanzoai.cloud.models.ai_envelope import AiEnvelope
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -53,7 +54,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -115,7 +116,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -177,7 +178,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -285,7 +286,7 @@ class RouterApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
) -> AiEnvelope:
"""Data
@@ -319,6 +320,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -346,7 +350,7 @@ class RouterApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
) -> ApiResponse[AiEnvelope]:
"""Data
@@ -380,6 +384,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -441,6 +448,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -478,6 +488,13 @@ class RouterApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -520,7 +537,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -582,7 +599,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -644,7 +661,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -755,7 +772,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -817,7 +834,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -879,7 +896,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -990,7 +1007,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1052,7 +1069,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1114,7 +1131,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1225,7 +1242,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1287,7 +1304,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1349,7 +1366,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1460,7 +1477,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1522,7 +1539,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1584,7 +1601,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1692,7 +1709,7 @@ class RouterApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
) -> AiEnvelope:
"""Data
@@ -1726,6 +1743,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -1753,7 +1773,7 @@ class RouterApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
) -> ApiResponse[AiEnvelope]:
"""Data
@@ -1787,6 +1807,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -1848,6 +1871,9 @@ class RouterApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "AiEnvelope",
'401': None,
'403': None,
}
response_data = self.api_client.call_api(
*_param,
@@ -1885,6 +1911,13 @@ class RouterApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -1927,7 +1960,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1989,7 +2022,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2051,7 +2084,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2632,7 +2665,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2694,7 +2727,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2756,7 +2789,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2867,7 +2900,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2929,7 +2962,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2991,7 +3024,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3102,7 +3135,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3164,7 +3197,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3226,7 +3259,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3572,7 +3605,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3634,7 +3667,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3696,7 +3729,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3807,7 +3840,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3869,7 +3902,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -3931,7 +3964,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4042,7 +4075,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4104,7 +4137,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4166,7 +4199,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4277,7 +4310,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4339,7 +4372,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4401,7 +4434,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4512,7 +4545,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4574,7 +4607,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4636,7 +4669,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4747,7 +4780,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4809,7 +4842,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4871,7 +4904,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4982,7 +5015,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5044,7 +5077,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5106,7 +5139,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5217,7 +5250,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5279,7 +5312,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5341,7 +5374,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5452,7 +5485,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5514,7 +5547,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5576,7 +5609,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5687,7 +5720,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5749,7 +5782,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5811,7 +5844,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5922,7 +5955,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5984,7 +6017,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6046,7 +6079,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6157,7 +6190,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6219,7 +6252,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6281,7 +6314,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6392,7 +6425,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6454,7 +6487,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6516,7 +6549,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6627,7 +6660,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6689,7 +6722,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6751,7 +6784,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6862,7 +6895,7 @@ class RouterApi:
) -> None:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6924,7 +6957,7 @@ class RouterApi:
) -> ApiResponse[None]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6986,7 +7019,7 @@ class RouterApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO beego twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a beego controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/router/policy splits GET (read) vs PUT (write), /v1/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+245 -69
View File
@@ -16,7 +16,17 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from pydantic import StrictStr
from pydantic import Field, StrictInt, StrictStr
from typing import Optional
from typing_extensions import Annotated
from hanzoai.cloud.models.finding_list import FindingList
from hanzoai.cloud.models.finding_view import FindingView
from hanzoai.cloud.models.rule_list import RuleList
from hanzoai.cloud.models.ruleset import Ruleset
from hanzoai.cloud.models.scan_detail import ScanDetail
from hanzoai.cloud.models.scan_list import ScanList
from hanzoai.cloud.models.scan_view import ScanView
from hanzoai.cloud.models.submit_req import SubmitReq
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -39,6 +49,9 @@ class SecurityApi:
@validate_call
def get_v1_security_findings(
self,
scan_id: Annotated[Optional[StrictStr], Field(description="ScanID narrows to a single scan.")] = None,
min_severity: Annotated[Optional[StrictStr], Field(description="MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".")] = None,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -51,11 +64,17 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The org's findings, across scans or within one
) -> FindingList:
"""Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one.
Lists the caller org's findings — rule, severity, path, line, masked preview and fingerprint — newest first. `scanId` narrows to a single scan, `minSeverity` (critical | high | medium | low) drops everything below that rank, and `limit` caps the page; a minSeverity outside that set is refused with 400 rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one. A minSeverity outside critical|high|medium|low is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
:param scan_id: ScanID narrows to a single scan.
:type scan_id: str
:param min_severity: MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".
:type min_severity: str
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -79,6 +98,9 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_findings_serialize(
scan_id=scan_id,
min_severity=min_severity,
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -86,6 +108,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingList",
}
response_data = self.api_client.call_api(
*_param,
@@ -101,6 +124,9 @@ class SecurityApi:
@validate_call
def get_v1_security_findings_with_http_info(
self,
scan_id: Annotated[Optional[StrictStr], Field(description="ScanID narrows to a single scan.")] = None,
min_severity: Annotated[Optional[StrictStr], Field(description="MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".")] = None,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -113,11 +139,17 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The org's findings, across scans or within one
) -> ApiResponse[FindingList]:
"""Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one.
Lists the caller org's findings — rule, severity, path, line, masked preview and fingerprint — newest first. `scanId` narrows to a single scan, `minSeverity` (critical | high | medium | low) drops everything below that rank, and `limit` caps the page; a minSeverity outside that set is refused with 400 rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one. A minSeverity outside critical|high|medium|low is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
:param scan_id: ScanID narrows to a single scan.
:type scan_id: str
:param min_severity: MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".
:type min_severity: str
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -141,6 +173,9 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_findings_serialize(
scan_id=scan_id,
min_severity=min_severity,
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -148,6 +183,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingList",
}
response_data = self.api_client.call_api(
*_param,
@@ -163,6 +199,9 @@ class SecurityApi:
@validate_call
def get_v1_security_findings_without_preload_content(
self,
scan_id: Annotated[Optional[StrictStr], Field(description="ScanID narrows to a single scan.")] = None,
min_severity: Annotated[Optional[StrictStr], Field(description="MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".")] = None,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -176,10 +215,16 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The org's findings, across scans or within one
"""Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one.
Lists the caller org's findings — rule, severity, path, line, masked preview and fingerprint — newest first. `scanId` narrows to a single scan, `minSeverity` (critical | high | medium | low) drops everything below that rank, and `limit` caps the page; a minSeverity outside that set is refused with 400 rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one. A minSeverity outside critical|high|medium|low is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\". Strictly org-scoped, and a caller with no validated org is refused.
:param scan_id: ScanID narrows to a single scan.
:type scan_id: str
:param min_severity: MinSeverity drops everything below that rank: critical, high, medium or low. A value outside that set is refused rather than quietly ignored, so a filter typo cannot read as \"no findings\".
:type min_severity: str
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -203,6 +248,9 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_findings_serialize(
scan_id=scan_id,
min_severity=min_severity,
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -210,6 +258,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingList",
}
response_data = self.api_client.call_api(
*_param,
@@ -220,6 +269,9 @@ class SecurityApi:
def _get_v1_security_findings_serialize(
self,
scan_id,
min_severity,
limit,
_request_auth,
_content_type,
_headers,
@@ -242,11 +294,30 @@ class SecurityApi:
# process the path parameters
# process the query parameters
if scan_id is not None:
_query_params.append(('scanId', scan_id))
if min_severity is not None:
_query_params.append(('minSeverity', min_severity))
if limit is not None:
_query_params.append(('limit', limit))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -274,7 +345,7 @@ class SecurityApi:
@validate_call
def get_v1_security_findings_by_id(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the finding the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -287,12 +358,12 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""One finding
) -> FindingView:
"""Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
:param id: (required)
:param id: ID is the finding the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -325,6 +396,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingView",
}
response_data = self.api_client.call_api(
*_param,
@@ -340,7 +412,7 @@ class SecurityApi:
@validate_call
def get_v1_security_findings_by_id_with_http_info(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the finding the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -353,12 +425,12 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""One finding
) -> ApiResponse[FindingView]:
"""Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
:param id: (required)
:param id: ID is the finding the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -391,6 +463,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingView",
}
response_data = self.api_client.call_api(
*_param,
@@ -406,7 +479,7 @@ class SecurityApi:
@validate_call
def get_v1_security_findings_by_id_without_preload_content(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the finding the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -420,11 +493,11 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""One finding
"""Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back. Scoped to the caller's org, and a finding belonging to another org is the same 404 as one that never existed.
:param id: (required)
:param id: ID is the finding the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -457,6 +530,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "FindingView",
}
response_data = self.api_client.call_api(
*_param,
@@ -497,6 +571,13 @@ class SecurityApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -536,10 +617,10 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Liveness, and how many detection rules are loaded
) -> Ruleset:
"""Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. Reads no tenant: a prober that sends no principal is answered, not refused.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. It reads no tenant: a prober that sends no principal is answered, not refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -571,6 +652,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Ruleset",
}
response_data = self.api_client.call_api(
*_param,
@@ -598,10 +680,10 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Liveness, and how many detection rules are loaded
) -> ApiResponse[Ruleset]:
"""Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. Reads no tenant: a prober that sends no principal is answered, not refused.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. It reads no tenant: a prober that sends no principal is answered, not refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -633,6 +715,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Ruleset",
}
response_data = self.api_client.call_api(
*_param,
@@ -661,9 +744,9 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Liveness, and how many detection rules are loaded
"""Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. Reads no tenant: a prober that sends no principal is answered, not refused.
Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds. It has no external dependency — the answer is ok whenever the findings store opened — so it measures this process rather than anything downstream. It reads no tenant: a prober that sends no principal is answered, not refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -695,6 +778,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Ruleset",
}
response_data = self.api_client.call_api(
*_param,
@@ -732,6 +816,13 @@ class SecurityApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -771,10 +862,10 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The secret-detection catalog the engine scans with
) -> RuleList:
"""Is the secret-detection catalog the engine scans with.
Returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
Is the secret-detection catalog the engine scans with. It returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -806,6 +897,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RuleList",
}
response_data = self.api_client.call_api(
*_param,
@@ -833,10 +925,10 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The secret-detection catalog the engine scans with
) -> ApiResponse[RuleList]:
"""Is the secret-detection catalog the engine scans with.
Returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
Is the secret-detection catalog the engine scans with. It returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -868,6 +960,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RuleList",
}
response_data = self.api_client.call_api(
*_param,
@@ -896,9 +989,9 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The secret-detection catalog the engine scans with
"""Is the secret-detection catalog the engine scans with.
Returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
Is the secret-detection catalog the engine scans with. It returns every rule a scan can fire — the id, name and severity a finding cites — so a caller can render or triage results without hard-coding the catalog. It is the same for everyone and discloses nothing tenant-specific, so it carries no org scope.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -930,6 +1023,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "RuleList",
}
response_data = self.api_client.call_api(
*_param,
@@ -967,6 +1061,13 @@ class SecurityApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -994,6 +1095,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans(
self,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1006,11 +1108,13 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""The org's scan history
) -> ScanList:
"""Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity.
Lists the caller org's scans, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. `limit` caps the page. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1034,6 +1138,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_scans_serialize(
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1041,6 +1146,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanList",
}
response_data = self.api_client.call_api(
*_param,
@@ -1056,6 +1162,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans_with_http_info(
self,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1068,11 +1175,13 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""The org's scan history
) -> ApiResponse[ScanList]:
"""Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity.
Lists the caller org's scans, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. `limit` caps the page. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1096,6 +1205,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_scans_serialize(
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1103,6 +1213,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanList",
}
response_data = self.api_client.call_api(
*_param,
@@ -1118,6 +1229,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans_without_preload_content(
self,
limit: Annotated[Optional[StrictInt], Field(description="Limit caps the page.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1131,10 +1243,12 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""The org's scan history
"""Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity.
Lists the caller org's scans, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. `limit` caps the page. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity. Strictly org-scoped: a caller only ever sees its own scans, and one with no validated org is refused.
:param limit: Limit caps the page.
:type limit: int
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1158,6 +1272,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._get_v1_security_scans_serialize(
limit=limit,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1165,6 +1280,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanList",
}
response_data = self.api_client.call_api(
*_param,
@@ -1175,6 +1291,7 @@ class SecurityApi:
def _get_v1_security_scans_serialize(
self,
limit,
_request_auth,
_content_type,
_headers,
@@ -1197,11 +1314,22 @@ class SecurityApi:
# process the path parameters
# process the query parameters
if limit is not None:
_query_params.append(('limit', limit))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -1229,7 +1357,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans_by_id(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the scan the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1242,12 +1370,12 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""One scan and every finding on it
) -> ScanDetail:
"""Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan.
Returns the scan summary together with all of its findings, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a probe learns nothing about what exists elsewhere. No validated org is refused.
Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a ruleset learns nothing about what exists elsewhere. No validated org is refused.
:param id: (required)
:param id: ID is the scan the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1280,6 +1408,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanDetail",
}
response_data = self.api_client.call_api(
*_param,
@@ -1295,7 +1424,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans_by_id_with_http_info(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the scan the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1308,12 +1437,12 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""One scan and every finding on it
) -> ApiResponse[ScanDetail]:
"""Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan.
Returns the scan summary together with all of its findings, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a probe learns nothing about what exists elsewhere. No validated org is refused.
Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a ruleset learns nothing about what exists elsewhere. No validated org is refused.
:param id: (required)
:param id: ID is the scan the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1346,6 +1475,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanDetail",
}
response_data = self.api_client.call_api(
*_param,
@@ -1361,7 +1491,7 @@ class SecurityApi:
@validate_call
def get_v1_security_scans_by_id_without_preload_content(
self,
id: StrictStr,
id: Annotated[StrictStr, Field(description="ID is the scan the URL names.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1375,11 +1505,11 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""One scan and every finding on it
"""Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan.
Returns the scan summary together with all of its findings, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a probe learns nothing about what exists elsewhere. No validated org is refused.
Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets. Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a ruleset learns nothing about what exists elsewhere. No validated org is refused.
:param id: (required)
:param id: ID is the scan the URL names. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1412,6 +1542,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ScanDetail",
}
response_data = self.api_client.call_api(
*_param,
@@ -1452,6 +1583,13 @@ class SecurityApi:
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# authentication setting
@@ -1479,6 +1617,7 @@ class SecurityApi:
@validate_call
def post_v1_security_scans(
self,
submit_req: SubmitReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1491,11 +1630,13 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Scan submitted source for hardcoded secrets
) -> ScanView:
"""Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity.
Runs the detection engine over a batch of {path, content} files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. Requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. `project` in the body names the sub-scope and is refused with 400 if it is not a valid slug; omit it and the caller's project header is used instead, where an unusable value is simply ignored. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. It requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
:param submit_req: (required)
:type submit_req: SubmitReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1519,6 +1660,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._post_v1_security_scans_serialize(
submit_req=submit_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1526,6 +1668,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "ScanView",
}
response_data = self.api_client.call_api(
*_param,
@@ -1541,6 +1684,7 @@ class SecurityApi:
@validate_call
def post_v1_security_scans_with_http_info(
self,
submit_req: SubmitReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1553,11 +1697,13 @@ class SecurityApi:
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Scan submitted source for hardcoded secrets
) -> ApiResponse[ScanView]:
"""Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity.
Runs the detection engine over a batch of {path, content} files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. Requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. `project` in the body names the sub-scope and is refused with 400 if it is not a valid slug; omit it and the caller's project header is used instead, where an unusable value is simply ignored. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. It requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
:param submit_req: (required)
:type submit_req: SubmitReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1581,6 +1727,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._post_v1_security_scans_serialize(
submit_req=submit_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1588,6 +1735,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "ScanView",
}
response_data = self.api_client.call_api(
*_param,
@@ -1603,6 +1751,7 @@ class SecurityApi:
@validate_call
def post_v1_security_scans_without_preload_content(
self,
submit_req: SubmitReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1616,10 +1765,12 @@ class SecurityApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Scan submitted source for hardcoded secrets
"""Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity.
Runs the detection engine over a batch of {path, content} files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. Requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. `project` in the body names the sub-scope and is refused with 400 if it is not a valid slug; omit it and the caller's project header is used instead, where an unusable value is simply ignored. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity. THE SUBMITTED CONTENT IS NEVER STORED. It is scanned in memory; what persists is the finding — its rule, its path and line, a MASKED preview (first and last characters kept, the middle starred) and the SHA-256 fingerprint of the raw secret. The fingerprint is what makes the same secret recognisable across scans and after rotation without the secret ever being written down. It requires a validated org, which scopes the stored scan and every finding on it; a caller with no org is refused. Bounded at 500 files and 8 MiB of total content per submission — split a larger tree across scans. One scan is one metered unit, and the scan is recorded in the audit log with its tally, never with its findings.
:param submit_req: (required)
:type submit_req: SubmitReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -1643,6 +1794,7 @@ class SecurityApi:
""" # noqa: E501
_param = self._post_v1_security_scans_serialize(
submit_req=submit_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -1650,6 +1802,7 @@ class SecurityApi:
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "ScanView",
}
response_data = self.api_client.call_api(
*_param,
@@ -1660,6 +1813,7 @@ class SecurityApi:
def _post_v1_security_scans_serialize(
self,
submit_req,
_request_auth,
_content_type,
_headers,
@@ -1685,9 +1839,31 @@ class SecurityApi:
# process the header parameters
# process the form parameters
# process the body parameter
if submit_req is not None:
_body_params = submit_req
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
+18 -18
View File
@@ -60,9 +60,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -126,9 +126,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -192,9 +192,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -1405,9 +1405,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -1471,9 +1471,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -1537,9 +1537,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param key: (required)
:type key: str
@@ -1957,9 +1957,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2019,9 +2019,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2081,9 +2081,9 @@ class TrackerApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Refuses — a board is a repository on the forge.
"""Refused — a board is a repository on the forge
Refuses — a board is a repository on the forge. It answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
Answers 405. A tracker board IS a repository on this deployment's forge, so creating, renaming and deleting one is a FORGE operation carried out with FORGE permissions. Offering it here would put a second door on the same object, guarded by this surface instead of by the forge — a weaker guard on the same thing. So the route exists and refuses, rather than 404ing: \"not this service's job\" and \"no such thing\" are different facts, and the body names the forge so a caller knows where the job IS done. What this surface DOES own is the work on a board: list the boards you can see, read and file their issues, move a card between columns, and roll milestones up across the org. Those are the routes beside this one.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+87
View File
@@ -58,6 +58,7 @@ from hanzoai.cloud.models.admin_referral_view import AdminReferralView
from hanzoai.cloud.models.admin_report_data import AdminReportData
from hanzoai.cloud.models.admin_report_out import AdminReportOut
from hanzoai.cloud.models.admin_summary import AdminSummary
from hanzoai.cloud.models.admission import Admission
from hanzoai.cloud.models.advance_in import AdvanceIn
from hanzoai.cloud.models.affiliate_board import AffiliateBoard
from hanzoai.cloud.models.affiliate_data import AffiliateData
@@ -71,6 +72,7 @@ from hanzoai.cloud.models.agent_detail import AgentDetail
from hanzoai.cloud.models.agent_list import AgentList
from hanzoai.cloud.models.agent_run_view import AgentRunView
from hanzoai.cloud.models.agent_view import AgentView
from hanzoai.cloud.models.ai_envelope import AiEnvelope
from hanzoai.cloud.models.ai_mcp_app import AiMCPApp
from hanzoai.cloud.models.ai_mcp_surface import AiMCPSurface
from hanzoai.cloud.models.ai_metrics import AiMetrics
@@ -85,10 +87,12 @@ from hanzoai.cloud.models.aim_usage import AimUsage
from hanzoai.cloud.models.aimetrics_out import AimetricsOut
from hanzoai.cloud.models.allowlist_put_in import AllowlistPutIn
from hanzoai.cloud.models.allowlist_view import AllowlistView
from hanzoai.cloud.models.analysis import Analysis
from hanzoai.cloud.models.analytics_data import AnalyticsData
from hanzoai.cloud.models.analytics_out import AnalyticsOut
from hanzoai.cloud.models.analytics_slice import AnalyticsSlice
from hanzoai.cloud.models.analytics_view import AnalyticsView
from hanzoai.cloud.models.analyze_query import AnalyzeQuery
from hanzoai.cloud.models.anchor_data import AnchorData
from hanzoai.cloud.models.anchor_out import AnchorOut
from hanzoai.cloud.models.anchor_status import AnchorStatus
@@ -128,6 +132,7 @@ from hanzoai.cloud.models.argo_summary import ArgoSummary
from hanzoai.cloud.models.argo_sync_status import ArgoSyncStatus
from hanzoai.cloud.models.argo_sync_windows import ArgoSyncWindows
from hanzoai.cloud.models.argo_tree import ArgoTree
from hanzoai.cloud.models.arm import Arm
from hanzoai.cloud.models.artifact import Artifact
from hanzoai.cloud.models.artifact_out import ArtifactOut
from hanzoai.cloud.models.artifacts_out import ArtifactsOut
@@ -135,6 +140,7 @@ from hanzoai.cloud.models.ask_answer import AskAnswer
from hanzoai.cloud.models.ask_post_in import AskPostIn
from hanzoai.cloud.models.ask_request import AskRequest
from hanzoai.cloud.models.ask_response import AskResponse
from hanzoai.cloud.models.assignment import Assignment
from hanzoai.cloud.models.attempt import Attempt
from hanzoai.cloud.models.attribute_request import AttributeRequest
from hanzoai.cloud.models.attribution import Attribution
@@ -171,6 +177,8 @@ from hanzoai.cloud.models.base_instance import BaseInstance
from hanzoai.cloud.models.bases_out import BasesOut
from hanzoai.cloud.models.basis_result import BasisResult
from hanzoai.cloud.models.begin_in import BeginIn
from hanzoai.cloud.models.benchmark import Benchmark
from hanzoai.cloud.models.benchmark_catalog import BenchmarkCatalog
from hanzoai.cloud.models.binary_spec import BinarySpec
from hanzoai.cloud.models.bind_agent_req import BindAgentReq
from hanzoai.cloud.models.binding_list import BindingList
@@ -184,9 +192,14 @@ from hanzoai.cloud.models.blueprint_index import BlueprintIndex
from hanzoai.cloud.models.blueprint_row import BlueprintRow
from hanzoai.cloud.models.blueprint_versions_view import BlueprintVersionsView
from hanzoai.cloud.models.blueprint_view import BlueprintView
from hanzoai.cloud.models.board import Board
from hanzoai.cloud.models.board_item import BoardItem
from hanzoai.cloud.models.board_page import BoardPage
from hanzoai.cloud.models.board_point import BoardPoint
from hanzoai.cloud.models.board_range import BoardRange
from hanzoai.cloud.models.board_resp import BoardResp
from hanzoai.cloud.models.board_scope import BoardScope
from hanzoai.cloud.models.board_totals import BoardTotals
from hanzoai.cloud.models.board_view import BoardView
from hanzoai.cloud.models.book_request import BookRequest
from hanzoai.cloud.models.book_response import BookResponse
@@ -353,6 +366,7 @@ from hanzoai.cloud.models.consumer_write import ConsumerWrite
from hanzoai.cloud.models.contact import Contact
from hanzoai.cloud.models.contact_list import ContactList
from hanzoai.cloud.models.contact_req import ContactReq
from hanzoai.cloud.models.contacts import Contacts
from hanzoai.cloud.models.context_bundle import ContextBundle
from hanzoai.cloud.models.context_in import ContextIn
from hanzoai.cloud.models.control_command_view import ControlCommandView
@@ -361,12 +375,14 @@ from hanzoai.cloud.models.cookie_ack import CookieAck
from hanzoai.cloud.models.cordon_in import CordonIn
from hanzoai.cloud.models.corpus_view import CorpusView
from hanzoai.cloud.models.cost import Cost
from hanzoai.cloud.models.cost_line import CostLine
from hanzoai.cloud.models.crawl_document import CrawlDocument
from hanzoai.cloud.models.crawl_request import CrawlRequest
from hanzoai.cloud.models.crawl_result import CrawlResult
from hanzoai.cloud.models.create_account_in import CreateAccountIn
from hanzoai.cloud.models.create_agent_in import CreateAgentIn
from hanzoai.cloud.models.create_app_req import CreateAppReq
from hanzoai.cloud.models.create_body import CreateBody
from hanzoai.cloud.models.create_cluster_req import CreateClusterReq
from hanzoai.cloud.models.create_cluster_req_node_pool import CreateClusterReqNodePool
from hanzoai.cloud.models.create_endpoint_in import CreateEndpointIn
@@ -413,11 +429,16 @@ from hanzoai.cloud.models.dataroom_room_detail_one import DataroomRoomDetailOne
from hanzoai.cloud.models.dataroom_room_one import DataroomRoomOne
from hanzoai.cloud.models.dataroom_rooms import DataroomRooms
from hanzoai.cloud.models.dataroom_stats import DataroomStats
from hanzoai.cloud.models.dataset_list import DatasetList
from hanzoai.cloud.models.dataset_req import DatasetReq
from hanzoai.cloud.models.dataset_view import DatasetView
from hanzoai.cloud.models.datastore_volume import DatastoreVolume
from hanzoai.cloud.models.day_count import DayCount
from hanzoai.cloud.models.decide_body import DecideBody
from hanzoai.cloud.models.decision_in import DecisionIn
from hanzoai.cloud.models.deck_out import DeckOut
from hanzoai.cloud.models.def_row import DefRow
from hanzoai.cloud.models.definition import Definition
from hanzoai.cloud.models.defs_out import DefsOut
from hanzoai.cloud.models.deleted_out import DeletedOut
from hanzoai.cloud.models.delivery_list import DeliveryList
@@ -488,11 +509,15 @@ from hanzoai.cloud.models.error_list import ErrorList
from hanzoai.cloud.models.esign_complete_in import EsignCompleteIn
from hanzoai.cloud.models.esign_out import EsignOut
from hanzoai.cloud.models.evaluate_in import EvaluateIn
from hanzoai.cloud.models.evaluator_list import EvaluatorList
from hanzoai.cloud.models.evaluator_req import EvaluatorReq
from hanzoai.cloud.models.evaluator_view import EvaluatorView
from hanzoai.cloud.models.event import Event
from hanzoai.cloud.models.event_list import EventList
from hanzoai.cloud.models.event_view import EventView
from hanzoai.cloud.models.exception import Exception
from hanzoai.cloud.models.experiment import Experiment
from hanzoai.cloud.models.experiment_list import ExperimentList
from hanzoai.cloud.models.experiments_out import ExperimentsOut
from hanzoai.cloud.models.extracted import Extracted
from hanzoai.cloud.models.fetch_query import FetchQuery
@@ -519,6 +544,8 @@ from hanzoai.cloud.models.finance_revenue import FinanceRevenue
from hanzoai.cloud.models.finance_usage_view import FinanceUsageView
from hanzoai.cloud.models.financial_package import FinancialPackage
from hanzoai.cloud.models.finding import Finding
from hanzoai.cloud.models.finding_list import FindingList
from hanzoai.cloud.models.finding_view import FindingView
from hanzoai.cloud.models.fingerprint_request import FingerprintRequest
from hanzoai.cloud.models.fingerprint_response import FingerprintResponse
from hanzoai.cloud.models.flags_out import FlagsOut
@@ -536,11 +563,14 @@ from hanzoai.cloud.models.flow_status import FlowStatus
from hanzoai.cloud.models.flow_trigger import FlowTrigger
from hanzoai.cloud.models.flow_update import FlowUpdate
from hanzoai.cloud.models.flow_version import FlowVersion
from hanzoai.cloud.models.fn_list import FnList
from hanzoai.cloud.models.formation import Formation
from hanzoai.cloud.models.formation_view import FormationView
from hanzoai.cloud.models.founder import Founder
from hanzoai.cloud.models.founders_in import FoundersIn
from hanzoai.cloud.models.frame import Frame
from hanzoai.cloud.models.function_detail import FunctionDetail
from hanzoai.cloud.models.function_view import FunctionView
from hanzoai.cloud.models.funnel import Funnel
from hanzoai.cloud.models.fwd_rule import FwdRule
from hanzoai.cloud.models.gl_row import GLRow
@@ -603,6 +633,8 @@ from hanzoai.cloud.models.help_category_list import HelpCategoryList
from hanzoai.cloud.models.help_ticket_filed import HelpTicketFiled
from hanzoai.cloud.models.help_ticket_intake import HelpTicketIntake
from hanzoai.cloud.models.hit import Hit
from hanzoai.cloud.models.holding import Holding
from hanzoai.cloud.models.holdings import Holdings
from hanzoai.cloud.models.host import Host
from hanzoai.cloud.models.iam_account_item import IamAccountItem
from hanzoai.cloud.models.iam_address import IamAddress
@@ -740,20 +772,28 @@ from hanzoai.cloud.models.install import Install
from hanzoai.cloud.models.install_req import InstallReq
from hanzoai.cloud.models.install_state import InstallState
from hanzoai.cloud.models.integrity import Integrity
from hanzoai.cloud.models.invocation_list import InvocationList
from hanzoai.cloud.models.invocation_view import InvocationView
from hanzoai.cloud.models.invoice_line_in import InvoiceLineIn
from hanzoai.cloud.models.invoice_out import InvoiceOut
from hanzoai.cloud.models.invoice_row import InvoiceRow
from hanzoai.cloud.models.invoices_out import InvoicesOut
from hanzoai.cloud.models.invoke_req import InvokeReq
from hanzoai.cloud.models.issue_edit import IssueEdit
from hanzoai.cloud.models.issue_request import IssueRequest
from hanzoai.cloud.models.issue_response import IssueResponse
from hanzoai.cloud.models.issue_view import IssueView
from hanzoai.cloud.models.item_list import ItemList
from hanzoai.cloud.models.item_req import ItemReq
from hanzoai.cloud.models.item_result import ItemResult
from hanzoai.cloud.models.item_view import ItemView
from hanzoai.cloud.models.jwk import JWK
from hanzoai.cloud.models.job_cancel import JobCancel
from hanzoai.cloud.models.job_canceled import JobCanceled
from hanzoai.cloud.models.job_list import JobList
from hanzoai.cloud.models.journal_entry import JournalEntry
from hanzoai.cloud.models.journey_step import JourneyStep
from hanzoai.cloud.models.judge_spec import JudgeSpec
from hanzoai.cloud.models.kb_authorize_out import KbAuthorizeOut
from hanzoai.cloud.models.kb_connectors_out import KbConnectorsOut
from hanzoai.cloud.models.kb_sync_out import KbSyncOut
@@ -772,8 +812,11 @@ from hanzoai.cloud.models.kyc_start_out import KycStartOut
from hanzoai.cloud.models.llm import LLM
from hanzoai.cloud.models.llm_overview import LLMOverview
from hanzoai.cloud.models.last_event_view import LastEventView
from hanzoai.cloud.models.latency_stat import LatencyStat
from hanzoai.cloud.models.lb_list import LbList
from hanzoai.cloud.models.lb_view import LbView
from hanzoai.cloud.models.leader_row import LeaderRow
from hanzoai.cloud.models.leaderboard import Leaderboard
from hanzoai.cloud.models.leaderboard_row import LeaderboardRow
from hanzoai.cloud.models.leaderboard_view import LeaderboardView
from hanzoai.cloud.models.lease_in import LeaseIn
@@ -798,6 +841,7 @@ from hanzoai.cloud.models.liveness import Liveness
from hanzoai.cloud.models.load_balancer import LoadBalancer
from hanzoai.cloud.models.location import Location
from hanzoai.cloud.models.log_body import LogBody
from hanzoai.cloud.models.log_lines import LogLines
from hanzoai.cloud.models.loss import Loss
from hanzoai.cloud.models.mcp_listing import MCPListing
from hanzoai.cloud.models.mcp_package import MCPPackage
@@ -838,6 +882,7 @@ from hanzoai.cloud.models.ml_resource import MlResource
from hanzoai.cloud.models.ml_resource_list import MlResourceList
from hanzoai.cloud.models.model_field import ModelField
from hanzoai.cloud.models.model_row import ModelRow
from hanzoai.cloud.models.model_stat import ModelStat
from hanzoai.cloud.models.module_info import ModuleInfo
from hanzoai.cloud.models.module_list import ModuleList
from hanzoai.cloud.models.module_state import ModuleState
@@ -1657,6 +1702,7 @@ from hanzoai.cloud.models.o11y_webex_config import O11yWebexConfig
from hanzoai.cloud.models.o11y_webhook_config import O11yWebhookConfig
from hanzoai.cloud.models.o11y_wechat_config import O11yWechatConfig
from hanzoai.cloud.models.oauth_bundle_in import OauthBundleIn
from hanzoai.cloud.models.offer import Offer
from hanzoai.cloud.models.onboard_req import OnboardReq
from hanzoai.cloud.models.onboard_resp import OnboardResp
from hanzoai.cloud.models.open_req import OpenReq
@@ -1667,12 +1713,14 @@ from hanzoai.cloud.models.opportunity import Opportunity
from hanzoai.cloud.models.optin_view import OptinView
from hanzoai.cloud.models.oracle_view import OracleView
from hanzoai.cloud.models.oracles_out import OraclesOut
from hanzoai.cloud.models.order import Order
from hanzoai.cloud.models.org_earning_view import OrgEarningView
from hanzoai.cloud.models.org_optin_req import OrgOptinReq
from hanzoai.cloud.models.org_optin_view import OrgOptinView
from hanzoai.cloud.models.org_row import OrgRow
from hanzoai.cloud.models.org_view import OrgView
from hanzoai.cloud.models.orgs_out import OrgsOut
from hanzoai.cloud.models.outcome import Outcome
from hanzoai.cloud.models.overlay import Overlay
from hanzoai.cloud.models.overview import Overview
from hanzoai.cloud.models.overview_data import OverviewData
@@ -1687,6 +1735,7 @@ from hanzoai.cloud.models.pages_env_var import PagesEnvVar
from hanzoai.cloud.models.pages_kv_binding import PagesKVBinding
from hanzoai.cloud.models.pages_project_create import PagesProjectCreate
from hanzoai.cloud.models.pages_r2_binding import PagesR2Binding
from hanzoai.cloud.models.pairing import Pairing
from hanzoai.cloud.models.pairing_approved import PairingApproved
from hanzoai.cloud.models.pairing_queue import PairingQueue
from hanzoai.cloud.models.pairing_view import PairingView
@@ -1726,6 +1775,7 @@ from hanzoai.cloud.models.plugin_mount import PluginMount
from hanzoai.cloud.models.plugin_mount_list import PluginMountList
from hanzoai.cloud.models.pn_l import PnL
from hanzoai.cloud.models.pn_l_line import PnLLine
from hanzoai.cloud.models.point_view import PointView
from hanzoai.cloud.models.policy import Policy
from hanzoai.cloud.models.policy_data import PolicyData
from hanzoai.cloud.models.policy_out import PolicyOut
@@ -1738,6 +1788,9 @@ from hanzoai.cloud.models.post_list import PostList
from hanzoai.cloud.models.post_v1_event_request import PostV1EventRequest
from hanzoai.cloud.models.posting import Posting
from hanzoai.cloud.models.prefs_view import PrefsView
from hanzoai.cloud.models.preset import Preset
from hanzoai.cloud.models.preset_accepted import PresetAccepted
from hanzoai.cloud.models.preset_list import PresetList
from hanzoai.cloud.models.preview_req import PreviewReq
from hanzoai.cloud.models.preview_view import PreviewView
from hanzoai.cloud.models.price import Price
@@ -1822,12 +1875,14 @@ from hanzoai.cloud.models.query import Query
from hanzoai.cloud.models.question import Question
from hanzoai.cloud.models.questions_response import QuestionsResponse
from hanzoai.cloud.models.quote import Quote
from hanzoai.cloud.models.quote_list import QuoteList
from hanzoai.cloud.models.raise_invoice_in import RaiseInvoiceIn
from hanzoai.cloud.models.ran import Ran
from hanzoai.cloud.models.range import Range
from hanzoai.cloud.models.rate_card import RateCard
from hanzoai.cloud.models.rate_set import RateSet
from hanzoai.cloud.models.raw_out import RawOut
from hanzoai.cloud.models.reachability import Reachability
from hanzoai.cloud.models.read_out import ReadOut
from hanzoai.cloud.models.readiness import Readiness
from hanzoai.cloud.models.reading_req import ReadingReq
@@ -1862,6 +1917,8 @@ from hanzoai.cloud.models.register_counts import RegisterCounts
from hanzoai.cloud.models.register_key_req import RegisterKeyReq
from hanzoai.cloud.models.register_page import RegisterPage
from hanzoai.cloud.models.register_req import RegisterReq
from hanzoai.cloud.models.register_result import RegisterResult
from hanzoai.cloud.models.registrant import Registrant
from hanzoai.cloud.models.registration import Registration
from hanzoai.cloud.models.registration_view import RegistrationView
from hanzoai.cloud.models.registry_image import RegistryImage
@@ -1881,6 +1938,8 @@ from hanzoai.cloud.models.release_row import ReleaseRow
from hanzoai.cloud.models.release_state import ReleaseState
from hanzoai.cloud.models.reload_in import ReloadIn
from hanzoai.cloud.models.remittance import Remittance
from hanzoai.cloud.models.renew_req import RenewReq
from hanzoai.cloud.models.renew_result import RenewResult
from hanzoai.cloud.models.replace_kit_in import ReplaceKitIn
from hanzoai.cloud.models.replay_body import ReplayBody
from hanzoai.cloud.models.repo_list import RepoList
@@ -1976,15 +2035,22 @@ from hanzoai.cloud.models.routed_usage import RoutedUsage
from hanzoai.cloud.models.router_list import RouterList
from hanzoai.cloud.models.router_view import RouterView
from hanzoai.cloud.models.rule import Rule
from hanzoai.cloud.models.rule_list import RuleList
from hanzoai.cloud.models.rule_view import RuleView
from hanzoai.cloud.models.rules_out import RulesOut
from hanzoai.cloud.models.ruleset import Ruleset
from hanzoai.cloud.models.run_in import RunIn
from hanzoai.cloud.models.run_list import RunList
from hanzoai.cloud.models.run_page import RunPage
from hanzoai.cloud.models.run_record import RunRecord
from hanzoai.cloud.models.run_req import RunReq
from hanzoai.cloud.models.run_request import RunRequest
from hanzoai.cloud.models.run_resp import RunResp
from hanzoai.cloud.models.run_summary import RunSummary
from hanzoai.cloud.models.run_view import RunView
from hanzoai.cloud.models.runner_build_req import RunnerBuildReq
from hanzoai.cloud.models.runner_build_resp import RunnerBuildResp
from hanzoai.cloud.models.runs import Runs
from hanzoai.cloud.models.saa_s_category import SaaSCategory
from hanzoai.cloud.models.saa_s_customer import SaaSCustomer
from hanzoai.cloud.models.saa_s_event import SaaSEvent
@@ -2006,9 +2072,19 @@ from hanzoai.cloud.models.sbom_health import SbomHealth
from hanzoai.cloud.models.sbom_ingest import SbomIngest
from hanzoai.cloud.models.sbom_ingested import SbomIngested
from hanzoai.cloud.models.scale_in import ScaleIn
from hanzoai.cloud.models.scan import Scan
from hanzoai.cloud.models.scan_detail import ScanDetail
from hanzoai.cloud.models.scan_draft import ScanDraft
from hanzoai.cloud.models.scan_list import ScanList
from hanzoai.cloud.models.scan_view import ScanView
from hanzoai.cloud.models.schedule_input import ScheduleInput
from hanzoai.cloud.models.scope import Scope
from hanzoai.cloud.models.score_config_list import ScoreConfigList
from hanzoai.cloud.models.score_config_req import ScoreConfigReq
from hanzoai.cloud.models.score_config_view import ScoreConfigView
from hanzoai.cloud.models.score_list import ScoreList
from hanzoai.cloud.models.score_req import ScoreReq
from hanzoai.cloud.models.score_view import ScoreView
from hanzoai.cloud.models.screen_result import ScreenResult
from hanzoai.cloud.models.search_in import SearchIn
from hanzoai.cloud.models.search_index import SearchIndex
@@ -2016,6 +2092,8 @@ from hanzoai.cloud.models.search_index_list import SearchIndexList
from hanzoai.cloud.models.search_out import SearchOut
from hanzoai.cloud.models.search_results import SearchResults
from hanzoai.cloud.models.search_stats import SearchStats
from hanzoai.cloud.models.secret_list import SecretList
from hanzoai.cloud.models.secret_view import SecretView
from hanzoai.cloud.models.section import Section
from hanzoai.cloud.models.seed_data import SeedData
from hanzoai.cloud.models.seed_out import SeedOut
@@ -2084,6 +2162,7 @@ from hanzoai.cloud.models.stats_out import StatsOut
from hanzoai.cloud.models.stats_sessions import StatsSessions
from hanzoai.cloud.models.stats_user import StatsUser
from hanzoai.cloud.models.status import Status
from hanzoai.cloud.models.status_breakdown import StatusBreakdown
from hanzoai.cloud.models.status_counts import StatusCounts
from hanzoai.cloud.models.status_view import StatusView
from hanzoai.cloud.models.step import Step
@@ -2112,6 +2191,7 @@ from hanzoai.cloud.models.subject import Subject
from hanzoai.cloud.models.subject_list import SubjectList
from hanzoai.cloud.models.subject_req import SubjectReq
from hanzoai.cloud.models.subject_summary import SubjectSummary
from hanzoai.cloud.models.submit_req import SubmitReq
from hanzoai.cloud.models.subscribe_req import SubscribeReq
from hanzoai.cloud.models.subscription_list import SubscriptionList
from hanzoai.cloud.models.subscription_row import SubscriptionRow
@@ -2123,6 +2203,7 @@ from hanzoai.cloud.models.subsystem_totals import SubsystemTotals
from hanzoai.cloud.models.subsystems_out import SubsystemsOut
from hanzoai.cloud.models.suggest_response import SuggestResponse
from hanzoai.cloud.models.suggestion import Suggestion
from hanzoai.cloud.models.suite import Suite
from hanzoai.cloud.models.summary import Summary
from hanzoai.cloud.models.summary_resp import SummaryResp
from hanzoai.cloud.models.summary_view import SummaryView
@@ -2166,11 +2247,14 @@ from hanzoai.cloud.models.top_models import TopModels
from hanzoai.cloud.models.top_products import TopProducts
from hanzoai.cloud.models.total_view import TotalView
from hanzoai.cloud.models.totals import Totals
from hanzoai.cloud.models.trace_list import TraceList
from hanzoai.cloud.models.trace_view import TraceView
from hanzoai.cloud.models.tracker_project import TrackerProject
from hanzoai.cloud.models.traffic_caller import TrafficCaller
from hanzoai.cloud.models.traffic_view import TrafficView
from hanzoai.cloud.models.trail_page import TrailPage
from hanzoai.cloud.models.transactions_out import TransactionsOut
from hanzoai.cloud.models.transfer_req import TransferReq
from hanzoai.cloud.models.transition_in import TransitionIn
from hanzoai.cloud.models.transition_result import TransitionResult
from hanzoai.cloud.models.treasury_report import TreasuryReport
@@ -2178,8 +2262,11 @@ from hanzoai.cloud.models.tree_entry import TreeEntry
from hanzoai.cloud.models.tree_entry_json import TreeEntryJSON
from hanzoai.cloud.models.tree_json import TreeJSON
from hanzoai.cloud.models.tree_node import TreeNode
from hanzoai.cloud.models.trial import Trial
from hanzoai.cloud.models.trial_balance import TrialBalance
from hanzoai.cloud.models.trial_balance_row import TrialBalanceRow
from hanzoai.cloud.models.trigger_list import TriggerList
from hanzoai.cloud.models.trigger_view import TriggerView
from hanzoai.cloud.models.txn import Txn
from hanzoai.cloud.models.utm import UTM
from hanzoai.cloud.models.unlinked_view import UnlinkedView
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Admission(BaseModel):
"""
Admission
""" # noqa: E501
benchmarks: Optional[List[StrictStr]] = Field(default=None, description="Benchmarks are the catalog ids admitted.")
endpoint: Optional[StrictStr] = Field(default=None, description="Endpoint is the caller's own endpoint the run targets.")
model: Optional[StrictStr] = Field(default=None, description="Model is the catalog model the run targets.")
note: Optional[StrictStr] = Field(default=None, description="Note explains what admission does and does not promise.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"queued\": the run is admitted, not finished.")
__properties: ClassVar[List[str]] = ["benchmarks", "endpoint", "model", "note", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Admission from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Admission from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"benchmarks": obj.get("benchmarks"),
"endpoint": obj.get("endpoint"),
"model": obj.get("model"),
"note": obj.get("note"),
"status": obj.get("status")
})
return _obj
+110
View File
@@ -0,0 +1,110 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class AiEnvelope(BaseModel):
"""
The resource surface's response. `status` is the verdict, not the HTTP code: a handled failure is still 200.
""" # noqa: E501
data: Optional[Any] = None
data2: Optional[Any] = None
msg: StrictStr = Field(description="Empty on success, the reason on failure.")
status: StrictStr
__properties: ClassVar[List[str]] = ["data", "data2", "msg", "status"]
@field_validator('status')
def status_validate_enum(cls, value):
"""Validates the enum"""
if value not in set(['ok', 'error']):
raise ValueError("must be one of enum values ('ok', 'error')")
return value
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of AiEnvelope from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# set to None if data (nullable) is None
# and model_fields_set contains the field
if self.data is None and "data" in self.model_fields_set:
_dict['data'] = None
# set to None if data2 (nullable) is None
# and model_fields_set contains the field
if self.data2 is None and "data2" in self.model_fields_set:
_dict['data2'] = None
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of AiEnvelope from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": obj.get("data"),
"data2": obj.get("data2"),
"msg": obj.get("msg"),
"status": obj.get("status")
})
return _obj
+105
View File
@@ -0,0 +1,105 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from hanzoai.cloud.models.outcome import Outcome
from typing import Optional, Set
from typing_extensions import Self
class Analysis(BaseModel):
"""
Analysis
""" # noqa: E501
alpha: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="the two-tailed threshold significance was judged at")
experiment: Optional[StrictStr] = Field(default=None, description="the experiment that was analysed")
exposed_total: Optional[StrictInt] = Field(default=None, description="subjects enrolled across every arm", alias="exposedTotal")
metric: Optional[StrictStr] = Field(default=None, description="the event a conversion is counted from")
results: Optional[List[Outcome]] = Field(default=None, description="one row per declared arm, control first")
winner: Optional[StrictStr] = Field(default=None, description="ADVISORY: the significant, control-beating arm with the highest rate, else empty")
__properties: ClassVar[List[str]] = ["alpha", "experiment", "exposedTotal", "metric", "results", "winner"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Analysis from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in results (list)
_items = []
if self.results:
for _item_results in self.results:
if _item_results:
_items.append(_item_results.to_dict())
_dict['results'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Analysis from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"alpha": obj.get("alpha"),
"experiment": obj.get("experiment"),
"exposedTotal": obj.get("exposedTotal"),
"metric": obj.get("metric"),
"results": [Outcome.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None,
"winner": obj.get("winner")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class AnalyzeQuery(BaseModel):
"""
AnalyzeQuery
""" # noqa: E501
alpha: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Alpha overrides the 0.05 two-tailed significance threshold when it lies strictly between 0 and 1; anything else leaves the default in place.")
days: Optional[StrictInt] = Field(default=None, description="Days is how far back to read when no start is given: 1 to 365, 30 by default. A value outside that range leaves the default in place.")
end: Optional[StrictStr] = Field(default=None, description="End is the window's exclusive end in RFC3339, defaulting to now.")
id: Optional[StrictStr] = Field(default=None, description="ID is the experiment the URL names.")
start: Optional[StrictStr] = Field(default=None, description="Start is the window's inclusive start in RFC3339. Given, it wins over days.")
__properties: ClassVar[List[str]] = ["alpha", "days", "end", "id", "start"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of AnalyzeQuery from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of AnalyzeQuery from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"alpha": obj.get("alpha"),
"days": obj.get("days"),
"end": obj.get("end"),
"id": obj.get("id"),
"start": obj.get("start")
})
return _obj
+98
View File
@@ -0,0 +1,98 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class Arm(BaseModel):
"""
Arm
""" # noqa: E501
control: Optional[StrictBool] = Field(default=None, description="true on the baseline arm every other arm is compared to")
key: Optional[StrictStr] = Field(default=None, description="the arm's slug, unique within the experiment")
payload: Optional[Any] = None
weight: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="its share of the rollout; the arms sum to 100")
__properties: ClassVar[List[str]] = ["control", "key", "payload", "weight"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Arm from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# set to None if payload (nullable) is None
# and model_fields_set contains the field
if self.payload is None and "payload" in self.model_fields_set:
_dict['payload'] = None
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Arm from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"control": obj.get("control"),
"key": obj.get("key"),
"payload": obj.get("payload"),
"weight": obj.get("weight")
})
return _obj
+100
View File
@@ -0,0 +1,100 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Assignment(BaseModel):
"""
Assignment
""" # noqa: E501
experiment: Optional[StrictStr] = Field(default=None, description="Trial is the experiment that was evaluated.")
on: Optional[StrictBool] = Field(default=None, description="On is false when the flag returned nothing for this subject, which means the subject is not enrolled — not an error.")
payload: Optional[Any] = None
subject: Optional[StrictStr] = Field(default=None, description="Subject is the unit that was bucketed.")
variant: Optional[StrictStr] = Field(default=None, description="Arm is the arm the subject falls in, empty when the flag enrolled it in none.")
__properties: ClassVar[List[str]] = ["experiment", "on", "payload", "subject", "variant"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Assignment from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# set to None if payload (nullable) is None
# and model_fields_set contains the field
if self.payload is None and "payload" in self.model_fields_set:
_dict['payload'] = None
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Assignment from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"experiment": obj.get("experiment"),
"on": obj.get("on"),
"payload": obj.get("payload"),
"subject": obj.get("subject"),
"variant": obj.get("variant")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Benchmark(BaseModel):
"""
Benchmark
""" # noqa: E501
axis: Optional[StrictStr] = Field(default=None, description="what capability it measures")
id: Optional[StrictStr] = Field(default=None, description="the id every other op on this surface takes")
items: Optional[StrictInt] = Field(default=None, description="how many items it holds, when the set is fixed")
native: Optional[StrictBool] = Field(default=None, description="whether the standardized harness runs it today")
source: Optional[StrictStr] = Field(default=None, description="where the items come from")
title: Optional[StrictStr] = Field(default=None, description="the benchmark's published name")
__properties: ClassVar[List[str]] = ["axis", "id", "items", "native", "source", "title"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Benchmark from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Benchmark from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"axis": obj.get("axis"),
"id": obj.get("id"),
"items": obj.get("items"),
"native": obj.get("native"),
"source": obj.get("source"),
"title": obj.get("title")
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.benchmark import Benchmark
from typing import Optional, Set
from typing_extensions import Self
class BenchmarkCatalog(BaseModel):
"""
BenchmarkCatalog
""" # noqa: E501
data: Optional[List[Benchmark]] = Field(default=None, description="Data is one row per benchmark, in the catalog's own order.")
total: Optional[StrictInt] = Field(default=None, description="Total is how many rows Data holds.")
__properties: ClassVar[List[str]] = ["data", "total"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of BenchmarkCatalog from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of BenchmarkCatalog from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [Benchmark.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None,
"total": obj.get("total")
})
return _obj
+134
View File
@@ -0,0 +1,134 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.board_point import BoardPoint
from hanzoai.cloud.models.board_range import BoardRange
from hanzoai.cloud.models.board_scope import BoardScope
from hanzoai.cloud.models.board_totals import BoardTotals
from hanzoai.cloud.models.latency_stat import LatencyStat
from hanzoai.cloud.models.model_stat import ModelStat
from typing import Optional, Set
from typing_extensions import Self
class Board(BaseModel):
"""
Board
""" # noqa: E501
by_model: Optional[List[ModelStat]] = Field(default=None, description="the top models by spend", alias="byModel")
latency: Optional[LatencyStat] = Field(default=None, description="overall latency percentiles from the GenAI spans")
other: Optional[ModelStat] = Field(default=None, description="the long tail beyond the top models, folded into one row")
range: Optional[BoardRange] = Field(default=None, description="the window they were computed over, echoed back")
scope: Optional[BoardScope] = Field(default=None, description="whose numbers these are")
series: Optional[List[BoardPoint]] = Field(default=None, description="one gap-filled bucket per interval, so a chart never breaks")
totals: Optional[BoardTotals] = Field(default=None, description="the window's headline numbers")
__properties: ClassVar[List[str]] = ["byModel", "latency", "other", "range", "scope", "series", "totals"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Board from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in by_model (list)
_items = []
if self.by_model:
for _item_by_model in self.by_model:
if _item_by_model:
_items.append(_item_by_model.to_dict())
_dict['byModel'] = _items
# override the default output from pydantic by calling `to_dict()` of latency
if self.latency:
_dict['latency'] = self.latency.to_dict()
# override the default output from pydantic by calling `to_dict()` of other
if self.other:
_dict['other'] = self.other.to_dict()
# override the default output from pydantic by calling `to_dict()` of range
if self.range:
_dict['range'] = self.range.to_dict()
# override the default output from pydantic by calling `to_dict()` of scope
if self.scope:
_dict['scope'] = self.scope.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in series (list)
_items = []
if self.series:
for _item_series in self.series:
if _item_series:
_items.append(_item_series.to_dict())
_dict['series'] = _items
# override the default output from pydantic by calling `to_dict()` of totals
if self.totals:
_dict['totals'] = self.totals.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Board from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"byModel": [ModelStat.from_dict(_item) for _item in obj["byModel"]] if obj.get("byModel") is not None else None,
"latency": LatencyStat.from_dict(obj["latency"]) if obj.get("latency") is not None else None,
"other": ModelStat.from_dict(obj["other"]) if obj.get("other") is not None else None,
"range": BoardRange.from_dict(obj["range"]) if obj.get("range") is not None else None,
"scope": BoardScope.from_dict(obj["scope"]) if obj.get("scope") is not None else None,
"series": [BoardPoint.from_dict(_item) for _item in obj["series"]] if obj.get("series") is not None else None,
"totals": BoardTotals.from_dict(obj["totals"]) if obj.get("totals") is not None else None
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class BoardPoint(BaseModel):
"""
BoardPoint
""" # noqa: E501
cost_cents: Optional[StrictInt] = Field(default=None, description="what this bucket cost, in cents", alias="costCents")
errors: Optional[StrictInt] = Field(default=None, description="calls in this bucket that did not succeed")
generations: Optional[StrictInt] = Field(default=None, description="model calls in this bucket")
t: Optional[StrictStr] = Field(default=None, description="RFC3339 (UTC) bucket start")
total_tokens: Optional[StrictInt] = Field(default=None, description="tokens in this bucket", alias="totalTokens")
__properties: ClassVar[List[str]] = ["costCents", "errors", "generations", "t", "totalTokens"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of BoardPoint from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of BoardPoint from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"costCents": obj.get("costCents"),
"errors": obj.get("errors"),
"generations": obj.get("generations"),
"t": obj.get("t"),
"totalTokens": obj.get("totalTokens")
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class BoardRange(BaseModel):
"""
BoardRange
""" # noqa: E501
end: Optional[StrictStr] = Field(default=None, description="RFC3339 (UTC)")
interval: Optional[StrictStr] = Field(default=None, description="hour | day")
range: Optional[StrictStr] = Field(default=None, description="echoed label (24h | 7d | 30d | custom)")
start: Optional[StrictStr] = Field(default=None, description="RFC3339 (UTC)")
__properties: ClassVar[List[str]] = ["end", "interval", "range", "start"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of BoardRange from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of BoardRange from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"end": obj.get("end"),
"interval": obj.get("interval"),
"range": obj.get("range"),
"start": obj.get("start")
})
return _obj
+91
View File
@@ -0,0 +1,91 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class BoardScope(BaseModel):
"""
BoardScope
""" # noqa: E501
all_orgs: Optional[StrictBool] = Field(default=None, description="true when a platform admin is seeing every org at once", alias="allOrgs")
org: Optional[StrictStr] = Field(default=None, description="the org the board covers; \"\" when it covers all of them")
project: Optional[StrictStr] = Field(default=None, description="the sub-scope within the org; \"\" is the whole org")
__properties: ClassVar[List[str]] = ["allOrgs", "org", "project"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of BoardScope from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of BoardScope from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"allOrgs": obj.get("allOrgs"),
"org": obj.get("org"),
"project": obj.get("project")
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class BoardTotals(BaseModel):
"""
BoardTotals
""" # noqa: E501
completion_tokens: Optional[StrictInt] = Field(default=None, description="tokens the models answered with", alias="completionTokens")
cost_cents: Optional[StrictInt] = Field(default=None, description="what the window cost, in cents", alias="costCents")
errors: Optional[StrictInt] = Field(default=None, description="calls that did not succeed")
generations: Optional[StrictInt] = Field(default=None, description="how many model calls the window holds")
models: Optional[StrictInt] = Field(default=None, description="how many distinct models were called")
prompt_tokens: Optional[StrictInt] = Field(default=None, description="tokens sent to the models", alias="promptTokens")
success_rate: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="share of calls that succeeded, 0..1", alias="successRate")
total_tokens: Optional[StrictInt] = Field(default=None, description="prompt plus completion", alias="totalTokens")
users: Optional[StrictInt] = Field(default=None, description="how many distinct users called them")
__properties: ClassVar[List[str]] = ["completionTokens", "costCents", "errors", "generations", "models", "promptTokens", "successRate", "totalTokens", "users"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of BoardTotals from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of BoardTotals from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"completionTokens": obj.get("completionTokens"),
"costCents": obj.get("costCents"),
"errors": obj.get("errors"),
"generations": obj.get("generations"),
"models": obj.get("models"),
"promptTokens": obj.get("promptTokens"),
"successRate": obj.get("successRate"),
"totalTokens": obj.get("totalTokens"),
"users": obj.get("users")
})
return _obj
+106
View File
@@ -0,0 +1,106 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.registrant import Registrant
from typing import Optional, Set
from typing_extensions import Self
class Contacts(BaseModel):
"""
Contacts
""" # noqa: E501
admin: Optional[Registrant] = Field(default=None, description="who administers it")
billing: Optional[Registrant] = Field(default=None, description="who is reached about payment")
registrant: Optional[Registrant] = Field(default=None, description="who owns the domain")
tech: Optional[Registrant] = Field(default=None, description="who is reached about technical matters")
__properties: ClassVar[List[str]] = ["admin", "billing", "registrant", "tech"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Contacts from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of admin
if self.admin:
_dict['admin'] = self.admin.to_dict()
# override the default output from pydantic by calling `to_dict()` of billing
if self.billing:
_dict['billing'] = self.billing.to_dict()
# override the default output from pydantic by calling `to_dict()` of registrant
if self.registrant:
_dict['registrant'] = self.registrant.to_dict()
# override the default output from pydantic by calling `to_dict()` of tech
if self.tech:
_dict['tech'] = self.tech.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Contacts from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"admin": Registrant.from_dict(obj["admin"]) if obj.get("admin") is not None else None,
"billing": Registrant.from_dict(obj["billing"]) if obj.get("billing") is not None else None,
"registrant": Registrant.from_dict(obj["registrant"]) if obj.get("registrant") is not None else None,
"tech": Registrant.from_dict(obj["tech"]) if obj.get("tech") is not None else None
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.point_view import PointView
from typing import Optional, Set
from typing_extensions import Self
class CostLine(BaseModel):
"""
CostLine
""" # noqa: E501
key: Optional[StrictStr] = Field(default=None, description="the function the line is about")
points: Optional[List[PointView]] = Field(default=None, description="one point per bucket, oldest first")
__properties: ClassVar[List[str]] = ["key", "points"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of CostLine from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in points (list)
_items = []
if self.points:
for _item_points in self.points:
if _item_points:
_items.append(_item_points.to_dict())
_dict['points'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of CostLine from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"key": obj.get("key"),
"points": [PointView.from_dict(_item) for _item in obj["points"]] if obj.get("points") is not None else None
})
return _obj
+107
View File
@@ -0,0 +1,107 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.arm import Arm
from typing import Optional, Set
from typing_extensions import Self
class CreateBody(BaseModel):
"""
CreateBody
""" # noqa: E501
exposure_event: Optional[StrictStr] = Field(default=None, description="ExposureEvent is the event that marks a subject as enrolled — the analysis denominator — defaulting to the SDK's $feature_flag_called marker.", alias="exposureEvent")
flag_key: Optional[StrictStr] = Field(default=None, description="FlagKey names the assignment flag this experiment writes, defaulting to exp_<id>. It must be a slug.", alias="flagKey")
id: StrictStr = Field(description="ID is the experiment's slug, claimed once per project. It must match [A-Za-z0-9][A-Za-z0-9._-]{0,127}.")
metric_event: StrictStr = Field(description="MetricEvent is the event that counts as a conversion — the analysis numerator.", alias="metricEvent")
name: Optional[StrictStr] = Field(default=None, description="Name is free text for a reader; the id is what addresses the experiment.")
subject_kind: Optional[StrictStr] = Field(default=None, description="SubjectKind is the unit assigned and measured: user (the default), org, session or audience.", alias="subjectKind")
variants: List[Arm] = Field(description="Arms are the arms, at least two. Weights that are all zero become an even split; otherwise they must sum to 100, and at most one arm may be flagged control.")
__properties: ClassVar[List[str]] = ["exposureEvent", "flagKey", "id", "metricEvent", "name", "subjectKind", "variants"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of CreateBody from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in variants (list)
_items = []
if self.variants:
for _item_variants in self.variants:
if _item_variants:
_items.append(_item_variants.to_dict())
_dict['variants'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of CreateBody from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"exposureEvent": obj.get("exposureEvent"),
"flagKey": obj.get("flagKey"),
"id": obj.get("id"),
"metricEvent": obj.get("metricEvent"),
"name": obj.get("name"),
"subjectKind": obj.get("subjectKind"),
"variants": [Arm.from_dict(_item) for _item in obj["variants"]] if obj.get("variants") is not None else None
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.dataset_view import DatasetView
from typing import Optional, Set
from typing_extensions import Self
class DatasetList(BaseModel):
"""
DatasetList
""" # noqa: E501
data: Optional[List[DatasetView]] = Field(default=None, description="Data is the caller org's datasets, newest first, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DatasetList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DatasetList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [DatasetView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+91
View File
@@ -0,0 +1,91 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DatasetReq(BaseModel):
"""
DatasetReq
""" # noqa: E501
description: Optional[StrictStr] = Field(default=None, description="Description is free text about what this set measures; over 64 KiB is refused.")
metadata: Optional[Dict[str, Dict[str, Any]]] = Field(default=None, description="Metadata is a free-form object stored with the set and echoed back verbatim.")
name: StrictStr = Field(description="Name is the dataset's org-unique handle and the segment that will address it, so it must match ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$.")
__properties: ClassVar[List[str]] = ["description", "metadata", "name"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DatasetReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DatasetReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"description": obj.get("description"),
"metadata": obj.get("metadata"),
"name": obj.get("name")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DatasetView(BaseModel):
"""
DatasetView
""" # noqa: E501
created_at: Optional[StrictStr] = Field(default=None, description="CreatedAt is when the name was first written, kept across later edits.", alias="createdAt")
description: Optional[StrictStr] = Field(default=None, description="Description is free text the org wrote about what this set measures.")
items: Optional[StrictInt] = Field(default=None, description="Items is how many examples the set holds. It is filled only by the single read — a listing does not count, so it is absent there rather than zero.")
metadata: Optional[Dict[str, Dict[str, Any]]] = Field(default=None, description="Metadata is the free-form object stored with the set, echoed back verbatim.")
name: Optional[StrictStr] = Field(default=None, description="Name is the dataset's org-unique handle and the segment that addresses it.")
updated_at: Optional[StrictStr] = Field(default=None, description="UpdatedAt is when the description or metadata last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["createdAt", "description", "items", "metadata", "name", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DatasetView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DatasetView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"description": obj.get("description"),
"items": obj.get("items"),
"metadata": obj.get("metadata"),
"name": obj.get("name"),
"updatedAt": obj.get("updatedAt")
})
return _obj
+87
View File
@@ -0,0 +1,87 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List
from typing import Optional, Set
from typing_extensions import Self
class DecideBody(BaseModel):
"""
DecideBody
""" # noqa: E501
winner: StrictStr = Field(description="Winner is the variant to promote. It must name one of this experiment's own arms.")
__properties: ClassVar[List[str]] = ["winner"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DecideBody from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DecideBody from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"winner": obj.get("winner")
})
return _obj
+107
View File
@@ -0,0 +1,107 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Definition(BaseModel):
"""
Definition
""" # noqa: E501
code: Optional[StrictStr] = Field(default=None, description="Code is the source to run, capped so one function cannot amplify the store.")
env_names: Optional[List[StrictStr]] = Field(default=None, description="EnvNames are the secret NAMES to mount. Values live in the secret store and are never carried here.", alias="envNames")
environment: Optional[StrictStr] = Field(default=None, description="Environment is a second spelling of runtime, accepted so a console that says \"environment\" needs no translation.")
handler: Optional[StrictStr] = Field(default=None, description="Handler is the entry point within the code.")
image: Optional[StrictStr] = Field(default=None, description="Image names a prebuilt image to run instead of source.")
memory_limit: Optional[StrictStr] = Field(default=None, description="MemoryLimit is the memory the function runs with, defaulting to 256Mi. It is also the multiplier on the GB-seconds compute charge.", alias="memoryLimit")
name: StrictStr = Field(description="Name is the function's org-unique handle and the segment that addresses it, matching ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. The names that would shadow a collection route are reserved.")
namespace: Optional[StrictStr] = Field(default=None, description="Namespace groups functions for display. It is cosmetic — the org is the isolation key — and is normalised to a DNS-safe label.")
runtime: Optional[StrictStr] = Field(default=None, description="Runtime is the language the code runs under: node, python or deno.")
target: Optional[StrictStr] = Field(default=None, description="Target is where the function runs: sandbox (the default) or fleet, the org's own GPU fleet. fleet supports runtime=python only.")
timeout_sec: Optional[StrictInt] = Field(default=None, description="TimeoutSec is the per-invocation deadline, defaulting to 30 and clamped at 900 — a larger value is capped rather than reset to the default.", alias="timeoutSec")
__properties: ClassVar[List[str]] = ["code", "envNames", "environment", "handler", "image", "memoryLimit", "name", "namespace", "runtime", "target", "timeoutSec"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Definition from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Definition from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"code": obj.get("code"),
"envNames": obj.get("envNames"),
"environment": obj.get("environment"),
"handler": obj.get("handler"),
"image": obj.get("image"),
"memoryLimit": obj.get("memoryLimit"),
"name": obj.get("name"),
"namespace": obj.get("namespace"),
"runtime": obj.get("runtime"),
"target": obj.get("target"),
"timeoutSec": obj.get("timeoutSec")
})
return _obj
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.evaluator_view import EvaluatorView
from typing import Optional, Set
from typing_extensions import Self
class EvaluatorList(BaseModel):
"""
EvaluatorList
""" # noqa: E501
data: Optional[List[EvaluatorView]] = Field(default=None, description="Data is the caller org's judges, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of EvaluatorList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of EvaluatorList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [EvaluatorView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class EvaluatorReq(BaseModel):
"""
EvaluatorReq
""" # noqa: E501
criteria: Optional[StrictStr] = Field(default=None, description="Criteria is the written standard the judge applies; over 64 KiB is refused.")
model: Optional[StrictStr] = Field(default=None, description="Model is the model that will do the grading.")
name: StrictStr = Field(description="Name is the judge's org-unique handle, matching ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. Re-posting a name edits that judge rather than adding a second one.")
score_name: Optional[StrictStr] = Field(default=None, description="ScoreName is the name the resulting scores are filed under. It defaults to the judge's own name and must match the same pattern.", alias="scoreName")
__properties: ClassVar[List[str]] = ["criteria", "model", "name", "scoreName"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of EvaluatorReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of EvaluatorReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"criteria": obj.get("criteria"),
"model": obj.get("model"),
"name": obj.get("name"),
"scoreName": obj.get("scoreName")
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class EvaluatorView(BaseModel):
"""
EvaluatorView
""" # noqa: E501
created_at: Optional[StrictStr] = Field(default=None, description="CreatedAt is when the judge was first defined.", alias="createdAt")
criteria: Optional[StrictStr] = Field(default=None, description="Criteria is the written standard the judge applies.")
model: Optional[StrictStr] = Field(default=None, description="Model is the model that does the grading.")
name: Optional[StrictStr] = Field(default=None, description="Name is the judge's org-unique handle.")
score_name: Optional[StrictStr] = Field(default=None, description="ScoreName is the name the resulting scores are filed under.", alias="scoreName")
updated_at: Optional[StrictStr] = Field(default=None, description="UpdatedAt is when it last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["createdAt", "criteria", "model", "name", "scoreName", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of EvaluatorView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of EvaluatorView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"criteria": obj.get("criteria"),
"model": obj.get("model"),
"name": obj.get("name"),
"scoreName": obj.get("scoreName"),
"updatedAt": obj.get("updatedAt")
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.trial import Trial
from typing import Optional, Set
from typing_extensions import Self
class ExperimentList(BaseModel):
"""
ExperimentList
""" # noqa: E501
data: Optional[List[Trial]] = Field(default=None, description="Data is the org's experiments, ordered by project then id.")
total: Optional[StrictInt] = Field(default=None, description="Total is how many rows Data holds.")
__properties: ClassVar[List[str]] = ["data", "total"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ExperimentList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ExperimentList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [Trial.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None,
"total": obj.get("total")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.finding_view import FindingView
from typing import Optional, Set
from typing_extensions import Self
class FindingList(BaseModel):
"""
FindingList
""" # noqa: E501
data: Optional[List[FindingView]] = Field(default=None, description="Data is the caller org's findings, newest first.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of FindingList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of FindingList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [FindingView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+105
View File
@@ -0,0 +1,105 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class FindingView(BaseModel):
"""
FindingView
""" # noqa: E501
created_at: Optional[StrictInt] = Field(default=None, description="CreatedAt is when the finding was recorded, in Unix milliseconds.", alias="createdAt")
fingerprint: Optional[StrictStr] = Field(default=None, description="Fingerprint is the SHA-256 of the raw secret. It is what makes the same secret recognisable across scans and after rotation without the secret ever being written down.")
id: Optional[StrictStr] = Field(default=None, description="ID addresses this finding.")
line: Optional[StrictInt] = Field(default=None, description="Line is where in that file.")
path: Optional[StrictStr] = Field(default=None, description="Path is the file the secret was found in.")
preview: Optional[StrictStr] = Field(default=None, description="Preview is the secret MASKED — first and last characters kept, the middle starred — so a reviewer can recognise it without it being disclosed.")
rule_id: Optional[StrictStr] = Field(default=None, description="RuleID is the detection rule that fired.", alias="ruleId")
rule_name: Optional[StrictStr] = Field(default=None, description="RuleName is that rule's human name.", alias="ruleName")
scan_id: Optional[StrictStr] = Field(default=None, description="ScanID is the scan that produced it.", alias="scanId")
severity: Optional[StrictStr] = Field(default=None, description="Severity ranks the finding: critical, high, medium or low.")
__properties: ClassVar[List[str]] = ["createdAt", "fingerprint", "id", "line", "path", "preview", "ruleId", "ruleName", "scanId", "severity"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of FindingView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of FindingView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"fingerprint": obj.get("fingerprint"),
"id": obj.get("id"),
"line": obj.get("line"),
"path": obj.get("path"),
"preview": obj.get("preview"),
"ruleId": obj.get("ruleId"),
"ruleName": obj.get("ruleName"),
"scanId": obj.get("scanId"),
"severity": obj.get("severity")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.function_view import FunctionView
from typing import Optional, Set
from typing_extensions import Self
class FnList(BaseModel):
"""
FnList
""" # noqa: E501
functions: Optional[List[FunctionView]] = Field(default=None, description="Functions is one row per published function.")
__properties: ClassVar[List[str]] = ["functions"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of FnList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in functions (list)
_items = []
if self.functions:
for _item_functions in self.functions:
if _item_functions:
_items.append(_item_functions.to_dict())
_dict['functions'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of FnList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"functions": [FunctionView.from_dict(_item) for _item in obj["functions"]] if obj.get("functions") is not None else None
})
return _obj
+139
View File
@@ -0,0 +1,139 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from hanzoai.cloud.models.invocation_view import InvocationView
from hanzoai.cloud.models.trigger_view import TriggerView
from typing import Optional, Set
from typing_extensions import Self
class FunctionDetail(BaseModel):
"""
FunctionDetail
""" # noqa: E501
avg_duration_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="avgDurationMs")
created_at: Optional[StrictStr] = Field(default=None, alias="createdAt")
endpoint: Optional[StrictStr] = None
env_count: Optional[StrictInt] = Field(default=None, alias="envCount")
environment: Optional[StrictStr] = None
errors7d: Optional[StrictInt] = None
image: Optional[StrictStr] = None
invocations7d: Optional[StrictInt] = None
last_deployed_at: Optional[StrictStr] = Field(default=None, alias="lastDeployedAt")
memory_limit: Optional[StrictStr] = Field(default=None, alias="memoryLimit")
name: Optional[StrictStr] = None
namespace: Optional[StrictStr] = None
recent_invocations: Optional[List[InvocationView]] = Field(default=None, description="RecentInvocations is its twenty most recent runs, newest first.", alias="recentInvocations")
secrets: Optional[List[StrictStr]] = Field(default=None, description="Secrets are the NAMES it mounts. Values are never read or returned.")
status: Optional[StrictStr] = None
success_rate: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="successRate")
target: Optional[StrictStr] = None
timeout_sec: Optional[StrictInt] = Field(default=None, alias="timeoutSec")
triggers: Optional[List[TriggerView]] = Field(default=None, description="Triggers is how this function is reached.")
__properties: ClassVar[List[str]] = ["avgDurationMs", "createdAt", "endpoint", "envCount", "environment", "errors7d", "image", "invocations7d", "lastDeployedAt", "memoryLimit", "name", "namespace", "recentInvocations", "secrets", "status", "successRate", "target", "timeoutSec", "triggers"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of FunctionDetail from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in recent_invocations (list)
_items = []
if self.recent_invocations:
for _item_recent_invocations in self.recent_invocations:
if _item_recent_invocations:
_items.append(_item_recent_invocations.to_dict())
_dict['recentInvocations'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in triggers (list)
_items = []
if self.triggers:
for _item_triggers in self.triggers:
if _item_triggers:
_items.append(_item_triggers.to_dict())
_dict['triggers'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of FunctionDetail from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"avgDurationMs": obj.get("avgDurationMs"),
"createdAt": obj.get("createdAt"),
"endpoint": obj.get("endpoint"),
"envCount": obj.get("envCount"),
"environment": obj.get("environment"),
"errors7d": obj.get("errors7d"),
"image": obj.get("image"),
"invocations7d": obj.get("invocations7d"),
"lastDeployedAt": obj.get("lastDeployedAt"),
"memoryLimit": obj.get("memoryLimit"),
"name": obj.get("name"),
"namespace": obj.get("namespace"),
"recentInvocations": [InvocationView.from_dict(_item) for _item in obj["recentInvocations"]] if obj.get("recentInvocations") is not None else None,
"secrets": obj.get("secrets"),
"status": obj.get("status"),
"successRate": obj.get("successRate"),
"target": obj.get("target"),
"timeoutSec": obj.get("timeoutSec"),
"triggers": [TriggerView.from_dict(_item) for _item in obj["triggers"]] if obj.get("triggers") is not None else None
})
return _obj
+117
View File
@@ -0,0 +1,117 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class FunctionView(BaseModel):
"""
FunctionView
""" # noqa: E501
avg_duration_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="mean wall-clock of those runs", alias="avgDurationMs")
created_at: Optional[StrictStr] = Field(default=None, description="when it was first published", alias="createdAt")
endpoint: Optional[StrictStr] = Field(default=None, description="the path that invokes it")
env_count: Optional[StrictInt] = Field(default=None, description="how many secret NAMES it mounts; values are never carried", alias="envCount")
environment: Optional[StrictStr] = Field(default=None, description="the language it runs under")
errors7d: Optional[StrictInt] = Field(default=None, description="how many of those runs failed")
image: Optional[StrictStr] = Field(default=None, description="the prebuilt image it runs, when it runs one instead of source")
invocations7d: Optional[StrictInt] = Field(default=None, description="runs in the last 7 days; ABSENT, never 0, when it has not run")
last_deployed_at: Optional[StrictStr] = Field(default=None, description="when its code last changed", alias="lastDeployedAt")
memory_limit: Optional[StrictStr] = Field(default=None, description="the memory it runs with, and the multiplier on its compute charge", alias="memoryLimit")
name: Optional[StrictStr] = Field(default=None, description="the function's org-unique handle")
namespace: Optional[StrictStr] = Field(default=None, description="the display group it belongs to; the org is the isolation key")
status: Optional[StrictStr] = Field(default=None, description="whether it is ready to serve")
success_rate: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="share of those runs that succeeded, 0..1", alias="successRate")
target: Optional[StrictStr] = Field(default=None, description="where it runs: empty for the sandbox, \"fleet\" for the org's GPU fleet")
timeout_sec: Optional[StrictInt] = Field(default=None, description="its per-invocation deadline", alias="timeoutSec")
__properties: ClassVar[List[str]] = ["avgDurationMs", "createdAt", "endpoint", "envCount", "environment", "errors7d", "image", "invocations7d", "lastDeployedAt", "memoryLimit", "name", "namespace", "status", "successRate", "target", "timeoutSec"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of FunctionView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of FunctionView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"avgDurationMs": obj.get("avgDurationMs"),
"createdAt": obj.get("createdAt"),
"endpoint": obj.get("endpoint"),
"envCount": obj.get("envCount"),
"environment": obj.get("environment"),
"errors7d": obj.get("errors7d"),
"image": obj.get("image"),
"invocations7d": obj.get("invocations7d"),
"lastDeployedAt": obj.get("lastDeployedAt"),
"memoryLimit": obj.get("memoryLimit"),
"name": obj.get("name"),
"namespace": obj.get("namespace"),
"status": obj.get("status"),
"successRate": obj.get("successRate"),
"target": obj.get("target"),
"timeoutSec": obj.get("timeoutSec")
})
return _obj
+6 -8
View File
@@ -17,7 +17,7 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
@@ -26,10 +26,9 @@ class Health(BaseModel):
"""
Health
""" # noqa: E501
status: Optional[StrictStr] = Field(default=None, description="Status is ok when the message plane answers, degraded otherwise.")
uptime: Optional[StrictStr] = Field(default=None, description="Uptime is how long this surface has been mounted.")
version: Optional[StrictStr] = Field(default=None, description="Version is the connected broker's server version; empty while degraded.")
__properties: ClassVar[List[str]] = ["status", "uptime", "version"]
ok: Optional[StrictBool] = Field(default=None, description="OK is true whenever this route answers at all: reaching the handler IS the proof that the routes are registered and dispatching.")
subsystem: Optional[StrictStr] = Field(default=None, description="Subsystem names what answered, so a health response read out of context still says which surface it came from.")
__properties: ClassVar[List[str]] = ["ok", "subsystem"]
model_config = ConfigDict(
populate_by_name=True,
@@ -82,9 +81,8 @@ class Health(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"status": obj.get("status"),
"uptime": obj.get("uptime"),
"version": obj.get("version")
"ok": obj.get("ok"),
"subsystem": obj.get("subsystem")
})
return _obj
+101
View File
@@ -0,0 +1,101 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Holding(BaseModel):
"""
Holding
""" # noqa: E501
cost_cents: Optional[StrictInt] = Field(default=None, description="wholesale cost", alias="costCents")
domain: Optional[StrictStr] = Field(default=None, description="the name owned")
expires_at: Optional[StrictStr] = Field(default=None, description="when the registration lapses, RFC3339", alias="expiresAt")
nameservers: Optional[List[StrictStr]] = Field(default=None, description="the authoritative nameservers the name points at")
order: Optional[StrictInt] = Field(default=None, description="registrar order id")
org: Optional[StrictStr] = Field(default=None, description="the org that owns the domain")
price_cents: Optional[StrictInt] = Field(default=None, description="what the customer paid (sell)", alias="priceCents")
registered_at: Optional[StrictInt] = Field(default=None, description="unix seconds", alias="registeredAt")
__properties: ClassVar[List[str]] = ["costCents", "domain", "expiresAt", "nameservers", "order", "org", "priceCents", "registeredAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Holding from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Holding from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"costCents": obj.get("costCents"),
"domain": obj.get("domain"),
"expiresAt": obj.get("expiresAt"),
"nameservers": obj.get("nameservers"),
"order": obj.get("order"),
"org": obj.get("org"),
"priceCents": obj.get("priceCents"),
"registeredAt": obj.get("registeredAt")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.holding import Holding
from typing import Optional, Set
from typing_extensions import Self
class Holdings(BaseModel):
"""
Holdings
""" # noqa: E501
domains: Optional[List[Holding]] = Field(default=None, description="Domains is the caller org's domains, newest registration first.")
__properties: ClassVar[List[str]] = ["domains"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Holdings from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in domains (list)
_items = []
if self.domains:
for _item_domains in self.domains:
if _item_domains:
_items.append(_item_domains.to_dict())
_dict['domains'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Holdings from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"domains": [Holding.from_dict(_item) for _item in obj["domains"]] if obj.get("domains") is not None else None
})
return _obj
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.invocation_view import InvocationView
from typing import Optional, Set
from typing_extensions import Self
class InvocationList(BaseModel):
"""
InvocationList
""" # noqa: E501
invocations: Optional[List[InvocationView]] = Field(default=None, description="Invocations is one row per past run, newest first.")
__properties: ClassVar[List[str]] = ["invocations"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of InvocationList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in invocations (list)
_items = []
if self.invocations:
for _item_invocations in self.invocations:
if _item_invocations:
_items.append(_item_invocations.to_dict())
_dict['invocations'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of InvocationList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"invocations": [InvocationView.from_dict(_item) for _item in obj["invocations"]] if obj.get("invocations") is not None else None
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class InvocationView(BaseModel):
"""
InvocationView
""" # noqa: E501
duration_ms: Optional[StrictInt] = Field(default=None, description="how long it took", alias="durationMs")
id: Optional[StrictStr] = Field(default=None, description="the invocation's handle")
method: Optional[StrictStr] = Field(default=None, description="the HTTP method that triggered it")
status: Optional[StrictStr] = Field(default=None, description="how the run ended: ok, error or timeout")
status_code: Optional[StrictInt] = Field(default=None, description="Code is the status the function's OWN code answered with, which is not the status of the reply — a program can answer 500 through a healthy sandbox.", alias="statusCode")
time: Optional[StrictStr] = Field(default=None, description="when it ran, RFC3339")
__properties: ClassVar[List[str]] = ["durationMs", "id", "method", "status", "statusCode", "time"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of InvocationView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of InvocationView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"durationMs": obj.get("durationMs"),
"id": obj.get("id"),
"method": obj.get("method"),
"status": obj.get("status"),
"statusCode": obj.get("statusCode"),
"time": obj.get("time")
})
return _obj
+87
View File
@@ -0,0 +1,87 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class InvokeReq(BaseModel):
"""
InvokeReq
""" # noqa: E501
input: Optional[StrictStr] = Field(default=None, description="Input is what the function is given on stdin. It is opaque to this surface.")
__properties: ClassVar[List[str]] = ["input"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of InvokeReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of InvokeReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"input": obj.get("input")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.item_view import ItemView
from typing import Optional, Set
from typing_extensions import Self
class ItemList(BaseModel):
"""
ItemList
""" # noqa: E501
data: Optional[List[ItemView]] = Field(default=None, description="Data is the examples of the one dataset named in the path, archived ones included, so the caller sees the whole set rather than what a run would use.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ItemList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ItemList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [ItemView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+105
View File
@@ -0,0 +1,105 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ItemReq(BaseModel):
"""
ItemReq
""" # noqa: E501
expected_output: Optional[Any] = Field(default=None, alias="expectedOutput")
id: Optional[StrictStr] = Field(default=None, description="ID makes the write idempotent — re-posting the same id replaces that example in place. Omit it and one is generated. An id that already exists in a DIFFERENT dataset is 409 rather than a move.")
input: Optional[Any] = None
metadata: Optional[Dict[str, Dict[str, Any]]] = Field(default=None, description="Metadata is a free-form object stored with the example.")
status: Optional[StrictStr] = Field(default=None, description="Status is ACTIVE (the default) or ARCHIVED. Only ACTIVE examples are fed to a run, which is how an example is retired without being deleted.")
__properties: ClassVar[List[str]] = ["expectedOutput", "id", "input", "metadata", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ItemReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# set to None if expected_output (nullable) is None
# and model_fields_set contains the field
if self.expected_output is None and "expected_output" in self.model_fields_set:
_dict['expectedOutput'] = None
# set to None if input (nullable) is None
# and model_fields_set contains the field
if self.input is None and "input" in self.model_fields_set:
_dict['input'] = None
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ItemReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"expectedOutput": obj.get("expectedOutput"),
"id": obj.get("id"),
"input": obj.get("input"),
"metadata": obj.get("metadata"),
"status": obj.get("status")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ItemResult(BaseModel):
"""
ItemResult
""" # noqa: E501
error: Optional[StrictStr] = Field(default=None, description="Error is why this example produced no score — the model, the judge, or the run's deadline. A result carrying one is not counted in Scored.")
item_id: Optional[StrictStr] = Field(default=None, description="ItemID is the example that was scored.", alias="itemId")
output: Optional[StrictStr] = Field(default=None, description="Output is what the model under test answered, truncated at 2000 characters.")
score: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Score is the judge's grade.")
trace_id: Optional[StrictStr] = Field(default=None, description="TraceID is the model call this result came from.", alias="traceId")
__properties: ClassVar[List[str]] = ["error", "itemId", "output", "score", "traceId"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ItemResult from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ItemResult from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"error": obj.get("error"),
"itemId": obj.get("itemId"),
"output": obj.get("output"),
"score": obj.get("score"),
"traceId": obj.get("traceId")
})
return _obj
+101
View File
@@ -0,0 +1,101 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ItemView(BaseModel):
"""
ItemView
""" # noqa: E501
created_at: Optional[StrictStr] = Field(default=None, description="CreatedAt is when the example was first written.", alias="createdAt")
dataset_name: Optional[StrictStr] = Field(default=None, description="Dataset is the set this example belongs to.", alias="datasetName")
expected_output: Optional[Dict[str, Any]] = Field(default=None, description="Expected is the answer a correct model produces, which the judge grades against.", alias="expectedOutput")
id: Optional[StrictStr] = Field(default=None, description="ID is the example's handle, unique within the caller's org.")
input: Optional[Dict[str, Any]] = Field(default=None, description="Input is what the model under test is given, as it was written.")
metadata: Optional[Dict[str, Dict[str, Any]]] = Field(default=None, description="Metadata is the free-form object stored with the example.")
status: Optional[StrictStr] = Field(default=None, description="Status is ACTIVE or ARCHIVED. Only ACTIVE examples are fed to a run, which is how one is retired without being deleted.")
updated_at: Optional[StrictStr] = Field(default=None, description="UpdatedAt is when it last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["createdAt", "datasetName", "expectedOutput", "id", "input", "metadata", "status", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ItemView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ItemView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"datasetName": obj.get("datasetName"),
"expectedOutput": obj.get("expectedOutput"),
"id": obj.get("id"),
"input": obj.get("input"),
"metadata": obj.get("metadata"),
"status": obj.get("status"),
"updatedAt": obj.get("updatedAt")
})
return _obj
+91
View File
@@ -0,0 +1,91 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class JudgeSpec(BaseModel):
"""
JudgeSpec
""" # noqa: E501
criteria: Optional[StrictStr] = Field(default=None, description="Criteria is the standard the judge applies, defaulting to a correctness criterion.")
model: Optional[StrictStr] = Field(default=None, description="Model is the model that grades. It defaults to the model under test, so a run with no judge named has the model grade itself.")
name: Optional[StrictStr] = Field(default=None, description="Name is the score name the judge's grades are filed under, \"llm-judge\" by default. A name that is not a legal handle falls back to that default rather than being stored as sent.")
__properties: ClassVar[List[str]] = ["criteria", "model", "name"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of JudgeSpec from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of JudgeSpec from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"criteria": obj.get("criteria"),
"model": obj.get("model"),
"name": obj.get("name")
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class LatencyStat(BaseModel):
"""
LatencyStat
""" # noqa: E501
available: Optional[StrictBool] = Field(default=None, description="false when no GenAI spans carry timing; the percentiles are then null")
p50_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="median latency over the window", alias="p50Ms")
p95_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="95th-percentile latency", alias="p95Ms")
p99_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="99th-percentile latency", alias="p99Ms")
__properties: ClassVar[List[str]] = ["available", "p50Ms", "p95Ms", "p99Ms"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LatencyStat from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LatencyStat from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"available": obj.get("available"),
"p50Ms": obj.get("p50Ms"),
"p95Ms": obj.get("p95Ms"),
"p99Ms": obj.get("p99Ms")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class LeaderRow(BaseModel):
"""
LeaderRow
""" # noqa: E501
gap: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="published − measured (the arena signal)")
measured: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="hanzo-measured accuracy % (nil if unrun)")
model: Optional[StrictStr] = Field(default=None, description="the model this row scores")
n: Optional[StrictInt] = Field(default=None, description="coverage — NEVER compare across different n")
protocol: Optional[StrictStr] = Field(default=None, description="how the vendor scored their claim: single-attempt, pass@k or agentic")
published: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="provider-claimed % (nil if none)")
__properties: ClassVar[List[str]] = ["gap", "measured", "model", "n", "protocol", "published"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LeaderRow from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LeaderRow from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"gap": obj.get("gap"),
"measured": obj.get("measured"),
"model": obj.get("model"),
"n": obj.get("n"),
"protocol": obj.get("protocol"),
"published": obj.get("published")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.leader_row import LeaderRow
from typing import Optional, Set
from typing_extensions import Self
class Leaderboard(BaseModel):
"""
Leaderboard
""" # noqa: E501
benchmark: Optional[StrictStr] = Field(default=None, description="Benchmark is the catalog id these rows are about.")
rows: Optional[List[LeaderRow]] = Field(default=None, description="Rows is one per model, ordered by measured accuracy descending.")
__properties: ClassVar[List[str]] = ["benchmark", "rows"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Leaderboard from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in rows (list)
_items = []
if self.rows:
for _item_rows in self.rows:
if _item_rows:
_items.append(_item_rows.to_dict())
_dict['rows'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Leaderboard from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"benchmark": obj.get("benchmark"),
"rows": [LeaderRow.from_dict(_item) for _item in obj["rows"]] if obj.get("rows") is not None else None
})
return _obj
+87
View File
@@ -0,0 +1,87 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class LogLines(BaseModel):
"""
LogLines
""" # noqa: E501
logs: Optional[StrictStr] = Field(default=None, description="Logs is that run's error text when it failed, else its output. It is empty when the function has never run.")
__properties: ClassVar[List[str]] = ["logs"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LogLines from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LogLines from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"logs": obj.get("logs")
})
return _obj
+113
View File
@@ -0,0 +1,113 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ModelStat(BaseModel):
"""
ModelStat
""" # noqa: E501
completion_tokens: Optional[StrictInt] = Field(default=None, description="tokens it answered with", alias="completionTokens")
cost_cents: Optional[StrictInt] = Field(default=None, description="what this model cost, in cents", alias="costCents")
cost_pct: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="share of total spend, 0..100", alias="costPct")
error_rate: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="share of its calls that failed, 0..1", alias="errorRate")
errors: Optional[StrictInt] = Field(default=None, description="calls to it that did not succeed")
model: Optional[StrictStr] = Field(default=None, description="the model this row is about, or \"other\" for the fold")
model_count: Optional[StrictInt] = Field(default=None, description=">0 only on the \"other\" fold", alias="modelCount")
p50_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="median latency, null when no spans carry it", alias="p50Ms")
p95_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="95th-percentile latency, null when unknown", alias="p95Ms")
p99_ms: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="99th-percentile latency, null when unknown", alias="p99Ms")
prompt_tokens: Optional[StrictInt] = Field(default=None, description="tokens sent to it", alias="promptTokens")
provider: Optional[StrictStr] = Field(default=None, description="who serves it")
requests: Optional[StrictInt] = Field(default=None, description="calls to this model in the window")
total_tokens: Optional[StrictInt] = Field(default=None, description="prompt plus completion", alias="totalTokens")
__properties: ClassVar[List[str]] = ["completionTokens", "costCents", "costPct", "errorRate", "errors", "model", "modelCount", "p50Ms", "p95Ms", "p99Ms", "promptTokens", "provider", "requests", "totalTokens"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ModelStat from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ModelStat from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"completionTokens": obj.get("completionTokens"),
"costCents": obj.get("costCents"),
"costPct": obj.get("costPct"),
"errorRate": obj.get("errorRate"),
"errors": obj.get("errors"),
"model": obj.get("model"),
"modelCount": obj.get("modelCount"),
"p50Ms": obj.get("p50Ms"),
"p95Ms": obj.get("p95Ms"),
"p99Ms": obj.get("p99Ms"),
"promptTokens": obj.get("promptTokens"),
"provider": obj.get("provider"),
"requests": obj.get("requests"),
"totalTokens": obj.get("totalTokens")
})
return _obj
+99
View File
@@ -0,0 +1,99 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Offer(BaseModel):
"""
Offer
""" # noqa: E501
available: Optional[StrictBool] = Field(default=None, description="whether it can be bought right now")
currency: Optional[StrictStr] = Field(default=None, description="the currency both prices are in")
domain: Optional[StrictStr] = Field(default=None, description="the name this quote prices")
premium: Optional[StrictBool] = Field(default=None, description="whether the registry prices it above the standard rate")
price_cents: Optional[StrictInt] = Field(default=None, description="sell (first-term registration)", alias="priceCents")
renewal_price_cents: Optional[StrictInt] = Field(default=None, description="sell (renewal)", alias="renewalPriceCents")
tld: Optional[StrictStr] = Field(default=None, description="the top-level domain the name sits under")
__properties: ClassVar[List[str]] = ["available", "currency", "domain", "premium", "priceCents", "renewalPriceCents", "tld"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Offer from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Offer from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"available": obj.get("available"),
"currency": obj.get("currency"),
"domain": obj.get("domain"),
"premium": obj.get("premium"),
"priceCents": obj.get("priceCents"),
"renewalPriceCents": obj.get("renewalPriceCents"),
"tld": obj.get("tld")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.contacts import Contacts
from typing import Optional, Set
from typing_extensions import Self
class Order(BaseModel):
"""
Order
""" # noqa: E501
contacts: Optional[Contacts] = Field(default=None, description="Contacts is the WHOIS contact set. Omit it and the registrar uses the reseller account's default contacts.")
domain: StrictStr = Field(description="Domain is the name to buy. It is required.")
years: Optional[StrictInt] = Field(default=None, description="Years is the term to buy, defaulting to 1.")
__properties: ClassVar[List[str]] = ["contacts", "domain", "years"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Order from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of contacts
if self.contacts:
_dict['contacts'] = self.contacts.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Order from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"contacts": Contacts.from_dict(obj["contacts"]) if obj.get("contacts") is not None else None,
"domain": obj.get("domain"),
"years": obj.get("years")
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class Outcome(BaseModel):
"""
Outcome
""" # noqa: E501
control: Optional[StrictBool] = Field(default=None, description="true on the baseline arm; its own lift and stats are zero")
converted: Optional[StrictInt] = Field(default=None, description="of those, how many fired the metric event")
exposed: Optional[StrictInt] = Field(default=None, description="subjects the arm enrolled — the denominator")
lift: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="relative to control: (rate-ctrl)/ctrl")
p_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="two-tailed p vs control", alias="pValue")
rate: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="converted over exposed")
significant: Optional[StrictBool] = Field(default=None, description="pValue < alpha")
variant: Optional[StrictStr] = Field(default=None, description="the arm this row measures")
z: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="two-proportion z vs control")
__properties: ClassVar[List[str]] = ["control", "converted", "exposed", "lift", "pValue", "rate", "significant", "variant", "z"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Outcome from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Outcome from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"control": obj.get("control"),
"converted": obj.get("converted"),
"exposed": obj.get("exposed"),
"lift": obj.get("lift"),
"pValue": obj.get("pValue"),
"rate": obj.get("rate"),
"significant": obj.get("significant"),
"variant": obj.get("variant"),
"z": obj.get("z")
})
return _obj
+105
View File
@@ -0,0 +1,105 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class Pairing(BaseModel):
"""
Pairing
""" # noqa: E501
a: Optional[StrictStr] = Field(default=None, description="A is the first model id.")
a_correct: Optional[StrictInt] = Field(default=None, description="ACorrect is how many of those common items A got right.")
b: Optional[StrictStr] = Field(default=None, description="B is the second model id.")
b_correct: Optional[StrictInt] = Field(default=None, description="BCorrect is how many of those common items B got right.")
benchmark: Optional[StrictStr] = Field(default=None, description="Benchmark is the catalog id the two arms were compared on.")
mcnemar_p: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="McnemarP is the two-sided exact binomial p on the discordant pairs. It is 1 when nothing is discordant, which is \"no evidence of a difference\", not an error.")
n_common: Optional[StrictInt] = Field(default=None, description="NCommon is how many items BOTH arms completed. It is the denominator, and the reason this comparison is valid where a raw accuracy difference is not.")
net_a_minus_b: Optional[StrictInt] = Field(default=None, description="NetAMinusB is the two rescue counts subtracted — A's advantage in items.")
rescue_a_over_b: Optional[StrictInt] = Field(default=None, description="RescueAOverB is how many items A got right and B got wrong.")
rescue_b_over_a: Optional[StrictInt] = Field(default=None, description="RescueBOverA is how many items B got right and A got wrong.")
__properties: ClassVar[List[str]] = ["a", "a_correct", "b", "b_correct", "benchmark", "mcnemar_p", "n_common", "net_a_minus_b", "rescue_a_over_b", "rescue_b_over_a"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Pairing from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Pairing from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"a": obj.get("a"),
"a_correct": obj.get("a_correct"),
"b": obj.get("b"),
"b_correct": obj.get("b_correct"),
"benchmark": obj.get("benchmark"),
"mcnemar_p": obj.get("mcnemar_p"),
"n_common": obj.get("n_common"),
"net_a_minus_b": obj.get("net_a_minus_b"),
"rescue_a_over_b": obj.get("rescue_a_over_b"),
"rescue_b_over_a": obj.get("rescue_b_over_a")
})
return _obj
+89
View File
@@ -0,0 +1,89 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PointView(BaseModel):
"""
PointView
""" # noqa: E501
t: Optional[StrictStr] = Field(default=None, description="the bucket's start, RFC3339 (UTC)")
v: Optional[StrictInt] = Field(default=None, description="how many invocations fell in it — a real count, never interpolated")
__properties: ClassVar[List[str]] = ["t", "v"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PointView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PointView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"t": obj.get("t"),
"v": obj.get("v")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Preset(BaseModel):
"""
Preset
""" # noqa: E501
arms: Optional[List[StrictStr]] = Field(default=None, description="the blend — model ids from the arena")
name: Optional[StrictStr] = Field(default=None, description="served as enso-<name>")
note: Optional[StrictStr] = Field(default=None, description="why this blend (audit)")
owner: Optional[StrictStr] = Field(default=None, description="scoping org (never cross-tenant)")
panel: Optional[StrictInt] = Field(default=None, description="fan-out width (>=1)")
rank: Optional[List[StrictStr]] = Field(default=None, description="escalation order over arms")
__properties: ClassVar[List[str]] = ["arms", "name", "note", "owner", "panel", "rank"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Preset from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Preset from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"arms": obj.get("arms"),
"name": obj.get("name"),
"note": obj.get("note"),
"owner": obj.get("owner"),
"panel": obj.get("panel"),
"rank": obj.get("rank")
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.preset import Preset
from typing import Optional, Set
from typing_extensions import Self
class PresetAccepted(BaseModel):
"""
PresetAccepted
""" # noqa: E501
note: Optional[StrictStr] = Field(default=None, description="Note explains what acceptance does and does not promise.")
preset: Optional[Preset] = Field(default=None, description="Preset is the blend with its defaults filled in.")
served_as: Optional[StrictStr] = Field(default=None, description="ServedAs is the model id the serving layer would resolve this blend under.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"accepted\": the blend is well-formed, not that it is now served.")
__properties: ClassVar[List[str]] = ["note", "preset", "served_as", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PresetAccepted from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of preset
if self.preset:
_dict['preset'] = self.preset.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PresetAccepted from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"note": obj.get("note"),
"preset": Preset.from_dict(obj["preset"]) if obj.get("preset") is not None else None,
"served_as": obj.get("served_as"),
"status": obj.get("status")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.preset import Preset
from typing import Optional, Set
from typing_extensions import Self
class PresetList(BaseModel):
"""
PresetList
""" # noqa: E501
data: Optional[List[Preset]] = Field(default=None, description="Data is the blends available to compose from.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PresetList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PresetList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [Preset.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.offer import Offer
from typing import Optional, Set
from typing_extensions import Self
class QuoteList(BaseModel):
"""
QuoteList
""" # noqa: E501
results: Optional[List[Offer]] = Field(default=None, description="Results is one quote per name, priced RETAIL — this deployment's markup is already applied and the wholesale cost is never on the wire.")
__properties: ClassVar[List[str]] = ["results"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of QuoteList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in results (list)
_items = []
if self.results:
for _item_results in self.results:
if _item_results:
_items.append(_item_results.to_dict())
_dict['results'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of QuoteList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"results": [Offer.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None
})
return _obj
+99
View File
@@ -0,0 +1,99 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Reachability(BaseModel):
"""
Reachability
""" # noqa: E501
configured: Optional[StrictBool] = Field(default=None, description="Configured is whether the wholesale credentials are present at all.")
env: Optional[StrictStr] = Field(default=None, description="Env is the registrar environment. It is the fact that decides whether money moves: only \"prod\" reaches the live, billable registrar — anything else, including unset, is the sandbox.")
error: Optional[StrictStr] = Field(default=None, description="Error is the blocker, so an operator reads it instead of guessing at it.")
reachable: Optional[StrictBool] = Field(default=None, description="Reachable is whether the registrar accepted those credentials on a live call made while the caller waited.")
registrar: Optional[StrictStr] = Field(default=None, description="Registrar names the wholesale registrar behind it.")
service: Optional[StrictStr] = Field(default=None, description="Service names the subsystem answering.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"ok\" when a live call succeeded, else \"degraded\".")
__properties: ClassVar[List[str]] = ["configured", "env", "error", "reachable", "registrar", "service", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Reachability from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Reachability from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"configured": obj.get("configured"),
"env": obj.get("env"),
"error": obj.get("error"),
"reachable": obj.get("reachable"),
"registrar": obj.get("registrar"),
"service": obj.get("service"),
"status": obj.get("status")
})
return _obj
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.holding import Holding
from hanzoai.cloud.models.offer import Offer
from typing import Optional, Set
from typing_extensions import Self
class RegisterResult(BaseModel):
"""
RegisterResult
""" # noqa: E501
quote: Optional[Offer] = Field(default=None, description="the price it was bought at")
record: Optional[Holding] = Field(default=None, description="the ownership row this purchase issued")
__properties: ClassVar[List[str]] = ["quote", "record"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RegisterResult from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of quote
if self.quote:
_dict['quote'] = self.quote.to_dict()
# override the default output from pydantic by calling `to_dict()` of record
if self.record:
_dict['record'] = self.record.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RegisterResult from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"quote": Offer.from_dict(obj["quote"]) if obj.get("quote") is not None else None,
"record": Holding.from_dict(obj["record"]) if obj.get("record") is not None else None
})
return _obj
+109
View File
@@ -0,0 +1,109 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Registrant(BaseModel):
"""
Registrant
""" # noqa: E501
address1: Optional[StrictStr] = Field(default=None, description="street address")
address2: Optional[StrictStr] = Field(default=None, description="second address line")
city: Optional[StrictStr] = Field(default=None, description="city or locality")
company_name: Optional[StrictStr] = Field(default=None, description="the organisation the contact acts for", alias="companyName")
country: Optional[StrictStr] = Field(default=None, description="ISO-3166 alpha-2, e.g. \"US\"")
email: Optional[StrictStr] = Field(default=None, description="where WHOIS correspondence is sent")
fax: Optional[StrictStr] = Field(default=None, description="fax number, in the same form as phone")
first_name: Optional[StrictStr] = Field(default=None, description="the contact's given name", alias="firstName")
last_name: Optional[StrictStr] = Field(default=None, description="the contact's family name", alias="lastName")
phone: Optional[StrictStr] = Field(default=None, description="+NN.NNNNNNN")
state: Optional[StrictStr] = Field(default=None, description="state, province or region")
zip: Optional[StrictStr] = Field(default=None, description="postal code")
__properties: ClassVar[List[str]] = ["address1", "address2", "city", "companyName", "country", "email", "fax", "firstName", "lastName", "phone", "state", "zip"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Registrant from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Registrant from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"address1": obj.get("address1"),
"address2": obj.get("address2"),
"city": obj.get("city"),
"companyName": obj.get("companyName"),
"country": obj.get("country"),
"email": obj.get("email"),
"fax": obj.get("fax"),
"firstName": obj.get("firstName"),
"lastName": obj.get("lastName"),
"phone": obj.get("phone"),
"state": obj.get("state"),
"zip": obj.get("zip")
})
return _obj
+89
View File
@@ -0,0 +1,89 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class RenewReq(BaseModel):
"""
RenewReq
""" # noqa: E501
domain: StrictStr = Field(description="Domain is the name to extend. It is required, and the caller's org must hold it.")
years: Optional[StrictInt] = Field(default=None, description="Years is how much longer to hold it, defaulting to 1.")
__properties: ClassVar[List[str]] = ["domain", "years"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RenewReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RenewReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"domain": obj.get("domain"),
"years": obj.get("years")
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.holding import Holding
from typing import Optional, Set
from typing_extensions import Self
class RenewResult(BaseModel):
"""
RenewResult
""" # noqa: E501
paid_cents: Optional[StrictInt] = Field(default=None, description="what this renewal cost, in cents", alias="paidCents")
record: Optional[Holding] = Field(default=None, description="the ownership row with its new expiry")
__properties: ClassVar[List[str]] = ["paidCents", "record"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RenewResult from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of record
if self.record:
_dict['record'] = self.record.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RenewResult from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"paidCents": obj.get("paidCents"),
"record": Holding.from_dict(obj["record"]) if obj.get("record") is not None else None
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.rule_view import RuleView
from typing import Optional, Set
from typing_extensions import Self
class RuleList(BaseModel):
"""
RuleList
""" # noqa: E501
data: Optional[List[RuleView]] = Field(default=None, description="Data is every rule a scan can fire, each with the id, name and severity a finding cites.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RuleList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RuleList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [RuleView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class RuleView(BaseModel):
"""
RuleView
""" # noqa: E501
description: Optional[StrictStr] = Field(default=None, description="what kind of secret this rule recognises")
id: Optional[StrictStr] = Field(default=None, description="the rule identifier a finding cites")
name: Optional[StrictStr] = Field(default=None, description="the rule's human name")
severity: Optional[StrictStr] = Field(default=None, description="how serious a match is: critical, high, medium or low")
__properties: ClassVar[List[str]] = ["description", "id", "name", "severity"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RuleView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RuleView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"description": obj.get("description"),
"id": obj.get("id"),
"name": obj.get("name"),
"severity": obj.get("severity")
})
return _obj
+89
View File
@@ -0,0 +1,89 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Ruleset(BaseModel):
"""
Ruleset
""" # noqa: E501
rules: Optional[StrictInt] = Field(default=None, description="Rules is how many detection rules the engine holds.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"ok\" whenever the findings store opened.")
__properties: ClassVar[List[str]] = ["rules", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Ruleset from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Ruleset from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"rules": obj.get("rules"),
"status": obj.get("status")
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class RunRecord(BaseModel):
"""
RunRecord
""" # noqa: E501
avg_score: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="AvgScore is the mean over the scored examples.", alias="avgScore")
created_at: Optional[StrictStr] = Field(default=None, description="CreatedAt is when the run first landed.", alias="createdAt")
dataset: Optional[StrictStr] = Field(default=None, description="Dataset is the set that was scored.")
items: Optional[StrictInt] = Field(default=None, description="Items is how many examples were attempted.")
judge_model: Optional[StrictStr] = Field(default=None, description="JudgeModel is the model that graded.", alias="judgeModel")
model: Optional[StrictStr] = Field(default=None, description="Model is the model under test.")
run_name: Optional[StrictStr] = Field(default=None, description="RunName is the run's label.", alias="runName")
scored: Optional[StrictInt] = Field(default=None, description="Scored is how many produced a real score.")
updated_at: Optional[StrictStr] = Field(default=None, description="UpdatedAt is when the record last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["avgScore", "createdAt", "dataset", "items", "judgeModel", "model", "runName", "scored", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RunRecord from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RunRecord from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"avgScore": obj.get("avgScore"),
"createdAt": obj.get("createdAt"),
"dataset": obj.get("dataset"),
"items": obj.get("items"),
"judgeModel": obj.get("judgeModel"),
"model": obj.get("model"),
"runName": obj.get("runName"),
"scored": obj.get("scored"),
"updatedAt": obj.get("updatedAt")
})
return _obj
+99
View File
@@ -0,0 +1,99 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.judge_spec import JudgeSpec
from typing import Optional, Set
from typing_extensions import Self
class RunRequest(BaseModel):
"""
RunRequest
""" # noqa: E501
dataset: StrictStr = Field(description="Dataset is the set to score, which must belong to the caller's org and hold at least one ACTIVE example.")
judge: Optional[JudgeSpec] = Field(default=None, description="Judge is the judge to grade with. Omitted, the model under test grades itself against a default correctness criterion under the score name \"llm-judge\".")
limit: Optional[StrictInt] = Field(default=None, description="Limit caps how many examples this run scores. It defaults to 20, and anything above 100 falls back to that default.")
model: StrictStr = Field(description="Model is the model under test.")
run_name: Optional[StrictStr] = Field(default=None, description="RunName labels the run and is generated from the clock when omitted. It must match ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$.", alias="runName")
__properties: ClassVar[List[str]] = ["dataset", "judge", "limit", "model", "runName"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RunRequest from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of judge
if self.judge:
_dict['judge'] = self.judge.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RunRequest from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"dataset": obj.get("dataset"),
"judge": JudgeSpec.from_dict(obj["judge"]) if obj.get("judge") is not None else None,
"limit": obj.get("limit"),
"model": obj.get("model"),
"runName": obj.get("runName")
})
return _obj
+109
View File
@@ -0,0 +1,109 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from hanzoai.cloud.models.item_result import ItemResult
from typing import Optional, Set
from typing_extensions import Self
class RunSummary(BaseModel):
"""
RunSummary
""" # noqa: E501
avg_score: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="AvgScore is the mean over the scored examples, 0 when none scored.", alias="avgScore")
dataset: Optional[StrictStr] = Field(default=None, description="Dataset is the set that was scored.")
items: Optional[StrictInt] = Field(default=None, description="Items is how many examples the run attempted.")
judge_model: Optional[StrictStr] = Field(default=None, description="JudgeModel is the model that graded.", alias="judgeModel")
model: Optional[StrictStr] = Field(default=None, description="Model is the model under test.")
results: Optional[List[ItemResult]] = Field(default=None, description="Results is one row per attempted example.")
run_name: Optional[StrictStr] = Field(default=None, description="RunName is the run's label, which scores and traces are filed under.", alias="runName")
scored: Optional[StrictInt] = Field(default=None, description="Scored is how many produced a real score. It counts successes only, so a partial run is honest about what it achieved.")
__properties: ClassVar[List[str]] = ["avgScore", "dataset", "items", "judgeModel", "model", "results", "runName", "scored"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of RunSummary from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in results (list)
_items = []
if self.results:
for _item_results in self.results:
if _item_results:
_items.append(_item_results.to_dict())
_dict['results'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of RunSummary from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"avgScore": obj.get("avgScore"),
"dataset": obj.get("dataset"),
"items": obj.get("items"),
"judgeModel": obj.get("judgeModel"),
"model": obj.get("model"),
"results": [ItemResult.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None,
"runName": obj.get("runName"),
"scored": obj.get("scored")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.run_record import RunRecord
from typing import Optional, Set
from typing_extensions import Self
class Runs(BaseModel):
"""
Runs
""" # noqa: E501
data: Optional[List[RunRecord]] = Field(default=None, description="Data is the caller org's runs, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Runs from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Runs from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [RunRecord.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+89
View File
@@ -0,0 +1,89 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Scan(BaseModel):
"""
Scan
""" # noqa: E501
content: Optional[StrictStr] = Field(default=None, description="Content is the source to scan. It is NEVER stored: what persists is the finding, with a masked preview and a fingerprint.")
path: Optional[StrictStr] = Field(default=None, description="Path is where the file lives, recorded on any finding so a result can be located in the tree it came from.")
__properties: ClassVar[List[str]] = ["content", "path"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Scan from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Scan from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"content": obj.get("content"),
"path": obj.get("path")
})
return _obj
+101
View File
@@ -0,0 +1,101 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.finding_view import FindingView
from hanzoai.cloud.models.scan_view import ScanView
from typing import Optional, Set
from typing_extensions import Self
class ScanDetail(BaseModel):
"""
ScanDetail
""" # noqa: E501
findings: Optional[List[FindingView]] = Field(default=None, description="Findings is every finding on that scan, so the detail view is one round-trip.")
scan: Optional[ScanView] = Field(default=None, description="Scan is the summary.")
__properties: ClassVar[List[str]] = ["findings", "scan"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScanDetail from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in findings (list)
_items = []
if self.findings:
for _item_findings in self.findings:
if _item_findings:
_items.append(_item_findings.to_dict())
_dict['findings'] = _items
# override the default output from pydantic by calling `to_dict()` of scan
if self.scan:
_dict['scan'] = self.scan.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScanDetail from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"findings": [FindingView.from_dict(_item) for _item in obj["findings"]] if obj.get("findings") is not None else None,
"scan": ScanView.from_dict(obj["scan"]) if obj.get("scan") is not None else None
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.scan_view import ScanView
from typing import Optional, Set
from typing_extensions import Self
class ScanList(BaseModel):
"""
ScanList
""" # noqa: E501
data: Optional[List[ScanView]] = Field(default=None, description="Data is the caller org's scans, newest first.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScanList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScanList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [ScanView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ScanView(BaseModel):
"""
ScanView
""" # noqa: E501
created_at: Optional[StrictInt] = Field(default=None, description="CreatedAt is when the scan ran, in Unix milliseconds.", alias="createdAt")
critical: Optional[StrictInt] = Field(default=None, description="Critical is how many findings carry the highest severity.")
files: Optional[StrictInt] = Field(default=None, description="Files is how many files the scan read.")
findings: Optional[StrictInt] = Field(default=None, description="Findings is how many secrets fired across them.")
high: Optional[StrictInt] = Field(default=None, description="High is how many findings rank high.")
id: Optional[StrictStr] = Field(default=None, description="ID addresses this scan and every finding on it.")
low: Optional[StrictInt] = Field(default=None, description="Low is how many findings rank low.")
medium: Optional[StrictInt] = Field(default=None, description="Medium is how many findings rank medium.")
project: Optional[StrictStr] = Field(default=None, description="Project is the sub-scope the scan was filed under.")
__properties: ClassVar[List[str]] = ["createdAt", "critical", "files", "findings", "high", "id", "low", "medium", "project"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScanView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScanView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"critical": obj.get("critical"),
"files": obj.get("files"),
"findings": obj.get("findings"),
"high": obj.get("high"),
"id": obj.get("id"),
"low": obj.get("low"),
"medium": obj.get("medium"),
"project": obj.get("project")
})
return _obj
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.score_config_view import ScoreConfigView
from typing import Optional, Set
from typing_extensions import Self
class ScoreConfigList(BaseModel):
"""
ScoreConfigList
""" # noqa: E501
data: Optional[List[ScoreConfigView]] = Field(default=None, description="Data is the caller org's rubrics, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreConfigList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreConfigList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [ScoreConfigView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ScoreConfigReq(BaseModel):
"""
ScoreConfigReq
""" # noqa: E501
categories: Optional[List[StrictStr]] = Field(default=None, description="Categories is the closed set of labels a CATEGORICAL score may carry. A CATEGORICAL rubric with none is refused.")
data_type: Optional[StrictStr] = Field(default=None, description="DataType is NUMERIC (the default), CATEGORICAL or BOOLEAN.", alias="dataType")
max_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="MaxValue is the inclusive ceiling a NUMERIC score must stay under, finite.", alias="maxValue")
min_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="MinValue is the inclusive floor a NUMERIC score must clear. It must be finite and must not exceed MaxValue.", alias="minValue")
name: StrictStr = Field(description="Name is the score name this rubric governs, matching ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. The name is the key, so re-posting one replaces its rules.")
__properties: ClassVar[List[str]] = ["categories", "dataType", "maxValue", "minValue", "name"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreConfigReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreConfigReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"categories": obj.get("categories"),
"dataType": obj.get("dataType"),
"maxValue": obj.get("maxValue"),
"minValue": obj.get("minValue"),
"name": obj.get("name")
})
return _obj
@@ -0,0 +1,99 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ScoreConfigView(BaseModel):
"""
ScoreConfigView
""" # noqa: E501
categories: Optional[List[StrictStr]] = Field(default=None, description="Categories is the closed set of labels a CATEGORICAL score may carry.")
created_at: Optional[StrictStr] = Field(default=None, description="CreatedAt is when the rubric was first declared.", alias="createdAt")
data_type: Optional[StrictStr] = Field(default=None, description="DataType is NUMERIC, CATEGORICAL or BOOLEAN, and is authoritative — a score recorded under this name cannot claim a different one.", alias="dataType")
max_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="MaxValue is the inclusive ceiling a NUMERIC score must stay under, absent when unbounded.", alias="maxValue")
min_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="MinValue is the inclusive floor a NUMERIC score must clear, absent when unbounded.", alias="minValue")
name: Optional[StrictStr] = Field(default=None, description="Name is the score name this rubric governs.")
updated_at: Optional[StrictStr] = Field(default=None, description="UpdatedAt is when it last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["categories", "createdAt", "dataType", "maxValue", "minValue", "name", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreConfigView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreConfigView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"categories": obj.get("categories"),
"createdAt": obj.get("createdAt"),
"dataType": obj.get("dataType"),
"maxValue": obj.get("maxValue"),
"minValue": obj.get("minValue"),
"name": obj.get("name"),
"updatedAt": obj.get("updatedAt")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.score_view import ScoreView
from typing import Optional, Set
from typing_extensions import Self
class ScoreList(BaseModel):
"""
ScoreList
""" # noqa: E501
data: Optional[List[ScoreView]] = Field(default=None, description="Data is the caller org's score events matching the filters, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [ScoreView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ScoreReq(BaseModel):
"""
ScoreReq
""" # noqa: E501
comment: Optional[StrictStr] = Field(default=None, description="Comment is the grader's reasoning, truncated at 2000 characters.")
data_type: Optional[StrictStr] = Field(default=None, description="DataType is NUMERIC, CATEGORICAL or BOOLEAN. A declared rubric overrides it — a caller cannot claim a type the org's rubric contradicts.", alias="dataType")
dataset_item_id: Optional[StrictStr] = Field(default=None, description="ItemID attaches the score to one graded example.", alias="datasetItemId")
dataset_name: Optional[StrictStr] = Field(default=None, description="Dataset attaches the score to one dataset.", alias="datasetName")
name: StrictStr = Field(description="Name is the score name. A rubric of the same name, if the org has declared one, decides this score's type and the values it may take.")
run_name: Optional[StrictStr] = Field(default=None, description="RunName attaches the score to one run.", alias="runName")
string_value: Optional[StrictStr] = Field(default=None, description="StringValue is the label of a CATEGORICAL score, which must be one the rubric allows.", alias="stringValue")
trace_id: Optional[StrictStr] = Field(default=None, description="TraceID attaches the score to one model call.", alias="traceId")
value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Value is the numeric score, which must be finite: NaN and Inf are refused. A BOOLEAN score takes 0 or 1.")
__properties: ClassVar[List[str]] = ["comment", "dataType", "datasetItemId", "datasetName", "name", "runName", "stringValue", "traceId", "value"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"comment": obj.get("comment"),
"dataType": obj.get("dataType"),
"datasetItemId": obj.get("datasetItemId"),
"datasetName": obj.get("datasetName"),
"name": obj.get("name"),
"runName": obj.get("runName"),
"stringValue": obj.get("stringValue"),
"traceId": obj.get("traceId"),
"value": obj.get("value")
})
return _obj
+103
View File
@@ -0,0 +1,103 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class ScoreView(BaseModel):
"""
ScoreView
""" # noqa: E501
comment: Optional[StrictStr] = Field(default=None, description="Comment is the grader's reasoning, truncated at 2000 characters.")
data_type: Optional[StrictStr] = Field(default=None, description="DataType is NUMERIC, CATEGORICAL or BOOLEAN.", alias="dataType")
id: Optional[StrictStr] = Field(default=None, description="ID is the score event's handle.")
name: Optional[StrictStr] = Field(default=None, description="Name is the score name, which a rubric of the same name governs.")
run_name: Optional[StrictStr] = Field(default=None, description="RunName is the run this score was recorded under, when it came from one.", alias="runName")
string_value: Optional[StrictStr] = Field(default=None, description="StringValue is the label of a CATEGORICAL score.", alias="stringValue")
timestamp: Optional[StrictStr] = Field(default=None, description="Timestamp is when the score was recorded.")
trace_id: Optional[StrictStr] = Field(default=None, description="TraceID is the model call this score grades, when it grades one.", alias="traceId")
value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Value is the numeric score; for BOOLEAN it is 0 or 1.")
__properties: ClassVar[List[str]] = ["comment", "dataType", "id", "name", "runName", "stringValue", "timestamp", "traceId", "value"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ScoreView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ScoreView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"comment": obj.get("comment"),
"dataType": obj.get("dataType"),
"id": obj.get("id"),
"name": obj.get("name"),
"runName": obj.get("runName"),
"stringValue": obj.get("stringValue"),
"timestamp": obj.get("timestamp"),
"traceId": obj.get("traceId"),
"value": obj.get("value")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.secret_view import SecretView
from typing import Optional, Set
from typing_extensions import Self
class SecretList(BaseModel):
"""
SecretList
""" # noqa: E501
secrets: Optional[List[SecretView]] = Field(default=None, description="Secrets is one row per distinct (namespace, name) a function mounts. Values are NEVER read or returned.")
__properties: ClassVar[List[str]] = ["secrets"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of SecretList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in secrets (list)
_items = []
if self.secrets:
for _item_secrets in self.secrets:
if _item_secrets:
_items.append(_item_secrets.to_dict())
_dict['secrets'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of SecretList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"secrets": [SecretView.from_dict(_item) for _item in obj["secrets"]] if obj.get("secrets") is not None else None
})
return _obj
+91
View File
@@ -0,0 +1,91 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class SecretView(BaseModel):
"""
SecretView
""" # noqa: E501
mounted_by: Optional[StrictStr] = Field(default=None, description="MountedBy is a function that mounts it.", alias="mountedBy")
name: Optional[StrictStr] = Field(default=None, description="Name is the environment variable the function mounts.")
namespace: Optional[StrictStr] = Field(default=None, description="Namespace is the group the mounting function belongs to.")
__properties: ClassVar[List[str]] = ["mountedBy", "name", "namespace"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of SecretView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of SecretView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"mountedBy": obj.get("mountedBy"),
"name": obj.get("name"),
"namespace": obj.get("namespace")
})
return _obj
@@ -0,0 +1,91 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class StatusBreakdown(BaseModel):
"""
StatusBreakdown
""" # noqa: E501
error: Optional[StrictInt] = Field(default=None, description="invocations that ran and failed")
success: Optional[StrictInt] = Field(default=None, description="invocations whose code ran and wrote nothing to stderr")
timeout: Optional[StrictInt] = Field(default=None, description="invocations that hit their configured deadline")
__properties: ClassVar[List[str]] = ["error", "success", "timeout"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of StatusBreakdown from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of StatusBreakdown from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"error": obj.get("error"),
"success": obj.get("success"),
"timeout": obj.get("timeout")
})
return _obj
+97
View File
@@ -0,0 +1,97 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.scan import Scan
from typing import Optional, Set
from typing_extensions import Self
class SubmitReq(BaseModel):
"""
SubmitReq
""" # noqa: E501
files: List[Scan] = Field(description="Files is the batch to scan, at most 500 files and 8 MiB of content in total.")
project: Optional[StrictStr] = Field(default=None, description="Project names the sub-scope the scan is filed under. It must be a slug; omit it and the caller's project header is used instead.")
__properties: ClassVar[List[str]] = ["files", "project"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of SubmitReq from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in files (list)
_items = []
if self.files:
for _item_files in self.files:
if _item_files:
_items.append(_item_files.to_dict())
_dict['files'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of SubmitReq from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"files": [Scan.from_dict(_item) for _item in obj["files"]] if obj.get("files") is not None else None,
"project": obj.get("project")
})
return _obj
+93
View File
@@ -0,0 +1,93 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Suite(BaseModel):
"""
Suite
""" # noqa: E501
attempts: Optional[StrictInt] = Field(default=None, description="Attempts is how many times to try each item; the harness's default applies when it is omitted.")
benchmarks: List[StrictStr] = Field(description="Benchmarks are the catalog ids to run. At least one is required, and every id must be in the catalog.")
endpoint: Optional[StrictStr] = Field(default=None, description="Endpoint is your own chat-completions URL, for benchmarking a model this arena does not host. Either this or model is required.")
model: Optional[StrictStr] = Field(default=None, description="Model is the catalog model id to run. Either this or endpoint is required.")
__properties: ClassVar[List[str]] = ["attempts", "benchmarks", "endpoint", "model"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Suite from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Suite from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"attempts": obj.get("attempts"),
"benchmarks": obj.get("benchmarks"),
"endpoint": obj.get("endpoint"),
"model": obj.get("model")
})
return _obj
+95
View File
@@ -0,0 +1,95 @@
# coding: utf-8
"""
Hanzo Cloud API
Composed from each subsystem's own projection of its router, in the fleet's mount order — every operation below is a route the subsystem that publishes it registered. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.trace_view import TraceView
from typing import Optional, Set
from typing_extensions import Self
class TraceList(BaseModel):
"""
TraceList
""" # noqa: E501
data: Optional[List[TraceView]] = Field(default=None, description="Data is the caller org's traces matching the filters, bounded by limit.")
__properties: ClassVar[List[str]] = ["data"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of TraceList from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
_items = []
if self.data:
for _item_data in self.data:
if _item_data:
_items.append(_item_data.to_dict())
_dict['data'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of TraceList from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"data": [TraceView.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
})
return _obj

Some files were not shown because too many files have changed in this diff Show More