Files
meida_backend/.secrets.baseline
xsl c97f8ae3e1
CI / lint / typecheck / import-linter / tests / secrets (push) Canceled after 0s
feat(cost): persist reasoning tokens and the peak/off-peak tier
ob_ai_call is the only input to V2 pricing, and it was dropping the two
numbers needed to interpret its own cost column.

tokens_reasoning was captured from the provider response but never written to
the table, so the cost of thinking mode was invisible once it left the
process. Folding it into tokens_out was not an option either -- it is billed
at the output rate, and mixing the two hides exactly the difference we now
have to watch.

rate_tier records which price list applied. Without it a row's cost_cents
cannot be rechecked: DeepSeek's peak rate is double off-peak from 2026-08-17,
so recomputing an old row at "the current rate" silently produces a different
answer than what was actually billed.

Migration 0002 adds both columns. tokens_reasoning defaults to 0 rather than
NULL so cost aggregates do not collapse to NULL on historical rows;
rate_tier stays nullable because rows written before this change genuinely
have an unknown tier, and NULL says that more honestly than a guessed 'flat'.

The smoke script now asserts both: reasoning tokens must be 0 (a non-zero
value means a provider default re-enabled thinking mode behind our backs) and
rate_tier must be present. Verified against the real API -- tokens_reasoning=0,
rate_tier=off_peak, 3.9s round trip.
2026-08-14 01:02:13 +08:00

247 lines
5.9 KiB
Plaintext
Executable File

{
"version": "1.5.0",
"plugins_used": [
{
"name": "ArtifactoryDetector"
},
{
"name": "AWSKeyDetector"
},
{
"name": "AzureStorageKeyDetector"
},
{
"name": "Base64HighEntropyString",
"limit": 4.5
},
{
"name": "BasicAuthDetector"
},
{
"name": "CloudantDetector"
},
{
"name": "DiscordBotTokenDetector"
},
{
"name": "GitHubTokenDetector"
},
{
"name": "GitLabTokenDetector"
},
{
"name": "HexHighEntropyString",
"limit": 3.0
},
{
"name": "IbmCloudIamDetector"
},
{
"name": "IbmCosHmacDetector"
},
{
"name": "IPPublicDetector"
},
{
"name": "JwtTokenDetector"
},
{
"name": "KeywordDetector",
"keyword_exclude": ""
},
{
"name": "MailchimpDetector"
},
{
"name": "NpmDetector"
},
{
"name": "OpenAIDetector"
},
{
"name": "PrivateKeyDetector"
},
{
"name": "PypiTokenDetector"
},
{
"name": "SendGridDetector"
},
{
"name": "SlackDetector"
},
{
"name": "SoftlayerDetector"
},
{
"name": "SquareOAuthDetector"
},
{
"name": "StripeDetector"
},
{
"name": "TelegramBotTokenDetector"
},
{
"name": "TwilioKeyDetector"
}
],
"filters_used": [
{
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
},
{
"path": "detect_secrets.filters.common.is_baseline_file",
"filename": ".secrets.baseline"
},
{
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
"min_level": 2
},
{
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
},
{
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
},
{
"path": "detect_secrets.filters.heuristic.is_lock_file"
},
{
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
},
{
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
},
{
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
},
{
"path": "detect_secrets.filters.heuristic.is_sequential_string"
},
{
"path": "detect_secrets.filters.heuristic.is_swagger_file"
},
{
"path": "detect_secrets.filters.heuristic.is_templated_secret"
}
],
"results": {
".env.example": [
{
"type": "Basic Auth Credentials",
"filename": ".env.example",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 15
}
],
".github/workflows/ci.yml": [
{
"type": "Secret Keyword",
"filename": ".github/workflows/ci.yml",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 28
},
{
"type": "Secret Keyword",
"filename": ".github/workflows/ci.yml",
"hashed_secret": "0454753c5b5d78d5b1602b790450c2c4722e109c",
"is_verified": false,
"line_number": 47
},
{
"type": "Basic Auth Credentials",
"filename": ".github/workflows/ci.yml",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 48
},
{
"type": "Secret Keyword",
"filename": ".github/workflows/ci.yml",
"hashed_secret": "291cae9c7abc43bb36c3fcec27775787977ecbe7",
"is_verified": false,
"line_number": 52
}
],
"deploy/docker-compose.dev.yml": [
{
"type": "Secret Keyword",
"filename": "deploy/docker-compose.dev.yml",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 14
},
{
"type": "Basic Auth Credentials",
"filename": "deploy/docker-compose.dev.yml",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 51
}
],
"packages/shared/config.py": [
{
"type": "Secret Keyword",
"filename": "packages/shared/config.py",
"hashed_secret": "9b0fa95ea79b52c1ed98ded789d79eaca61144db",
"is_verified": false,
"line_number": 20
},
{
"type": "Basic Auth Credentials",
"filename": "packages/shared/config.py",
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
"is_verified": false,
"line_number": 43
}
],
"tests/conftest.py": [
{
"type": "Secret Keyword",
"filename": "tests/conftest.py",
"hashed_secret": "54391aaa964c71a817e17e42a523ffbe7c75f0b6",
"is_verified": false,
"line_number": 20
},
{
"type": "Secret Keyword",
"filename": "tests/conftest.py",
"hashed_secret": "cf2f6537b575e33aa209a982172c4253835eee83",
"is_verified": false,
"line_number": 21
}
],
"tests/unit/test_deepseek_provider.py": [
{
"type": "Secret Keyword",
"filename": "tests/unit/test_deepseek_provider.py",
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
"is_verified": false,
"line_number": 42
}
],
"tests/unit/test_log_redaction.py": [
{
"type": "Secret Keyword",
"filename": "tests/unit/test_log_redaction.py",
"hashed_secret": "7ce6ed3727ece51d2219f2bdc7f6db3594dc4d7f",
"is_verified": false,
"line_number": 49
}
],
"tests/unit/test_thinking_mode.py": [
{
"type": "Secret Keyword",
"filename": "tests/unit/test_thinking_mode.py",
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
"is_verified": false,
"line_number": 48
}
]
},
"generated_at": "2026-08-13T17:02:10Z"
}