Перейти к содержанию

Pricing и стоимость

EmbrAIon может детерминированно рассчитывать provider cost, не загружая live pricing при каждом execution.

Конкретные pricing facts принадлежат проекту. EmbrAIon владеет generic refresh, validation, snapshot, staleness и calculation mechanics.

Почему pricing принадлежит проекту

Provider names, SKU, rates, applicability dates, discounts и official source pages меняются со временем и не являются стабильными Core capabilities.

Проект, которому нужно cost evidence, объявляет:

  • approved official pricing source URLs;
  • provider parser adapter;
  • currency;
  • freshness window;
  • deployment/SKU mappings;
  • effective/valid-through dates;
  • usage field patterns и special rate schedules.

Эти факты находятся в .embraion/pricing.yaml.

Refresh выполняется явно

Pricing никогда не обновляется молча во время execution.

embraion pricing refresh

Обновить конкретный approved source:

embraion pricing refresh --source openai

Configured source list — allowlist. CLI не принимает произвольные refresh URLs из командной строки.

Валидированный локальный snapshot

pricing.yaml
    ↓
explicit official-source refresh
    ↓
validate all selected data
    ↓
atomic snapshot replacement
    ↓
offline status / execution-time cost calculation

Failed refresh не уничтожает последний валидированный snapshot.

embraion pricing status
embraion pricing status --json
embraion pricing status --fail-on-stale

Unknown не равно zero

EmbrAIon различает:

  • known calculated cost;
  • provider-reported exact cost;
  • adapter-normalized cost;
  • subscription/quota semantics;
  • unknown pricing;
  • unknown из-за stale pricing;
  • unknown из-за недоказанных usage semantics.

Недостающая или неоднозначная информация не превращается в 0.

Ноль — финансовое утверждение, unknown — состояние evidence.

Приоритет cost evidence

Более сильное evidence имеет приоритет над snapshot calculation:

provider exact cost
      ↓
adapter-normalized cost
      ↓
validated snapshot calculation
      ↓
unknown

Returned state остаётся явным, чтобы проект мог отличить источник суммы.

Usage semantics

Разные providers/adapters могут сообщать token counters с разной overlap semantics.

Cached input может уже входить в total input или быть дополнительным count. Reasoning tokens могут пересекаться с output totals.

EmbrAIon не угадывает.

Для snapshot calculation требуются явные semantics:

{
  "input": "inclusive",
  "output": "disjoint"
}

Если semantics не доказаны, snapshot-derived cost остаётся unknown.

Version-tied usage evidence

Проект с LiteLLM execution adapter может привязать reviewed usage-semantics evidence:

usageSemanticsEvidence:
  path: .embraion/usage-evidence/example.json
  sha256: <reviewed-digest>

Evidence сверяется с configured adapter/provider/selector и running adapter version. Expired, mismatched или malformed evidence отклоняется для cost derivation вместо догадки.

Synthetic fixtures полезны для tests, но не доказывают реальные provider billing semantics.

Форма pricing configuration

Следующий пример — иллюстрация schema, а не готовая provider fixture. URL, SKU и extraction patterns должны быть заменены проверенными значениями approved official source.

schemaVersion: 1

sources:
  example:
    url: https://example.com/pricing
    adapter: openai
    currency: USD
    freshnessDays: 30
    skus:
      analysis-api:
        sku: example-model
        patterns:
          input: "..."
          output: "..."

Текущие parser adapters включают OpenAI, Anthropic, Gemini и DeepSeek pricing pages. Concrete URL, SKU, patterns, dates и rates принадлежат проекту.

Расчёт без сети

embraion pricing calculate читает JSON request из stdin и использует только validated local snapshot плюс переданное usage/cost evidence.

Точный input contract — в CLI reference.

Проверка configured rates

embraion pricing verify --fixtures pricing-fixtures.yaml прогоняет reviewed usage fixtures через тот же offline calculation и сравнивает state, currency и amount как exact decimals:

schemaVersion: 1
fixtures:
  - id: analysis-basic
    deployment: analysis-api
    usage: {inputTokens: 1000000, outputTokens: 1000}
    usageSemantics: disjoint
    atUtc: "2026-10-01T12:00:00Z"
    expect: {state: snapshot-computed, amount: "1.004", currency: USD}

Amounts задаются decimal strings в кавычках, не float. Mismatch завершает команду с кодом 1, поэтому проект может проверять snapshot refresh своими reviewed fixtures.

Связанные страницы