class-ai-adaptive.php

AI Adaptive optimization — RUM → heuristic/auto-tune via suggestions.

Source includes/Insight/class-ai-adaptive.php17 min readPart of Performance Optimisation

includes/Insight/class-ai-adaptive.php

AI Adaptive optimization — RUM → heuristic/auto-tune via suggestions.

Namespace: PerformanceOptimise\\Inc · Lines: 4000

Class AI_Adaptive

Learns from RUM + trends + asset-usage heuristics and produces suggestion objects for file_optimisation / preload_settings.

Source: includes/Insight/class-ai-adaptive.php, line 25

class AI_Adaptive

Tags: @since 2.0.0

Constants

ConstantVisibilityValueLine
OPTIONpublic\'wppo_ai_model\'42
LEARN_LOCKprivate\'wppo_ai_learn_lock\'49
INP_P75_DELAY_THRESHOLD_MSpublic200.0628
INP_P75_EAGER_THRESHOLD_MSpublic500.0638
LCP_P75_DELAY_THRESHOLD_MSpublic2500.0649
LCP_P75_EAGER_THRESHOLD_MSpublic3500.0657

Properties

PropertyVisibilityTypeDefaultLine
$model_memoprivate static?arraynull35
$disabled_assets_cacheprivate staticarrayarray()1930

publicstatic is_enabled()

public static function is_enabled(): bool

Whether AI adaptive optimization is enabled.

Return: bool.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 61

publicstatic get_model()

public static function get_model(): array

Get the stored model (per-request memoized).

Return: array.

Tags: @since 2.0.0 · @since 2.2.0 Memoize per request.

Source: includes/Insight/class-ai-adaptive.php, line 85

publicstatic reset_model_memo()

public static function reset_model_memo(): void

Reset the per-request model memo (for testing).

Return: void.

Tags: @since 2.2.0

Source: includes/Insight/class-ai-adaptive.php, line 103

publicstatic reset_runtime_state()

public static function reset_runtime_state(): void

Reset all AI-owned per-blog request memos.

Return: void.

Tags: @since NEXT

Source: includes/Insight/class-ai-adaptive.php, line 113

publicstatic reset_rum_anomaly_digest_memo()

public static function reset_rum_anomaly_digest_memo(): void

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::reset_rum_anomaly_digest_memo}.

Return: void.

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 125

publicstatic update_model()

public static function update_model(array $model): void

Persist the model with autoload=no.

ParameterTypeDefaultDescription
$modelarray—Model data.

Return: void.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 136

publicstatic is_commerce_or_auth_context()

public static function is_commerce_or_auth_context(): bool

Whether the current request runs in a commerce or authenticated context.

Return: bool — True when a commerce/auth context is detected.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 168

privatestatic detect_commerce_or_auth_context()

private static function detect_commerce_or_auth_context(): bool

Internal helper to detect commerce or auth context using early returns.

Return: bool — True when a commerce/auth context is detected.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 188

publicstatic get_commerce_exclude_paths()

public static function get_commerce_exclude_paths(): array

Commerce/auth URL exclusion patterns for speculation suggestions.

Return: string[].

Tags: @see Main::add_speculation_rules() · @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 269

privatestatic is_frontend_context()

private static function is_frontend_context(): bool

Whether the current request is a frontend visitor context.

Return: bool — True when the request looks like a frontend visit.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 339

privatestatic normalize_eagerness()

private static function normalize_eagerness($eagerness): string

Normalize an eagerness value: allowlist then commerce/auth cap.

ParameterTypeDefaultDescription
$eagernessmixed—Raw eagerness value.

Return: string — Normalized eagerness value.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 391

publicstatic maybe_cap_eagerness()

public static function maybe_cap_eagerness(string $eagerness): string

Cap an AI-learned eagerness value at `moderate` in commerce/auth contexts.

ParameterTypeDefaultDescription
$eagernessstring—Learned eagerness value.

Return: string — Capped eagerness value.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 415

publicstatic is_wp_ai_client_enabled()

public static function is_wp_ai_client_enabled(): bool

Whether the optional WordPress AI client path is enabled.

Return: bool.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 433

privatestatic is_valid_suggestion()

private static function is_valid_suggestion($s): bool

Validate a suggestion object shape before display.

ParameterTypeDefaultDescription
$smixed—Candidate suggestion.

Return: bool — True when the shape is valid.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 459

publicstatic learn()

public static function learn(): array

Learn from RUM + trends + disabled-script frequency.

Return: array — The updated model.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 498

privatestatic learn_via_ai_client()

private static function learn_via_ai_client(?array=null $rum, ?array=null $trends): ?array

Attempt learning via WP 7.0 AI Client when available.

ParameterTypeDefaultDescription
$rum?array=null—Optional pre-loaded RUM aggregate (loaded once per learn run).
$trends?array=null—Optional pre-loaded trends aggregate.

Return: array|null — Model or null on fallback.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 573

privatestatic segmented_field_lcp()

private static function segmented_field_lcp(int=1 $min_samples): array

Read segmented field-LCP p75 rows (device × template × connection) fail-open.

ParameterTypeDefaultDescription
$min_samplesint=1—Minimum samples per segment (1 = observe all).

Return: array[] — Rows of array(path,device,template,connection,n,p75).

Tags: @since 2.0.0 · @since 2.2.0 Rows carry the `connection` segment dimension.

Source: includes/Insight/class-ai-adaptive.php, line 671

privatestatic segmented_field_inp()

private static function segmented_field_inp(int=1 $min_samples): array

Read segmented field-INP p75 rows (device × template × connection) fail-open.

ParameterTypeDefaultDescription
$min_samplesint=1—Minimum samples per segment (1 = observe all).

Return: array[] — Rows of array(path,device,template,connection,n,p75).

Tags: @since 2.0.0 · @since 2.2.0 Rows carry the `connection` segment dimension.

Source: includes/Insight/class-ai-adaptive.php, line 696

privatestatic segment_connection()

private static function segment_connection($row): string

Extract the connection segment from a RUM segment row fail-open.

ParameterTypeDefaultDescription
$rowmixed—Segment row.

Return: string — Allowlisted connection type or \’unknown\’.

Tags: @since 2.2.0

Source: includes/Insight/class-ai-adaptive.php, line 720

privatestatic segment_descriptor()

private static function segment_descriptor($row): array

Build a segment descriptor from a RUM segment row fail-open.

ParameterTypeDefaultDescription
$rowmixed—Segment row.

Return: array{path:string,device:string,template:string,connection:string} — Segment descriptor.

Tags: @since 2.2.0

Source: includes/Insight/class-ai-adaptive.php, line 742

privatestatic slowest_segment_row()

private static function slowest_segment_row(array $rows): ?array

Pick the slowest-p75 segment row from qualified rows (slowest-first).

ParameterTypeDefaultDescription
$rowsarray—Qualified segment rows.

Return: array|null — Slowest row or null when empty.

Tags: @since 2.2.0

Source: includes/Insight/class-ai-adaptive.php, line 766

publicstatic get_slow_top_path_state()

public static function get_slow_top_path_state(): array

RUM-driven slow-top-path state for heuristic auto-tune (read-only, fail-open).

Return: array{slow:bool,path:string,segment:array|null,p75:float,samples:int,min_samples:int,preload_url:string} — Slow-path state.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 806

publicstatic get_slow_path_downgrade_target()

public static function get_slow_path_downgrade_target(string $eagerness): string

Downgrade target for a slow top path (one eagerness step down, floored).

ParameterTypeDefaultDescription
$eagernessstring—Current learned eagerness.

Return: string — Downgraded eagerness.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 882

privatestatic eagerness_level()

private static function eagerness_level(string $eagerness): int

Numeric level for an allowlisted eagerness value (ladder helper).

ParameterTypeDefaultDescription
$eagernessstring—Allowlisted eagerness value.

Return: int — Numeric ladder level (0-2).

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 900

privatestatic eagerness_from_level()

private static function eagerness_from_level(int $level): string

Eagerness value for a numeric ladder level (ladder helper).

ParameterTypeDefaultDescription
$levelint—Numeric ladder level.

Return: string — Allowlisted eagerness value.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 919

privatestatic slow_segment_labels()

private static function slow_segment_labels($segment): array

Device/template/connection labels for a slow-path segment.

ParameterTypeDefaultDescription
$segmentmixed—Segment descriptor (or null).

Return: array{0:string,1:string,2:string} — Device, template, connection labels.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 938

privatestatic sanitize_slow_preload_url()

private static function sanitize_slow_preload_url($url): string

Sanitize a persisted/live slow-path preload URL for suggestion copy.

ParameterTypeDefaultDescription
$urlmixed—Raw URL value.

Return: string — Sanitized URL or \’\’ when invalid.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 959

publicstatic get_dismissed_suggestions()

public static function get_dismissed_suggestions(): array

Dismissed AI suggestion metrics (persisted, per-site).

Return: string[] — Dismissed metric identifiers.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1004

publicstatic is_suggestion_dismissed()

public static function is_suggestion_dismissed(string $metric): bool

Whether an AI suggestion metric has been dismissed.

ParameterTypeDefaultDescription
$metricstring—Suggestion metric identifier.

Return: bool — True when dismissed.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1035

publicstatic get_rum_gated_delay_state()

public static function get_rum_gated_delay_state(): array

RUM-gated, INP-aware delay-JS state (read-only, fail-open).

Return: array{qualified:bool,level:string,inp_p75:float,lcp_p75:float,samples:int,min_samples:int,provisional:bool,segment:array|null} — Gated state.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1063

privatestatic field_lcp_min_samples()

private static function field_lcp_min_samples(): int

Resolve the field-LCP minimum-sample threshold for auto-tune.

Return: int — Minimum samples (>=1).

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1170

privatestatic format_p75_seconds()

private static function format_p75_seconds(float $p75_ms): string

Format a p75 millisecond value as seconds for suggestion copy.

ParameterTypeDefaultDescription
$p75_msfloat—p75 in milliseconds.

Return: string — e.g. \”3.8s\”.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1194

privatestatic summarize_aggregates_for_prompt()

private static function summarize_aggregates_for_prompt(array $rum, array $trends): array

Summarize large aggregates into a bounded prompt projection.

ParameterTypeDefaultDescription
$rumarray—RUM aggregate.
$trendsarray—Trends aggregate.

Return: array{rum:array,trends:array} — Bounded summary.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1212

privatestatic heuristic_learn()

private static function heuristic_learn(?array=null $rum, ?array=null $trends): array

Heuristic fallback learning.

ParameterTypeDefaultDescription
$rum?array=null—Optional pre-loaded RUM aggregate.
$trends?array=null—Optional pre-loaded trends aggregate.

Return: array.

Tags: @since 2.0.0 · @since 2.2.0 Global-average eagerness upgrades are gated on total LCP samples reaching field_lcp_min_samples (suggest-only below).

Source: includes/Insight/class-ai-adaptive.php, line 1294

publicstatic get_deploy_notes()

public static function get_deploy_notes(): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_deploy_notes}.

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1689

publicstatic add_deploy_note()

public static function add_deploy_note(string $note, ?int=null $ts): bool

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::add_deploy_note}.

ParameterTypeDefaultDescription
$notestring—Parameter (see Ai_Anomaly).
$ts?int=null—Parameter (see Ai_Anomaly).

Return: bool — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1702

publicstatic find_deploy_note_near()

public static function find_deploy_note_near(int $breach_ts): string

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::find_deploy_note_near}.

ParameterTypeDefaultDescription
$breach_tsint—Parameter (see Ai_Anomaly).

Return: string — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1714

publicstatic get_breach_state()

public static function get_breach_state(): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_breach_state}.

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1725

publicstatic set_breach_state()

public static function set_breach_state(array $state): void

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::set_breach_state}.

ParameterTypeDefaultDescription
$statearray—Parameter (see Ai_Anomaly).

Return: void.

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1737

publicstatic detect_recoveries()

public static function detect_recoveries(?array=null $trends, ?int=null $now): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::detect_recoveries}.

ParameterTypeDefaultDescription
$trends?array=null—Parameter (see Ai_Anomaly).
$now?int=null—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1750

publicstatic get_last_anomaly_alarm()

public static function get_last_anomaly_alarm(): int

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_last_anomaly_alarm}.

Return: int — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1761

publicstatic set_last_anomaly_alarm()

public static function set_last_anomaly_alarm(int $ts): void

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::set_last_anomaly_alarm}.

ParameterTypeDefaultDescription
$tsint—Parameter (see Ai_Anomaly).

Return: void.

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1773

publicstatic is_anomaly_cooled_down()

public static function is_anomaly_cooled_down(?int=null $now): bool

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::is_anomaly_cooled_down}.

ParameterTypeDefaultDescription
$now?int=null—Parameter (see Ai_Anomaly).

Return: bool — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1785

publicstatic get_rum_anomaly_digest()

public static function get_rum_anomaly_digest(?array=null $rum, ?int=null $now): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_rum_anomaly_digest}.

ParameterTypeDefaultDescription
$rum?array=null—Parameter (see Ai_Anomaly).
$now?int=null—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1798

publicstatic detect_anomalies()

public static function detect_anomalies(?array=null $trends, ?array=null $rum, ?int=null $now): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::detect_anomalies}.

ParameterTypeDefaultDescription
$trends?array=null—Parameter (see Ai_Anomaly).
$rum?array=null—Parameter (see Ai_Anomaly).
$now?int=null—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1812

publicstatic is_css_refresh_enabled()

public static function is_css_refresh_enabled(): bool

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::is_css_refresh_enabled}.

Return: bool — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1823

publicstatic css_refresh_cooldown_days()

public static function css_refresh_cooldown_days(): int

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::css_refresh_cooldown_days}.

Return: int — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1834

publicstatic resolve_anomaly_url()

public static function resolve_anomaly_url(string $trend_key): string

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::resolve_anomaly_url}.

ParameterTypeDefaultDescription
$trend_keystring—Parameter (see Ai_Anomaly).

Return: string — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1846

publicstatic is_homepage_url()

public static function is_homepage_url(string $url): bool

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::is_homepage_url}.

ParameterTypeDefaultDescription
$urlstring—Parameter (see Ai_Anomaly).

Return: bool — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1858

publicstatic resolve_front_page_post_id()

public static function resolve_front_page_post_id(): int

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::resolve_front_page_post_id}.

Return: int — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1869

publicstatic resolve_anomaly_post_id()

public static function resolve_anomaly_post_id(string $url): int

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::resolve_anomaly_post_id}.

ParameterTypeDefaultDescription
$urlstring—Parameter (see Ai_Anomaly).

Return: int — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1881

publicstatic get_css_refresh_snapshot()

public static function get_css_refresh_snapshot(string $url): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_css_refresh_snapshot}.

ParameterTypeDefaultDescription
$urlstring—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1893

publicstatic maybe_queue_css_refresh()

public static function maybe_queue_css_refresh(array $anomaly, ?int=null $now): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::maybe_queue_css_refresh}.

ParameterTypeDefaultDescription
$anomalyarray—Parameter (see Ai_Anomaly).
$now?int=null—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1906

publicstatic get_anomaly_provisional_state()

public static function get_anomaly_provisional_state(?array=null $trends, ?array=null $rum, ?int=null $now): array

Facade proxy (ARCH-010): canonical owner is {@see \\PerformanceOptimise\\Inc\\Ai_Anomaly::get_anomaly_provisional_state}.

ParameterTypeDefaultDescription
$trends?array=null—Parameter (see Ai_Anomaly).
$rum?array=null—Parameter (see Ai_Anomaly).
$now?int=null—Parameter (see Ai_Anomaly).

Return: array — Result (see Ai_Anomaly).

Tags: @since 2.4.0

Source: includes/Insight/class-ai-adaptive.php, line 1920

publicstatic reset_disabled_assets_cache()

public static function reset_disabled_assets_cache(): void

Reset the per-request disabled-asset memo (for testing).

Return: void.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1938

privatestatic top_disabled_handles()

private static function top_disabled_handles(array $rows): array

Rank serialized handle lists into top-3 handles by frequency.

ParameterTypeDefaultDescription
$rowsarray—Raw meta_value strings.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1949

privatestatic get_disabled_assets()

private static function get_disabled_assets(string $meta_key): array

Get most-frequently disabled assets from postmeta.

ParameterTypeDefaultDescription
$meta_keystring—The meta key to query.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 1981

publicstatic get_prefetch_urls()

public static function get_prefetch_urls(): array

Get AI-learned prefetch URLs (top-2).

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 2069

privatestatic get_prefetch_urls_from_model()

private static function get_prefetch_urls_from_model(array $model): array

Extract top-2 sanitized prefetch URLs from a model array.

ParameterTypeDefaultDescription
$modelarray—Model data.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 2083

publicstatic get_suggestions()

public static function get_suggestions(): array

Generate suggestion objects for the suggestion engine.

Return: array[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 2143

publicstatic is_speculation_rum_gating_enabled()

public static function is_speculation_rum_gating_enabled(): bool

Whether RUM-gated speculation eagerness is enabled.

Return: bool — True when RUM gating applies.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 2918

publicstatic is_speculation_autotune_enabled()

public static function is_speculation_autotune_enabled(): bool

Whether RUM-segmented speculation auto-tune is enabled (issue #1425).

Return: bool — True when the RUM-segmented per-URL auto-tune applies.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 2955

publicstatic speculation_min_samples()

public static function speculation_min_samples(): int

Minimum RUM samples for the speculation auto-tune (issue #1425).

Return: int — Minimum samples (>=1).

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 2986

publicstatic speculation_max_urls()

public static function speculation_max_urls(): int

Maximum per-URL list-rule URLs for the speculation auto-tune (issue #1425).

Return: int — Maximum URLs (1-5).

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 3019

publicstatic trim_speculation_urls_to_budget()

public static function trim_speculation_urls_to_budget(array $urls, int=1024 $budget_bytes): array

Trim a candidate list-rule URL set so its JSON delta stays under budget.

ParameterTypeDefaultDescription
$urlsarray—Candidate absolute URLs (rank-ordered).
$budget_bytesint=1024—Maximum encoded size in bytes.

Return: string[].

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 3055

publicstatic get_rum_gated_speculation_state()

public static function get_rum_gated_speculation_state(?bool=null $gating_enabled, ?int=null $min_samples_override): array

RUM-gated speculation eagerness state (read-only, fail-open).

ParameterTypeDefaultDescription
$gating_enabled?bool=null—Pre-resolved gating flag. Null resolves via is_speculation_rum_gating_enabled().
$min_samples_override?int=null—Optional minimum-samples override (e.g. speculation_min_samples()). Null uses the shared field_lcp_min_samples() gate.

Return: array{qualified:bool,eagerness:string,lcp_p75:float,inp_p75:float,samples:int,min_samples:int,gated:bool} — Gated state.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3123

privatestatic validate_speculation_threshold()

private static function validate_speculation_threshold($value, float $fallback): float

Validate a RUM-gated speculation p75 threshold from a filter value.

ParameterTypeDefaultDescription
$valuemixed—Raw filter value.
$fallbackfloat—Fallback threshold.

Return: float — Validated threshold (>= 0 and finite).

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3253

privatestatic is_speculation_commerce_url()

private static function is_speculation_commerce_url(string $url, array $excludes): bool

Whether an absolute URL falls under a commerce exclude prefix.

ParameterTypeDefaultDescription
$urlstring—Absolute URL.
$excludesarray—Commerce exclude prefixes (e.g. `/cart/*`).

Return: bool — True when the URL path matches a commerce prefix.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3281

publicstatic peak_rum_metric_samples()

public static function peak_rum_metric_samples(array $metrics): int

Peak per-bucket sample count across all RUM metrics (issue #1425).

ParameterTypeDefaultDescription
$metricsarray—Single path-bucket metric map.

Return: int — Peak `n` (>= 0).

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 3315

publicstatic get_rum_top_speculation_urls()

public static function get_rum_top_speculation_urls(int=5 $limit): array

Top RUM (real-visit) URLs for the RUM-gated speculation list rule.

ParameterTypeDefaultDescription
$limitint=5—Maximum URLs to return.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3349

privatestatic is_speculation_hard_suppressed()

private static function is_speculation_hard_suppressed(): bool

Whether the AI speculation rule is hard-suppressed for this request.

Return: bool — True when no AI rule must be emitted.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3491

privatestatic get_autotuned_speculation_rule()

private static function get_autotuned_speculation_rule($rules, ?int=null $min_override, ?int=null $max_override)

Build the RUM-segmented auto-tuned list rule (issue #1425).

ParameterTypeDefaultDescription
$rulesarray—Incoming speculation rules (core default).
$min_override?int=null—Optional pre-resolved minimum samples (avoids an extra settings read on the hot path).
$max_override?int=null—Optional pre-resolved maximum URLs (avoids an extra settings read on the hot path).

Return: array|null — Rules with the auto-tuned list rule appended, the input unchanged, or null on failure.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 3563

privatestatic sanitize_speculation_rules_after_filter()

private static function sanitize_speculation_rules_after_filter($filtered, array $fallback, int $max, bool=true $strict): array

Re-apply the auto-tune guard pipeline to post-filter speculation rules.

ParameterTypeDefaultDescription
$filteredmixed—Filtered rules (untrusted).
$fallbackarray—Pre-filter rules (guarded).
$maxint—Maximum URLs per list rule (1-5).
$strictbool=true—When false, commerce/eager guards are contextual.

Return: array — Sanitized rules.

Tags: @since 2.3.0

Source: includes/Insight/class-ai-adaptive.php, line 3684

publicstatic filter_speculation_rules()

public static function filter_speculation_rules($rules)

Inject AI-learned prefetch URLs into speculation rules.

ParameterTypeDefaultDescription
$rulesarray—Speculation rules array.

Return: array.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3769

privatestatic filter_same_site_urls()

private static function filter_same_site_urls(array $urls): array

Keep only same-site, non-admin, non-commerce list URLs.

ParameterTypeDefaultDescription
$urlsarray—Candidate URLs.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3927

privatestatic dedupe_against_existing_lists()

private static function dedupe_against_existing_lists(array $urls, array $rules): array

Remove URLs already covered by an existing list-source rule.

ParameterTypeDefaultDescription
$urlsarray—Candidate AI URLs.
$rulesarray—Existing speculation rules.

Return: string[].

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3966

publicstatic init()

public static function init(): void

Register hooks.

Return: void.

Tags: @since 2.0.0

Source: includes/Insight/class-ai-adaptive.php, line 3994

Hooks

Hooks referenced in includes/Insight/class-ai-adaptive.php:

HookTypeLineNotes
wppo_ai_adaptive_enabledfilter70@param ×1
wppo_ai_adaptive_commerce_contextfilter179@param ×1
wppo_ai_adaptive_use_wp_clientfilter442@param ×1
wppo_ai_adaptive_eagernessfilter1570@param ×2
wppo_ai_speculation_rum_gatingfilter2934@param ×1
wppo_ai_speculation_autotune_enabledfilter2966@param ×1
wppo_ai_speculation_lcp_thresholdfilter3192@param ×1
wppo_ai_speculation_inp_thresholdfilter3199@param ×1
wppo_ai_speculation_eagernessfilter3214@param ×2
wppo_ai_speculation_top_urlsfilter3446@param ×1
wppo_ai_adaptive_speculation_rulesfilter3647@param ×2
wppo_ai_speculation_autotune_enabledfilter3802—
wppo_ai_speculation_rum_gatingfilter3813—
wppo_ai_adaptive_speculation_rulesfilter3910@param ×2