@hashgraphonline/standards-sdk 0.1.187 → 0.1.188
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client.d.ts +1 -0
- package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +149 -0
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
- package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser-root/standards-sdk.root-browser.js +404 -15
- package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +1 -0
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
- package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +1 -0
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +50 -27
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es116.js +2 -2
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +4 -4
- package/dist/es/standards-sdk.es121.js +11 -11
- package/dist/es/standards-sdk.es126.js +1 -1
- package/dist/es/standards-sdk.es132.js +3 -2
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +5 -5
- package/dist/es/standards-sdk.es143.js +1 -1
- package/dist/es/standards-sdk.es144.js +1 -1
- package/dist/es/standards-sdk.es145.js +5 -5
- package/dist/es/standards-sdk.es147.js +3 -3
- package/dist/es/standards-sdk.es148.js +1 -1
- package/dist/es/standards-sdk.es150.js +24 -15
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +372 -248
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +259 -4
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +4 -81
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +71 -77
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +80 -53
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +59 -2546
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2547 -159
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +159 -7
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +3 -2
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +7 -86
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +64 -43
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +57 -186
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +188 -20
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +22 -54
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +41 -78
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +81 -35
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +36 -191
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +191 -43
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +46 -39
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +37 -44
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +46 -39
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +29 -102
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +104 -36
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +43 -33
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +44 -72
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +65 -61
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +63 -39
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +44 -36
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +36 -30
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +6 -5
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es180.js +30 -34
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +34 -48
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +48 -138
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +133 -37
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +34 -12474
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +12425 -615
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +47 -102
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +96 -58
- package/dist/es/standards-sdk.es187.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +73 -48
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +180 -61
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +4 -3
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es190.js +14 -197
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es191.js +658 -158
- package/dist/es/standards-sdk.es191.js.map +1 -1
- package/dist/es/standards-sdk.es192.js +139 -289
- package/dist/es/standards-sdk.es192.js.map +1 -1
- package/dist/es/standards-sdk.es193.js +274 -298
- package/dist/es/standards-sdk.es193.js.map +1 -1
- package/dist/es/standards-sdk.es194.js +262 -369
- package/dist/es/standards-sdk.es194.js.map +1 -1
- package/dist/es/standards-sdk.es195.js +316 -194
- package/dist/es/standards-sdk.es195.js.map +1 -1
- package/dist/es/standards-sdk.es196.js +319 -64
- package/dist/es/standards-sdk.es196.js.map +1 -1
- package/dist/es/standards-sdk.es197.js +74 -15
- package/dist/es/standards-sdk.es197.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +60 -126
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +104 -482
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es200.js +480 -222
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +239 -176
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +178 -101
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +75 -108
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +116 -148
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +146 -646
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +661 -162
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +156 -206
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +219 -223
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +242 -0
- package/dist/es/standards-sdk.es209.js.map +1 -0
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es27.js +6 -5
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es35.js +4 -3
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +3 -3
- package/dist/es/standards-sdk.es37.js +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +4 -3
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +1 -1
- package/dist/es/standards-sdk.es72.js +2 -2
- package/dist/es/standards-sdk.es75.js +3 -3
- package/dist/es/standards-sdk.es76.js +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es83.js +1 -1
- package/dist/es/standards-sdk.es84.js +3 -2
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es90.js +1 -1
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es167.js","sources":["../../src/hcs-25/adapters/model-evals.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport {\n readNumber,\n readString,\n readSubjectAdditional,\n type Hcs25JsonObject,\n} from '../signals';\n\n/**\n * Options for the OpenRouter benchmarks adapter.\n */\nexport interface Hcs25OpenRouterEvalsAdapterOptions {\n /** Multiplier applied to scores whose coverage status is `low-coverage`. */\n lowCoverageMultiplier?: number;\n /** Model catalog registries where the adapter applies. */\n includeRegistries?: readonly string[];\n}\n\n/**\n * A heuristic model tier: a score plus the lowercase identifier patterns\n * that map to it. The first matching tier wins.\n */\nexport interface Hcs25ModelTier {\n score: number;\n patterns: readonly string[];\n}\n\n/**\n * Options for the fallback model-tier adapter.\n */\nexport interface Hcs25ModelTierAdapterOptions {\n /** Tier table; the first matching tier wins. */\n tiers?: readonly Hcs25ModelTier[];\n /** Score for models that match no tier. Default 50. */\n defaultScore?: number;\n /** Metadata keys checked for the model identifier, in order. */\n modelIdKeys?: readonly string[];\n /** Model catalog registries where the adapter applies. */\n includeRegistries?: readonly string[];\n}\n\nconst DEFAULT_MODEL_REGISTRIES: readonly string[] = ['openrouter', 'near-ai'];\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nconst DEFAULT_MODEL_TIERS: readonly Hcs25ModelTier[] = [\n {\n score: 95,\n patterns: [\n 'gpt-5',\n 'gpt-4.5',\n 'o3',\n 'o4-mini',\n 'claude-opus-4',\n 'claude-4-opus',\n 'gemini-3',\n 'grok-4',\n ],\n },\n {\n score: 85,\n patterns: [\n 'claude-sonnet-4',\n 'claude-4-sonnet',\n 'claude-3-7-sonnet',\n 'gemini-2.5-pro',\n 'deepseek-v3',\n 'deepseek-r1',\n 'llama-4-maverick',\n 'qwen3-235b',\n 'grok-3',\n ],\n },\n {\n score: 70,\n patterns: [\n 'gpt-4o',\n 'gemini-2.5-flash',\n 'claude-haiku',\n 'llama-4-scout',\n 'qwen3-32b',\n 'mistral-large',\n ],\n },\n {\n score: 55,\n patterns: ['llama-3.3', 'llama-3.1', 'qwen', 'mistral', 'gemma', 'phi-'],\n },\n { score: 35, patterns: ['llama-2', 'gpt-3.5', 'gemini-1'] },\n];\n\nconst DEFAULT_MODEL_ID_KEYS: readonly string[] = [\n 'openrouterModelId',\n 'modelId',\n 'model',\n];\n\n/**\n * Creates the `openrouter-evals` adapter: exposes a coverage-aware\n * benchmark component for model catalog entries, down-weighting\n * low-coverage scores.\n */\nexport function createOpenRouterEvalsAdapter(\n options: Hcs25OpenRouterEvalsAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const lowCoverageMultiplier = options.lowCoverageMultiplier ?? 0.5;\n\n return {\n id: 'openrouter-evals',\n weight: 0.5,\n contributionMode: 'scoped',\n includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'openrouter-evals.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional: Hcs25JsonObject = readSubjectAdditional(subject);\n const score = readNumber(additional, 'openrouterEvalScore');\n const status = readString(additional, 'openrouterEvalStatus');\n\n if (score === null || status === 'missing') {\n return MISSING;\n }\n\n const multiplier =\n status === 'low-coverage' ? lowCoverageMultiplier : 1;\n return { value: clampScore(score * multiplier), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `chatbot-arena` adapter: exposes an independent\n * preference-leaderboard signal as a normalized component.\n */\nexport function createChatbotArenaAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'chatbot-arena',\n weight: 6,\n contributionMode: 'scoped',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'chatbot-arena.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score = readNumber(additional, 'chatbotArenaEvalScore');\n const status = readString(additional, 'chatbotArenaEvalStatus');\n\n if (score === null || status !== 'ok') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `huggingface-model-index` adapter: exposes Hugging\n * Face-derived model-index and popularity signals, contributing only when\n * coverage exists.\n */\nexport function createHuggingFaceModelIndexAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'huggingface-model-index',\n weight: 0.8,\n contributionMode: 'conditional',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'huggingface-model-index.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score =\n readNumber(additional, 'huggingFaceEvalScore') ??\n readNumber(additional, 'huggingFaceSignalScore');\n const status = readString(additional, 'huggingFaceEvalStatus');\n const mode = readString(additional, 'huggingFaceEvalMode');\n\n if (score === null || status !== 'ok' || mode === 'missing') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `openllm-leaderboard` adapter: exposes a benchmark-derived\n * leaderboard score, contributing only when a record exists.\n */\nexport function createOpenLlmLeaderboardAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'openllm-leaderboard',\n weight: 1,\n contributionMode: 'conditional',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'openllm-leaderboard.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score = readNumber(additional, 'openLlmEvalScore');\n const status = readString(additional, 'openLlmEvalStatus');\n\n if (score === null || status !== 'ok') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `model-tier` adapter: a deterministic fallback heuristic for\n * model catalogs with sparse external-eval coverage. It suppresses itself\n * when OpenRouter coverage is sufficient or any independent eval source\n * exists, per the specification's fallback-only guidance.\n */\nexport function createModelTierAdapter(\n options: Hcs25ModelTierAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const tiers = options.tiers ?? DEFAULT_MODEL_TIERS;\n const defaultScore = options.defaultScore ?? 50;\n const modelIdKeys = options.modelIdKeys ?? DEFAULT_MODEL_ID_KEYS;\n\n return {\n id: 'model-tier',\n weight: 2,\n contributionMode: 'conditional',\n includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'model-tier.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n\n const hasStrongCoverage =\n readString(additional, 'openrouterEvalStatus') === 'ok';\n const hasIndependentEvals = [\n 'chatbotArenaEvalStatus',\n 'huggingFaceEvalStatus',\n 'openLlmEvalStatus',\n ].some(key => readString(additional, key) === 'ok');\n if (hasStrongCoverage || hasIndependentEvals) {\n return MISSING;\n }\n\n const modelId = modelIdKeys\n .map(key => readString(additional, key))\n .find((value): value is string => value !== null);\n if (modelId === null) {\n return MISSING;\n }\n\n const normalizedId = modelId.toLowerCase();\n const tier = tiers.find(entry =>\n entry.patterns.some(pattern =>\n normalizedId.includes(pattern.toLowerCase()),\n ),\n );\n return {\n value: clampScore(tier ? tier.score : defaultScore),\n status: 'ok',\n };\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es167.js","sources":["../../src/hcs-25/adapters/availability.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport { readBoolean, readNumber, readSubjectMetrics } from '../signals';\n\n/**\n * Options for the availability adapter.\n */\nexport interface Hcs25AvailabilityAdapterOptions {\n /**\n * How to interpret `availabilityScore`. `auto` (the default) treats\n * values up to and including one as a ratio and larger values as an\n * already-normalized percent.\n */\n scoreScale?: 'ratio' | 'percent' | 'auto';\n /** Recency window in minutes for last-seen decay. Defaults to 1440. */\n recencyWindowMinutes?: number;\n /** Registries where reachability is not meaningful. */\n excludeRegistries?: readonly string[];\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n];\n\nfunction normalizeAvailability(\n subject: Hcs25Subject,\n scoreScale: 'ratio' | 'percent' | 'auto',\n recencyWindowMinutes: number,\n): Hcs25NormalizedValue {\n const metadata = subject.metadata;\n const rawScore = metadata ? readNumber(metadata, 'availabilityScore') : null;\n if (rawScore !== null) {\n const ratio =\n scoreScale === 'ratio'\n ? rawScore\n : scoreScale === 'percent'\n ? rawScore / 100\n : rawScore > 1\n ? rawScore / 100\n : rawScore;\n return { value: clampScore(ratio * 100), status: 'ok' };\n }\n\n const metrics = readSubjectMetrics(subject);\n const minsFromLastOnline = readNumber(metrics, 'minsFromLastOnline');\n if (minsFromLastOnline !== null) {\n return {\n value: clampScore(100 * (1 - minsFromLastOnline / recencyWindowMinutes)),\n status: 'ok',\n };\n }\n\n const isOnline = readBoolean(metrics, 'isOnline');\n if (isOnline !== null) {\n return { value: isOnline ? 100 : 0, status: 'ok' };\n }\n\n return { value: 0, status: 'missing' };\n}\n\n/**\n * Creates the `availability` adapter: rewards reachable endpoints and\n * penalizes long offline windows using a linear 24-hour recency decay.\n */\nexport function createAvailabilityAdapter(\n options: Hcs25AvailabilityAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const scoreScale = options.scoreScale ?? 'auto';\n const recencyWindowMinutes = options.recencyWindowMinutes ?? 1440;\n\n return {\n id: 'availability',\n weight: 1,\n contributionMode: 'universal',\n excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,\n defaultComponentKey: 'availability.uptime',\n components: [\n {\n name: 'uptime',\n normalize: ({ subject }) =>\n normalizeAvailability(subject, scoreScale, recencyWindowMinutes),\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;AAwBA,MAAM,8BAAiD;AAAA,EACrD;AAAA,EACA;AACF;AAEA,SAAS,sBACP,SACA,YACA,sBACsB;AACtB,QAAM,WAAW,QAAQ;AACzB,QAAM,WAAW,WAAW,WAAW,UAAU,mBAAmB,IAAI;AACxE,MAAI,aAAa,MAAM;AACrB,UAAM,QACJ,eAAe,UACX,WACA,eAAe,YACb,WAAW,MACX,WAAW,IACT,WAAW,MACX;AACV,WAAO,EAAE,OAAO,WAAW,QAAQ,GAAG,GAAG,QAAQ,KAAA;AAAA,EACnD;AAEA,QAAM,UAAU,mBAAmB,OAAO;AAC1C,QAAM,qBAAqB,WAAW,SAAS,oBAAoB;AACnE,MAAI,uBAAuB,MAAM;AAC/B,WAAO;AAAA,MACL,OAAO,WAAW,OAAO,IAAI,qBAAqB,qBAAqB;AAAA,MACvE,QAAQ;AAAA,IAAA;AAAA,EAEZ;AAEA,QAAM,WAAW,YAAY,SAAS,UAAU;AAChD,MAAI,aAAa,MAAM;AACrB,WAAO,EAAE,OAAO,WAAW,MAAM,GAAG,QAAQ,KAAA;AAAA,EAC9C;AAEA,SAAO,EAAE,OAAO,GAAG,QAAQ,UAAA;AAC7B;AAMO,SAAS,0BACd,UAA2C,IACnB;AACxB,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAM,uBAAuB,QAAQ,wBAAwB;AAE7D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,mBAAmB,QAAQ,qBAAqB;AAAA,IAChD,qBAAqB;AAAA,IACrB,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,QAAA,MACZ,sBAAsB,SAAS,YAAY,oBAAoB;AAAA,MAAA;AAAA,IACnE;AAAA,EACF;AAEJ;"}
|
|
@@ -1,59 +1,207 @@
|
|
|
1
1
|
import { clampScore } from "./standards-sdk.es119.js";
|
|
2
|
-
import {
|
|
3
|
-
import "./standards-sdk.
|
|
4
|
-
import "./standards-sdk.es175.js";
|
|
2
|
+
import { readSubjectAdditional, readNumber, readString } from "./standards-sdk.es179.js";
|
|
3
|
+
import "./standards-sdk.es163.js";
|
|
5
4
|
import "./standards-sdk.es176.js";
|
|
6
5
|
import "./standards-sdk.es177.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"near-ai"
|
|
10
|
-
];
|
|
6
|
+
import "./standards-sdk.es178.js";
|
|
7
|
+
const DEFAULT_MODEL_REGISTRIES = ["openrouter", "near-ai"];
|
|
11
8
|
const MISSING = { value: 0, status: "missing" };
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
9
|
+
const DEFAULT_MODEL_TIERS = [
|
|
10
|
+
{
|
|
11
|
+
score: 95,
|
|
12
|
+
patterns: [
|
|
13
|
+
"gpt-5",
|
|
14
|
+
"gpt-4.5",
|
|
15
|
+
"o3",
|
|
16
|
+
"o4-mini",
|
|
17
|
+
"claude-opus-4",
|
|
18
|
+
"claude-4-opus",
|
|
19
|
+
"gemini-3",
|
|
20
|
+
"grok-4"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
score: 85,
|
|
25
|
+
patterns: [
|
|
26
|
+
"claude-sonnet-4",
|
|
27
|
+
"claude-4-sonnet",
|
|
28
|
+
"claude-3-7-sonnet",
|
|
29
|
+
"gemini-2.5-pro",
|
|
30
|
+
"deepseek-v3",
|
|
31
|
+
"deepseek-r1",
|
|
32
|
+
"llama-4-maverick",
|
|
33
|
+
"qwen3-235b",
|
|
34
|
+
"grok-3"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
score: 70,
|
|
39
|
+
patterns: [
|
|
40
|
+
"gpt-4o",
|
|
41
|
+
"gemini-2.5-flash",
|
|
42
|
+
"claude-haiku",
|
|
43
|
+
"llama-4-scout",
|
|
44
|
+
"qwen3-32b",
|
|
45
|
+
"mistral-large"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
score: 55,
|
|
50
|
+
patterns: ["llama-3.3", "llama-3.1", "qwen", "mistral", "gemma", "phi-"]
|
|
51
|
+
},
|
|
52
|
+
{ score: 35, patterns: ["llama-2", "gpt-3.5", "gemini-1"] }
|
|
53
|
+
];
|
|
54
|
+
const DEFAULT_MODEL_ID_KEYS = [
|
|
55
|
+
"openrouterModelId",
|
|
56
|
+
"modelId",
|
|
57
|
+
"model"
|
|
58
|
+
];
|
|
59
|
+
function createOpenRouterEvalsAdapter(options = {}) {
|
|
60
|
+
const lowCoverageMultiplier = options.lowCoverageMultiplier ?? 0.5;
|
|
61
|
+
return {
|
|
62
|
+
id: "openrouter-evals",
|
|
63
|
+
weight: 0.5,
|
|
64
|
+
contributionMode: "scoped",
|
|
65
|
+
includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,
|
|
66
|
+
defaultComponentKey: "openrouter-evals.score",
|
|
67
|
+
components: [
|
|
68
|
+
{
|
|
69
|
+
name: "score",
|
|
70
|
+
normalize: ({ subject }) => {
|
|
71
|
+
const additional = readSubjectAdditional(subject);
|
|
72
|
+
const score = readNumber(additional, "openrouterEvalScore");
|
|
73
|
+
const status = readString(additional, "openrouterEvalStatus");
|
|
74
|
+
if (score === null || status === "missing") {
|
|
75
|
+
return MISSING;
|
|
32
76
|
}
|
|
77
|
+
const multiplier = status === "low-coverage" ? lowCoverageMultiplier : 1;
|
|
78
|
+
return { value: clampScore(score * multiplier), status: "ok" };
|
|
33
79
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function createChatbotArenaAdapter(includeRegistries) {
|
|
37
85
|
return {
|
|
38
|
-
id: "
|
|
86
|
+
id: "chatbot-arena",
|
|
87
|
+
weight: 6,
|
|
88
|
+
contributionMode: "scoped",
|
|
89
|
+
includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,
|
|
90
|
+
defaultComponentKey: "chatbot-arena.score",
|
|
91
|
+
components: [
|
|
92
|
+
{
|
|
93
|
+
name: "score",
|
|
94
|
+
normalize: ({ subject }) => {
|
|
95
|
+
const additional = readSubjectAdditional(subject);
|
|
96
|
+
const score = readNumber(additional, "chatbotArenaEvalScore");
|
|
97
|
+
const status = readString(additional, "chatbotArenaEvalStatus");
|
|
98
|
+
if (score === null || status !== "ok") {
|
|
99
|
+
return MISSING;
|
|
100
|
+
}
|
|
101
|
+
return { value: clampScore(score), status: "ok" };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function createHuggingFaceModelIndexAdapter(includeRegistries) {
|
|
108
|
+
return {
|
|
109
|
+
id: "huggingface-model-index",
|
|
110
|
+
weight: 0.8,
|
|
111
|
+
contributionMode: "conditional",
|
|
112
|
+
includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,
|
|
113
|
+
defaultComponentKey: "huggingface-model-index.score",
|
|
114
|
+
components: [
|
|
115
|
+
{
|
|
116
|
+
name: "score",
|
|
117
|
+
nonScorableWhenUnavailable: true,
|
|
118
|
+
normalize: ({ subject }) => {
|
|
119
|
+
const additional = readSubjectAdditional(subject);
|
|
120
|
+
const score = readNumber(additional, "huggingFaceEvalScore") ?? readNumber(additional, "huggingFaceSignalScore");
|
|
121
|
+
const status = readString(additional, "huggingFaceEvalStatus");
|
|
122
|
+
const mode = readString(additional, "huggingFaceEvalMode");
|
|
123
|
+
if (score === null || status !== "ok" || mode === "missing") {
|
|
124
|
+
return MISSING;
|
|
125
|
+
}
|
|
126
|
+
return { value: clampScore(score), status: "ok" };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function createOpenLlmLeaderboardAdapter(includeRegistries) {
|
|
133
|
+
return {
|
|
134
|
+
id: "openllm-leaderboard",
|
|
39
135
|
weight: 1,
|
|
40
136
|
contributionMode: "conditional",
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
137
|
+
includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,
|
|
138
|
+
defaultComponentKey: "openllm-leaderboard.score",
|
|
139
|
+
components: [
|
|
140
|
+
{
|
|
141
|
+
name: "score",
|
|
142
|
+
nonScorableWhenUnavailable: true,
|
|
143
|
+
normalize: ({ subject }) => {
|
|
144
|
+
const additional = readSubjectAdditional(subject);
|
|
145
|
+
const score = readNumber(additional, "openLlmEvalScore");
|
|
146
|
+
const status = readString(additional, "openLlmEvalStatus");
|
|
147
|
+
if (score === null || status !== "ok") {
|
|
148
|
+
return MISSING;
|
|
149
|
+
}
|
|
150
|
+
return { value: clampScore(score), status: "ok" };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function createModelTierAdapter(options = {}) {
|
|
157
|
+
const tiers = options.tiers ?? DEFAULT_MODEL_TIERS;
|
|
158
|
+
const defaultScore = options.defaultScore ?? 50;
|
|
159
|
+
const modelIdKeys = options.modelIdKeys ?? DEFAULT_MODEL_ID_KEYS;
|
|
160
|
+
return {
|
|
161
|
+
id: "model-tier",
|
|
162
|
+
weight: 2,
|
|
163
|
+
contributionMode: "conditional",
|
|
164
|
+
includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,
|
|
165
|
+
defaultComponentKey: "model-tier.score",
|
|
166
|
+
components: [
|
|
167
|
+
{
|
|
168
|
+
name: "score",
|
|
169
|
+
nonScorableWhenUnavailable: true,
|
|
170
|
+
normalize: ({ subject }) => {
|
|
171
|
+
const additional = readSubjectAdditional(subject);
|
|
172
|
+
const hasStrongCoverage = readString(additional, "openrouterEvalStatus") === "ok";
|
|
173
|
+
const hasIndependentEvals = [
|
|
174
|
+
"chatbotArenaEvalStatus",
|
|
175
|
+
"huggingFaceEvalStatus",
|
|
176
|
+
"openLlmEvalStatus"
|
|
177
|
+
].some((key) => readString(additional, key) === "ok");
|
|
178
|
+
if (hasStrongCoverage || hasIndependentEvals) {
|
|
179
|
+
return MISSING;
|
|
180
|
+
}
|
|
181
|
+
const modelId = modelIdKeys.map((key) => readString(additional, key)).find((value) => value !== null);
|
|
182
|
+
if (modelId === null) {
|
|
183
|
+
return MISSING;
|
|
184
|
+
}
|
|
185
|
+
const normalizedId = modelId.toLowerCase();
|
|
186
|
+
const tier = tiers.find(
|
|
187
|
+
(entry) => entry.patterns.some(
|
|
188
|
+
(pattern) => normalizedId.includes(pattern.toLowerCase())
|
|
189
|
+
)
|
|
190
|
+
);
|
|
191
|
+
return {
|
|
192
|
+
value: clampScore(tier ? tier.score : defaultScore),
|
|
193
|
+
status: "ok"
|
|
194
|
+
};
|
|
49
195
|
}
|
|
50
|
-
const score = readNumber(stored, target);
|
|
51
|
-
return score === null ? MISSING : { value: clampScore(score), status: "ok" };
|
|
52
196
|
}
|
|
53
|
-
|
|
197
|
+
]
|
|
54
198
|
};
|
|
55
199
|
}
|
|
56
200
|
export {
|
|
57
|
-
|
|
201
|
+
createChatbotArenaAdapter,
|
|
202
|
+
createHuggingFaceModelIndexAdapter,
|
|
203
|
+
createModelTierAdapter,
|
|
204
|
+
createOpenLlmLeaderboardAdapter,
|
|
205
|
+
createOpenRouterEvalsAdapter
|
|
58
206
|
};
|
|
59
207
|
//# sourceMappingURL=standards-sdk.es168.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es168.js","sources":["../../src/hcs-25/adapters/connectivity.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type { Hcs25AdapterDefinition, Hcs25NormalizedValue } from '../types';\nimport { isJsonObject, readNumber, readSubjectAdditional } from '../signals';\n\n/**\n * Options for the connectivity probe adapter. The adapter is\n * implementation-specific: probes are performed by signal adapters and their\n * results are stored on the subject record.\n */\nexport interface Hcs25ConnectivityAdapterOptions {\n /**\n * Probe target identifiers. When provided, one `connectivity.<target>`\n * component is emitted per target from the stored\n * `metadata.additional.connectivityTargets` record. When omitted, a single\n * `connectivity.score` component is emitted from\n * `metadata.additional.connectivityScore`.\n */\n targets?: readonly string[];\n /** Registries where a connectivity probe is not meaningful. */\n excludeRegistries?: readonly string[];\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n];\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\n/**\n * Creates the `connectivity` adapter: scores stored connectivity probe\n * results. Contribution is conditional, so subjects without probe results\n * stay out of the denominator.\n */\nexport function createConnectivityAdapter(\n options: Hcs25ConnectivityAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const targets = options.targets ?? [];\n const excludeRegistries =\n options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES;\n\n if (targets.length === 0) {\n return {\n id: 'connectivity',\n weight: 1,\n contributionMode: 'conditional',\n excludeRegistries,\n defaultComponentKey: 'connectivity.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const score = readNumber(\n readSubjectAdditional(subject),\n 'connectivityScore',\n );\n return score === null\n ? MISSING\n : { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n }\n\n return {\n id: 'connectivity',\n weight: 1,\n contributionMode: 'conditional',\n excludeRegistries,\n components: targets.map(target => ({\n name: target,\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const stored = readSubjectAdditional(subject).connectivityTargets;\n if (!isJsonObject(stored)) {\n return MISSING;\n }\n const score = readNumber(stored, target);\n return score === null\n ? MISSING\n : { value: clampScore(score), status: 'ok' };\n },\n })),\n };\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,8BAAiD;AAAA,EACrD;AAAA,EACA;AACF;AAEA,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAOnD,SAAS,0BACd,UAA2C,IACnB;AACxB,QAAM,UAAU,QAAQ,WAAW,CAAA;AACnC,QAAM,oBACJ,QAAQ,qBAAqB;AAE/B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB;AAAA,MACA,qBAAqB;AAAA,MACrB,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,4BAA4B;AAAA,UAC5B,WAAW,CAAC,EAAE,cAAoC;AAChD,kBAAM,QAAQ;AAAA,cACZ,sBAAsB,OAAO;AAAA,cAC7B;AAAA,YAAA;AAEF,mBAAO,UAAU,OACb,UACA,EAAE,OAAO,WAAW,KAAK,GAAG,QAAQ,KAAA;AAAA,UAC1C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB;AAAA,IACA,YAAY,QAAQ,IAAI,CAAA,YAAW;AAAA,MACjC,MAAM;AAAA,MACN,4BAA4B;AAAA,MAC5B,WAAW,CAAC,EAAE,cAAoC;AAChD,cAAM,SAAS,sBAAsB,OAAO,EAAE;AAC9C,YAAI,CAAC,aAAa,MAAM,GAAG;AACzB,iBAAO;AAAA,QACT;AACA,cAAM,QAAQ,WAAW,QAAQ,MAAM;AACvC,eAAO,UAAU,OACb,UACA,EAAE,OAAO,WAAW,KAAK,GAAG,QAAQ,KAAA;AAAA,MAC1C;AAAA,IAAA,EACA;AAAA,EAAA;AAEN;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es168.js","sources":["../../src/hcs-25/adapters/model-evals.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport {\n readNumber,\n readString,\n readSubjectAdditional,\n type Hcs25JsonObject,\n} from '../signals';\n\n/**\n * Options for the OpenRouter benchmarks adapter.\n */\nexport interface Hcs25OpenRouterEvalsAdapterOptions {\n /** Multiplier applied to scores whose coverage status is `low-coverage`. */\n lowCoverageMultiplier?: number;\n /** Model catalog registries where the adapter applies. */\n includeRegistries?: readonly string[];\n}\n\n/**\n * A heuristic model tier: a score plus the lowercase identifier patterns\n * that map to it. The first matching tier wins.\n */\nexport interface Hcs25ModelTier {\n score: number;\n patterns: readonly string[];\n}\n\n/**\n * Options for the fallback model-tier adapter.\n */\nexport interface Hcs25ModelTierAdapterOptions {\n /** Tier table; the first matching tier wins. */\n tiers?: readonly Hcs25ModelTier[];\n /** Score for models that match no tier. Default 50. */\n defaultScore?: number;\n /** Metadata keys checked for the model identifier, in order. */\n modelIdKeys?: readonly string[];\n /** Model catalog registries where the adapter applies. */\n includeRegistries?: readonly string[];\n}\n\nconst DEFAULT_MODEL_REGISTRIES: readonly string[] = ['openrouter', 'near-ai'];\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nconst DEFAULT_MODEL_TIERS: readonly Hcs25ModelTier[] = [\n {\n score: 95,\n patterns: [\n 'gpt-5',\n 'gpt-4.5',\n 'o3',\n 'o4-mini',\n 'claude-opus-4',\n 'claude-4-opus',\n 'gemini-3',\n 'grok-4',\n ],\n },\n {\n score: 85,\n patterns: [\n 'claude-sonnet-4',\n 'claude-4-sonnet',\n 'claude-3-7-sonnet',\n 'gemini-2.5-pro',\n 'deepseek-v3',\n 'deepseek-r1',\n 'llama-4-maverick',\n 'qwen3-235b',\n 'grok-3',\n ],\n },\n {\n score: 70,\n patterns: [\n 'gpt-4o',\n 'gemini-2.5-flash',\n 'claude-haiku',\n 'llama-4-scout',\n 'qwen3-32b',\n 'mistral-large',\n ],\n },\n {\n score: 55,\n patterns: ['llama-3.3', 'llama-3.1', 'qwen', 'mistral', 'gemma', 'phi-'],\n },\n { score: 35, patterns: ['llama-2', 'gpt-3.5', 'gemini-1'] },\n];\n\nconst DEFAULT_MODEL_ID_KEYS: readonly string[] = [\n 'openrouterModelId',\n 'modelId',\n 'model',\n];\n\n/**\n * Creates the `openrouter-evals` adapter: exposes a coverage-aware\n * benchmark component for model catalog entries, down-weighting\n * low-coverage scores.\n */\nexport function createOpenRouterEvalsAdapter(\n options: Hcs25OpenRouterEvalsAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const lowCoverageMultiplier = options.lowCoverageMultiplier ?? 0.5;\n\n return {\n id: 'openrouter-evals',\n weight: 0.5,\n contributionMode: 'scoped',\n includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'openrouter-evals.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional: Hcs25JsonObject = readSubjectAdditional(subject);\n const score = readNumber(additional, 'openrouterEvalScore');\n const status = readString(additional, 'openrouterEvalStatus');\n\n if (score === null || status === 'missing') {\n return MISSING;\n }\n\n const multiplier =\n status === 'low-coverage' ? lowCoverageMultiplier : 1;\n return { value: clampScore(score * multiplier), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `chatbot-arena` adapter: exposes an independent\n * preference-leaderboard signal as a normalized component.\n */\nexport function createChatbotArenaAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'chatbot-arena',\n weight: 6,\n contributionMode: 'scoped',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'chatbot-arena.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score = readNumber(additional, 'chatbotArenaEvalScore');\n const status = readString(additional, 'chatbotArenaEvalStatus');\n\n if (score === null || status !== 'ok') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `huggingface-model-index` adapter: exposes Hugging\n * Face-derived model-index and popularity signals, contributing only when\n * coverage exists.\n */\nexport function createHuggingFaceModelIndexAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'huggingface-model-index',\n weight: 0.8,\n contributionMode: 'conditional',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'huggingface-model-index.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score =\n readNumber(additional, 'huggingFaceEvalScore') ??\n readNumber(additional, 'huggingFaceSignalScore');\n const status = readString(additional, 'huggingFaceEvalStatus');\n const mode = readString(additional, 'huggingFaceEvalMode');\n\n if (score === null || status !== 'ok' || mode === 'missing') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `openllm-leaderboard` adapter: exposes a benchmark-derived\n * leaderboard score, contributing only when a record exists.\n */\nexport function createOpenLlmLeaderboardAdapter(\n includeRegistries?: readonly string[],\n): Hcs25AdapterDefinition {\n return {\n id: 'openllm-leaderboard',\n weight: 1,\n contributionMode: 'conditional',\n includeRegistries: includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'openllm-leaderboard.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n const score = readNumber(additional, 'openLlmEvalScore');\n const status = readString(additional, 'openLlmEvalStatus');\n\n if (score === null || status !== 'ok') {\n return MISSING;\n }\n return { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n}\n\n/**\n * Creates the `model-tier` adapter: a deterministic fallback heuristic for\n * model catalogs with sparse external-eval coverage. It suppresses itself\n * when OpenRouter coverage is sufficient or any independent eval source\n * exists, per the specification's fallback-only guidance.\n */\nexport function createModelTierAdapter(\n options: Hcs25ModelTierAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const tiers = options.tiers ?? DEFAULT_MODEL_TIERS;\n const defaultScore = options.defaultScore ?? 50;\n const modelIdKeys = options.modelIdKeys ?? DEFAULT_MODEL_ID_KEYS;\n\n return {\n id: 'model-tier',\n weight: 2,\n contributionMode: 'conditional',\n includeRegistries: options.includeRegistries ?? DEFAULT_MODEL_REGISTRIES,\n defaultComponentKey: 'model-tier.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const additional = readSubjectAdditional(subject);\n\n const hasStrongCoverage =\n readString(additional, 'openrouterEvalStatus') === 'ok';\n const hasIndependentEvals = [\n 'chatbotArenaEvalStatus',\n 'huggingFaceEvalStatus',\n 'openLlmEvalStatus',\n ].some(key => readString(additional, key) === 'ok');\n if (hasStrongCoverage || hasIndependentEvals) {\n return MISSING;\n }\n\n const modelId = modelIdKeys\n .map(key => readString(additional, key))\n .find((value): value is string => value !== null);\n if (modelId === null) {\n return MISSING;\n }\n\n const normalizedId = modelId.toLowerCase();\n const tier = tiers.find(entry =>\n entry.patterns.some(pattern =>\n normalizedId.includes(pattern.toLowerCase()),\n ),\n );\n return {\n value: clampScore(tier ? tier.score : defaultScore),\n status: 'ok',\n };\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,59 @@
|
|
|
1
1
|
import { clampScore } from "./standards-sdk.es119.js";
|
|
2
|
-
import {
|
|
3
|
-
import "./standards-sdk.
|
|
4
|
-
import "./standards-sdk.es175.js";
|
|
2
|
+
import { readNumber, readSubjectAdditional, isJsonObject } from "./standards-sdk.es179.js";
|
|
3
|
+
import "./standards-sdk.es163.js";
|
|
5
4
|
import "./standards-sdk.es176.js";
|
|
6
5
|
import "./standards-sdk.es177.js";
|
|
7
|
-
import
|
|
8
|
-
const
|
|
6
|
+
import "./standards-sdk.es178.js";
|
|
7
|
+
const DEFAULT_EXCLUDED_REGISTRIES = [
|
|
8
|
+
"openrouter",
|
|
9
|
+
"near-ai"
|
|
10
|
+
];
|
|
9
11
|
const MISSING = { value: 0, status: "missing" };
|
|
10
|
-
function
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
function createConnectivityAdapter(options = {}) {
|
|
13
|
+
const targets = options.targets ?? [];
|
|
14
|
+
const excludeRegistries = options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES;
|
|
15
|
+
if (targets.length === 0) {
|
|
16
|
+
return {
|
|
17
|
+
id: "connectivity",
|
|
18
|
+
weight: 1,
|
|
19
|
+
contributionMode: "conditional",
|
|
20
|
+
excludeRegistries,
|
|
21
|
+
defaultComponentKey: "connectivity.score",
|
|
22
|
+
components: [
|
|
23
|
+
{
|
|
24
|
+
name: "score",
|
|
25
|
+
nonScorableWhenUnavailable: true,
|
|
26
|
+
normalize: ({ subject }) => {
|
|
27
|
+
const score = readNumber(
|
|
28
|
+
readSubjectAdditional(subject),
|
|
29
|
+
"connectivityScore"
|
|
30
|
+
);
|
|
31
|
+
return score === null ? MISSING : { value: clampScore(score), status: "ok" };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
18
37
|
return {
|
|
19
|
-
id: "
|
|
38
|
+
id: "connectivity",
|
|
20
39
|
weight: 1,
|
|
21
|
-
contributionMode: "
|
|
22
|
-
|
|
23
|
-
components:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
normalize: ({ subject }) => {
|
|
31
|
-
const summary = readMetadataRecord(subject, "erc8004FeedbackSummary");
|
|
32
|
-
const totalFeedbacks = summary ? readNumber(summary, "totalFeedbacks") : null;
|
|
33
|
-
if (totalFeedbacks === null) {
|
|
34
|
-
return MISSING;
|
|
35
|
-
}
|
|
36
|
-
const volumeRaw = Math.min(
|
|
37
|
-
volumeCap,
|
|
38
|
-
Math.log10(totalFeedbacks + 1) * volumeWeight
|
|
39
|
-
);
|
|
40
|
-
return {
|
|
41
|
-
value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),
|
|
42
|
-
status: "ok"
|
|
43
|
-
};
|
|
40
|
+
contributionMode: "conditional",
|
|
41
|
+
excludeRegistries,
|
|
42
|
+
components: targets.map((target) => ({
|
|
43
|
+
name: target,
|
|
44
|
+
nonScorableWhenUnavailable: true,
|
|
45
|
+
normalize: ({ subject }) => {
|
|
46
|
+
const stored = readSubjectAdditional(subject).connectivityTargets;
|
|
47
|
+
if (!isJsonObject(stored)) {
|
|
48
|
+
return MISSING;
|
|
44
49
|
}
|
|
50
|
+
const score = readNumber(stored, target);
|
|
51
|
+
return score === null ? MISSING : { value: clampScore(score), status: "ok" };
|
|
45
52
|
}
|
|
46
|
-
|
|
53
|
+
}))
|
|
47
54
|
};
|
|
48
55
|
}
|
|
49
56
|
export {
|
|
50
|
-
|
|
57
|
+
createConnectivityAdapter
|
|
51
58
|
};
|
|
52
59
|
//# sourceMappingURL=standards-sdk.es169.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es169.js","sources":["../../src/hcs-25/adapters/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es169.js","sources":["../../src/hcs-25/adapters/connectivity.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type { Hcs25AdapterDefinition, Hcs25NormalizedValue } from '../types';\nimport { isJsonObject, readNumber, readSubjectAdditional } from '../signals';\n\n/**\n * Options for the connectivity probe adapter. The adapter is\n * implementation-specific: probes are performed by signal adapters and their\n * results are stored on the subject record.\n */\nexport interface Hcs25ConnectivityAdapterOptions {\n /**\n * Probe target identifiers. When provided, one `connectivity.<target>`\n * component is emitted per target from the stored\n * `metadata.additional.connectivityTargets` record. When omitted, a single\n * `connectivity.score` component is emitted from\n * `metadata.additional.connectivityScore`.\n */\n targets?: readonly string[];\n /** Registries where a connectivity probe is not meaningful. */\n excludeRegistries?: readonly string[];\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n];\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\n/**\n * Creates the `connectivity` adapter: scores stored connectivity probe\n * results. Contribution is conditional, so subjects without probe results\n * stay out of the denominator.\n */\nexport function createConnectivityAdapter(\n options: Hcs25ConnectivityAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const targets = options.targets ?? [];\n const excludeRegistries =\n options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES;\n\n if (targets.length === 0) {\n return {\n id: 'connectivity',\n weight: 1,\n contributionMode: 'conditional',\n excludeRegistries,\n defaultComponentKey: 'connectivity.score',\n components: [\n {\n name: 'score',\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const score = readNumber(\n readSubjectAdditional(subject),\n 'connectivityScore',\n );\n return score === null\n ? MISSING\n : { value: clampScore(score), status: 'ok' };\n },\n },\n ],\n };\n }\n\n return {\n id: 'connectivity',\n weight: 1,\n contributionMode: 'conditional',\n excludeRegistries,\n components: targets.map(target => ({\n name: target,\n nonScorableWhenUnavailable: true,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const stored = readSubjectAdditional(subject).connectivityTargets;\n if (!isJsonObject(stored)) {\n return MISSING;\n }\n const score = readNumber(stored, target);\n return score === null\n ? MISSING\n : { value: clampScore(score), status: 'ok' };\n },\n })),\n };\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,8BAAiD;AAAA,EACrD;AAAA,EACA;AACF;AAEA,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAOnD,SAAS,0BACd,UAA2C,IACnB;AACxB,QAAM,UAAU,QAAQ,WAAW,CAAA;AACnC,QAAM,oBACJ,QAAQ,qBAAqB;AAE/B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB;AAAA,MACA,qBAAqB;AAAA,MACrB,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,4BAA4B;AAAA,UAC5B,WAAW,CAAC,EAAE,cAAoC;AAChD,kBAAM,QAAQ;AAAA,cACZ,sBAAsB,OAAO;AAAA,cAC7B;AAAA,YAAA;AAEF,mBAAO,UAAU,OACb,UACA,EAAE,OAAO,WAAW,KAAK,GAAG,QAAQ,KAAA;AAAA,UAC1C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB;AAAA,IACA,YAAY,QAAQ,IAAI,CAAA,YAAW;AAAA,MACjC,MAAM;AAAA,MACN,4BAA4B;AAAA,MAC5B,WAAW,CAAC,EAAE,cAAoC;AAChD,cAAM,SAAS,sBAAsB,OAAO,EAAE;AAC9C,YAAI,CAAC,aAAa,MAAM,GAAG;AACzB,iBAAO;AAAA,QACT;AACA,cAAM,QAAQ,WAAW,QAAQ,MAAM;AACvC,eAAO,UAAU,OACb,UACA,EAAE,OAAO,WAAW,KAAK,GAAG,QAAQ,KAAA;AAAA,MAC1C;AAAA,IAAA,EACA;AAAA,EAAA;AAEN;"}
|
|
@@ -1,59 +1,52 @@
|
|
|
1
1
|
import { clampScore } from "./standards-sdk.es119.js";
|
|
2
|
-
import { readMetadataRecord, readNumber
|
|
3
|
-
import "./standards-sdk.
|
|
4
|
-
import "./standards-sdk.es175.js";
|
|
2
|
+
import { readMetadataRecord, readNumber } from "./standards-sdk.es179.js";
|
|
3
|
+
import "./standards-sdk.es163.js";
|
|
5
4
|
import "./standards-sdk.es176.js";
|
|
6
5
|
import "./standards-sdk.es177.js";
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
function normalizeEthos(subject, baselineScore, maxScore, maxContribution) {
|
|
16
|
-
const metadata = subject.metadata;
|
|
17
|
-
const composite = readMetadataRecord(subject, "ethosComposite");
|
|
18
|
-
const compositeScore = composite ? readNumber(composite, "score") : null;
|
|
19
|
-
const flatScore = metadata ? readNumber(metadata, "ethosScore") : null;
|
|
20
|
-
const status = metadata ? readString(metadata, "ethosScoreStatus") : null;
|
|
21
|
-
const rawScore = compositeScore ?? flatScore;
|
|
22
|
-
if (rawScore === null) {
|
|
23
|
-
if (status === "error") {
|
|
24
|
-
return { value: 0, status: "error" };
|
|
25
|
-
}
|
|
26
|
-
if (status === "ok") {
|
|
27
|
-
return { value: 0, status: "missing" };
|
|
28
|
-
}
|
|
29
|
-
return MISSING_SCORE;
|
|
30
|
-
}
|
|
31
|
-
const denominator = maxScore - baselineScore;
|
|
32
|
-
if (denominator <= 0) {
|
|
33
|
-
return { value: clampScore(maxContribution), status: "ok" };
|
|
34
|
-
}
|
|
35
|
-
const normalized = clampUnit((rawScore - baselineScore) / denominator);
|
|
36
|
-
return { value: clampScore(maxContribution * normalized), status: "ok" };
|
|
6
|
+
import "./standards-sdk.es178.js";
|
|
7
|
+
import { clampUnit } from "./standards-sdk.es164.js";
|
|
8
|
+
const DEFAULT_INCLUDED_REGISTRIES = ["erc-8004"];
|
|
9
|
+
const MISSING = { value: 0, status: "missing" };
|
|
10
|
+
function normalizeRating(subject) {
|
|
11
|
+
const summary = readMetadataRecord(subject, "erc8004FeedbackSummary");
|
|
12
|
+
const averageScore = summary ? readNumber(summary, "averageScore") : null;
|
|
13
|
+
return averageScore === null ? MISSING : { value: clampScore(averageScore), status: "ok" };
|
|
37
14
|
}
|
|
38
|
-
function
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const maxContribution = options.maxContribution ?? 100;
|
|
15
|
+
function createErc8004FeedbackAdapter(options = {}) {
|
|
16
|
+
const volumeWeight = options.volumeWeight ?? 10;
|
|
17
|
+
const volumeCap = options.volumeCap ?? 20;
|
|
42
18
|
return {
|
|
43
|
-
id: "
|
|
19
|
+
id: "erc8004-feedback",
|
|
44
20
|
weight: 1,
|
|
45
|
-
contributionMode: "
|
|
46
|
-
|
|
47
|
-
defaultComponentKey: "ethos.score",
|
|
21
|
+
contributionMode: "scoped",
|
|
22
|
+
includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,
|
|
48
23
|
components: [
|
|
49
24
|
{
|
|
50
|
-
name: "
|
|
51
|
-
normalize: ({ subject }) =>
|
|
25
|
+
name: "rating",
|
|
26
|
+
normalize: ({ subject }) => normalizeRating(subject)
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "volume",
|
|
30
|
+
normalize: ({ subject }) => {
|
|
31
|
+
const summary = readMetadataRecord(subject, "erc8004FeedbackSummary");
|
|
32
|
+
const totalFeedbacks = summary ? readNumber(summary, "totalFeedbacks") : null;
|
|
33
|
+
if (totalFeedbacks === null) {
|
|
34
|
+
return MISSING;
|
|
35
|
+
}
|
|
36
|
+
const volumeRaw = Math.min(
|
|
37
|
+
volumeCap,
|
|
38
|
+
Math.log10(totalFeedbacks + 1) * volumeWeight
|
|
39
|
+
);
|
|
40
|
+
return {
|
|
41
|
+
value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),
|
|
42
|
+
status: "ok"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
52
45
|
}
|
|
53
46
|
]
|
|
54
47
|
};
|
|
55
48
|
}
|
|
56
49
|
export {
|
|
57
|
-
|
|
50
|
+
createErc8004FeedbackAdapter
|
|
58
51
|
};
|
|
59
52
|
//# sourceMappingURL=standards-sdk.es170.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es170.js","sources":["../../src/hcs-25/adapters/
|
|
1
|
+
{"version":3,"file":"standards-sdk.es170.js","sources":["../../src/hcs-25/adapters/erc8004-feedback.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport { readMetadataRecord, readNumber } from '../signals';\nimport { clampUnit } from './normalization';\n\n/**\n * Options for the ERC-8004 feedback adapter.\n */\nexport interface Hcs25Erc8004FeedbackAdapterOptions {\n /** Multiplier applied to log10 of the feedback count. Default 10. */\n volumeWeight?: number;\n /** Cap on the raw volume score before normalization. Default 20. */\n volumeCap?: number;\n /** Registries where ERC-8004 feedback applies. */\n includeRegistries?: readonly string[];\n}\n\nconst DEFAULT_INCLUDED_REGISTRIES: readonly string[] = ['erc-8004'];\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nfunction normalizeRating(subject: Hcs25Subject): Hcs25NormalizedValue {\n const summary = readMetadataRecord(subject, 'erc8004FeedbackSummary');\n const averageScore = summary ? readNumber(summary, 'averageScore') : null;\n return averageScore === null\n ? MISSING\n : { value: clampScore(averageScore), status: 'ok' };\n}\n\n/**\n * Creates the `erc8004-feedback` adapter: converts an ERC-8004 feedback\n * summary (average rating plus feedback volume) into trust components,\n * log-scaling volume so a single rating cannot dominate.\n */\nexport function createErc8004FeedbackAdapter(\n options: Hcs25Erc8004FeedbackAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const volumeWeight = options.volumeWeight ?? 10;\n const volumeCap = options.volumeCap ?? 20;\n\n return {\n id: 'erc8004-feedback',\n weight: 1,\n contributionMode: 'scoped',\n includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,\n components: [\n {\n name: 'rating',\n normalize: ({ subject }) => normalizeRating(subject),\n },\n {\n name: 'volume',\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const summary = readMetadataRecord(subject, 'erc8004FeedbackSummary');\n const totalFeedbacks = summary\n ? readNumber(summary, 'totalFeedbacks')\n : null;\n if (totalFeedbacks === null) {\n return MISSING;\n }\n const volumeRaw = Math.min(\n volumeCap,\n Math.log10(totalFeedbacks + 1) * volumeWeight,\n );\n return {\n value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),\n status: 'ok',\n };\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;;AAqBA,MAAM,8BAAiD,CAAC,UAAU;AAElE,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAE1D,SAAS,gBAAgB,SAA6C;AACpE,QAAM,UAAU,mBAAmB,SAAS,wBAAwB;AACpE,QAAM,eAAe,UAAU,WAAW,SAAS,cAAc,IAAI;AACrE,SAAO,iBAAiB,OACpB,UACA,EAAE,OAAO,WAAW,YAAY,GAAG,QAAQ,KAAA;AACjD;AAOO,SAAS,6BACd,UAA8C,IACtB;AACxB,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,YAAY,QAAQ,aAAa;AAEvC,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,mBAAmB,QAAQ,qBAAqB;AAAA,IAChD,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,QAAA,MAAc,gBAAgB,OAAO;AAAA,MAAA;AAAA,MAErD;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,UAAU,mBAAmB,SAAS,wBAAwB;AACpE,gBAAM,iBAAiB,UACnB,WAAW,SAAS,gBAAgB,IACpC;AACJ,cAAI,mBAAmB,MAAM;AAC3B,mBAAO;AAAA,UACT;AACA,gBAAM,YAAY,KAAK;AAAA,YACrB;AAAA,YACA,KAAK,MAAM,iBAAiB,CAAC,IAAI;AAAA,UAAA;AAEnC,iBAAO;AAAA,YACL,OAAO,WAAW,MAAM,UAAU,YAAY,SAAS,CAAC;AAAA,YACxD,QAAQ;AAAA,UAAA;AAAA,QAEZ;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
|