copilot-session-usage 0.9.3__tar.gz → 0.9.5__tar.gz

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.
Files changed (130) hide show
  1. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/PKG-INFO +1 -1
  2. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/data/models-and-pricing.lock +3 -3
  3. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/data/models-and-pricing.yml +22 -76
  4. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_core.py +23 -10
  5. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.editorconfig +0 -0
  6. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.gitattributes +0 -0
  7. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/changes/requests/skill-breakdown/01-request.md +0 -0
  10. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/guidelines/git-commit-message.guideline.md +0 -0
  11. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/guidelines/knowledge-base.guidelines.md +0 -0
  12. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/pull_request_template.md +0 -0
  13. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/consolidate-knowledge-base/SKILL.md +0 -0
  14. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/gh-commit-changes/SKILL.md +0 -0
  15. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/gh-create-pull-request/SKILL.md +0 -0
  16. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/gh-release-notes/SKILL.md +0 -0
  17. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/gh-release-notes/scripts/generate_release_notes.py +0 -0
  18. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/record-finding/README.md +0 -0
  19. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/skills/record-finding/SKILL.md +0 -0
  20. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/workflows/ci.yml +0 -0
  21. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/workflows/publish.yml +0 -0
  22. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/workflows/refresh-pricing.yml +0 -0
  23. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/workflows/release-notes.yml +0 -0
  24. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.github/workflows/release.yml +0 -0
  25. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.gitignore +0 -0
  26. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/.readthedocs.yaml +0 -0
  27. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/AGENTS.md +0 -0
  28. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/CHANGELOG.md +0 -0
  29. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/CONSTITUTION.md +0 -0
  30. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/CONTRIBUTING.md +0 -0
  31. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/LICENSE +0 -0
  32. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/README.md +0 -0
  33. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/articles/presentation.md +0 -0
  34. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/internal/automated_release_proces.md +0 -0
  35. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/_static/changelog.js +0 -0
  36. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/_static/custom.css +0 -0
  37. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/changelog.md +0 -0
  38. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/conf.py +0 -0
  39. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/explanation/how-cost-estimation-works.md +0 -0
  40. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/explanation/index.md +0 -0
  41. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/add-commit-trailer.md +0 -0
  42. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/analyze-specific-session.md +0 -0
  43. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/batch-and-spending.md +0 -0
  44. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/copilot-cli-provider.md +0 -0
  45. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/export-json.md +0 -0
  46. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/index.md +0 -0
  47. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/how-to/wsl2.md +0 -0
  48. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/index.md +0 -0
  49. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/installation.md +0 -0
  50. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/reference/api.md +0 -0
  51. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/reference/cli.md +0 -0
  52. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/reference/index.md +0 -0
  53. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/reference/pricing.md +0 -0
  54. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/tutorials/getting-started.md +0 -0
  55. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/docs/source/tutorials/index.md +0 -0
  56. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/guidelines.yml +0 -0
  57. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/justfile +0 -0
  58. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Base.schema.yaml +0 -0
  59. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Concept.schema.yaml +0 -0
  60. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Experiment.schema.yaml +0 -0
  61. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Finding.schema.yaml +0 -0
  62. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Hypothesis.schema.yaml +0 -0
  63. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Outcome.schema.yaml +0 -0
  64. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Playbook.schema.yaml +0 -0
  65. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Principle.schema.yaml +0 -0
  66. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Reference.schema.yaml +0 -0
  67. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/_schema/Structure.schema.yaml +0 -0
  68. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/concepts/copilot-cli.md +0 -0
  69. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/concepts/index.md +0 -0
  70. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/concepts/overview.md +0 -0
  71. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/concepts/session-cost-analysis.md +0 -0
  72. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/concepts/threshold-based-pricing.md +0 -0
  73. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/experiments/index.md +0 -0
  74. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/experiments/verify-subagent-cost-attribution.md +0 -0
  75. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.07.02-00.00-subagent-logs-runsubagent-prefix.md +0 -0
  76. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.07.02-22.00-title-generation-not-counted-as-model-turn.md +0 -0
  77. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.07.02-23.00-cache-write-approximation.md +0 -0
  78. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.07.13-14.27-release-notes-overreported-maintainer-changes.md +0 -0
  79. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.07.24-15.01-actions-token-cannot-create-pr.md +0 -0
  80. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.08.05-16.24-utility-models-appear-in-logs-but-are-not-billed.md +0 -0
  81. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.10.07-17.30-cli-billed-nanoaiu-and-cache-write.md +0 -0
  82. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/2026.10.07-request-billing-and-cache-write.md +0 -0
  83. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/findings/index.md +0 -0
  84. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/guides/automation-scripts.md +0 -0
  85. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/guides/cost-optimization.md +0 -0
  86. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/guides/index.md +0 -0
  87. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/guides/wsl2-setup.md +0 -0
  88. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/ideas/index.md +0 -0
  89. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/ideas/multi-session-efficiency-analytics.md +0 -0
  90. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/index.md +0 -0
  91. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/log.md +0 -0
  92. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/principles/findings-are-immutable.md +0 -0
  93. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/principles/index.md +0 -0
  94. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/reference/debug-log-format.md +0 -0
  95. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/reference/index.md +0 -0
  96. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/reference/pricing-formats.md +0 -0
  97. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/cache-cost-approximation.md +0 -0
  98. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/index.md +0 -0
  99. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/knowledge-base-information-types.md +0 -0
  100. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/session-discovery-algorithm.md +0 -0
  101. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/subagent-cost-tracking.md +0 -0
  102. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/knowledge/structures/vscode-copilot-extension.md +0 -0
  103. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/pyproject.toml +0 -0
  104. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/scripts/refresh_pricing.py +0 -0
  105. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/skills/copilot-session-usage/SKILL.md +0 -0
  106. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/skills/copilot-session-usage/references/span-analysis-template.md +0 -0
  107. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/__init__.py +0 -0
  108. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/_internal/__init__.py +0 -0
  109. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/_internal/copilot_cli.py +0 -0
  110. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/_internal/core.py +0 -0
  111. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/_internal/git.py +0 -0
  112. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/_internal/vscode.py +0 -0
  113. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/api.py +0 -0
  114. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/cli.py +0 -0
  115. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/data/__init__.py +0 -0
  116. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/src/copilot_session_usage/data/custom-models-pricing.yml +0 -0
  117. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/conftest.py +0 -0
  118. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_api.py +0 -0
  119. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_cli.py +0 -0
  120. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_copilot_cli.py +0 -0
  121. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_coverage_gaps.py +0 -0
  122. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_generate_release_notes.py +0 -0
  123. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_git.py +0 -0
  124. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_pricing_runtime.py +0 -0
  125. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_release_notes.py +0 -0
  126. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_rendering.py +0 -0
  127. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_vscode.py +0 -0
  128. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/tests/test_vscode_platform.py +0 -0
  129. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/uv.lock +0 -0
  130. {copilot_session_usage-0.9.3 → copilot_session_usage-0.9.5}/uv.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: copilot-session-usage
3
- Version: 0.9.3
3
+ Version: 0.9.5
4
4
  Summary: Usage and cost analytics for GitHub Copilot and Copilot-CLI session logs
5
5
  Project-URL: Homepage, https://github.com/gsemet/copilot-session-usage
6
6
  Project-URL: Documentation, https://copilot-session-usage.readthedocs.io/en/stable/
@@ -1,7 +1,7 @@
1
1
  {
2
- "_captured": "2026-10-19T07:49:42.570898+00:00",
2
+ "_captured": "2026-10-28T08:36:29.416360+00:00",
3
3
  "_source": "https://raw.githubusercontent.com/github/docs/main/data/tables/copilot/models-and-pricing.yml",
4
4
  "_yaml_path": "/home/runner/work/copilot-session-usage/copilot-session-usage/src/copilot_session_usage/data/models-and-pricing.yml",
5
- "model_count": 46,
6
- "checksum": "c03a304b103a3dd1"
5
+ "model_count": 41,
6
+ "checksum": "1d96c7fcd7cf0f40"
7
7
  }
@@ -21,17 +21,6 @@
21
21
  # - notes: Optional notes about the model.
22
22
 
23
23
  # OpenAI
24
- - model: 'GPT-5 mini'
25
- provider: openai
26
- release_status: GA
27
- category: Lightweight
28
- threshold: Not applicable
29
- tier: Default
30
- input: $0.25
31
- cached_input: $0.025
32
- output: $2.00
33
- cache_write: Not applicable
34
-
35
24
  - model: GPT-5.3-Codex
36
25
  provider: openai
37
26
  release_status: GA
@@ -43,39 +32,6 @@
43
32
  output: $14.00
44
33
  cache_write: Not applicable
45
34
 
46
- - model: 'GPT-5.4'
47
- provider: openai
48
- release_status: GA
49
- category: Versatile
50
- threshold: '≤ 272K'
51
- tier: Default
52
- input: $2.50
53
- cached_input: $0.25
54
- output: $15.00
55
- cache_write: Not applicable
56
-
57
- - model: GPT-5.4
58
- provider: openai
59
- release_status: GA
60
- category: Versatile
61
- threshold: '> 272K'
62
- tier: Long context
63
- input: $5.00
64
- cached_input: $0.50
65
- output: $22.50
66
- cache_write: Not applicable
67
-
68
- - model: GPT-5.4 mini
69
- provider: openai
70
- release_status: GA
71
- category: Lightweight
72
- threshold: Not applicable
73
- tier: Default
74
- input: $0.75
75
- cached_input: $0.075
76
- output: $4.50
77
- cache_write: Not applicable
78
-
79
35
  - model: GPT-5.4 nano
80
36
  provider: openai
81
37
  release_status: GA
@@ -87,28 +43,6 @@
87
43
  output: $1.25
88
44
  cache_write: Not applicable
89
45
 
90
- - model: GPT-5.5
91
- provider: openai
92
- release_status: GA
93
- category: Powerful
94
- threshold: '≤ 272K'
95
- tier: Default
96
- input: $5.00
97
- cached_input: $0.50
98
- output: $30.00
99
- cache_write: Not applicable
100
-
101
- - model: GPT-5.5
102
- provider: openai
103
- release_status: GA
104
- category: Powerful
105
- threshold: '> 272K'
106
- tier: 'Long context'
107
- input: $10.00
108
- cached_input: $1.00
109
- output: $45.00
110
- cache_write: Not applicable
111
-
112
46
  - model: GPT-5.6 Luna
113
47
  provider: openai
114
48
  release_status: GA
@@ -263,6 +197,28 @@
263
197
  output: $15.00
264
198
  cache_write: $5.00
265
199
 
200
+ - model: GPT-6.1 Terra
201
+ provider: openai
202
+ release_status: GA
203
+ category: Versatile
204
+ threshold: '≤ 272K'
205
+ tier: Default
206
+ input: $1.00
207
+ cached_input: $0.05
208
+ output: $5.00
209
+ cache_write: $1.25
210
+
211
+ - model: GPT-6.1 Terra
212
+ provider: openai
213
+ release_status: GA
214
+ category: Versatile
215
+ threshold: '> 272K'
216
+ tier: 'Long context'
217
+ input: $2.00
218
+ cached_input: $0.10
219
+ output: $7.50
220
+ cache_write: $2.50
221
+
266
222
  # Anthropic
267
223
  - model: Claude Haiku 4.5
268
224
  provider: anthropic
@@ -386,16 +342,6 @@
386
342
  cache_write: $12.50
387
343
 
388
344
  # Google
389
- - model: 'Gemini 3.7 Flash[^gemini-flash-promo]'
390
- provider: google
391
- release_status: GA
392
- category: Versatile
393
- threshold: 'Not applicable'
394
- tier: 'Default'
395
- input: $0.75
396
- cached_input: $0.075
397
- output: $3.75
398
-
399
345
  - model: 'Gemini 3.8 Flash[^gemini-flash-promo]'
400
346
  provider: google
401
347
  release_status: GA
@@ -111,8 +111,29 @@ def test_get_model_rates_prefix_match():
111
111
  assert rates["input_per_m"] == 0.08
112
112
 
113
113
 
114
+ def _gpt_54_row(model, threshold, tier, input_, cached, output):
115
+ return {
116
+ "model": model,
117
+ "threshold": threshold,
118
+ "tier": tier,
119
+ "input": input_,
120
+ "cached_input": cached,
121
+ "output": output,
122
+ "cache_write": "Not applicable",
123
+ }
124
+
125
+
126
+ GPT_54_ROWS = [
127
+ _gpt_54_row("GPT-5.4", "≤ 272K", "Default", "$2.50", "$0.25", "$15.00"),
128
+ _gpt_54_row("GPT-5.4", "> 272K", "Long context", "$5.00", "$0.50", "$22.50"),
129
+ ]
130
+
131
+
114
132
  def test_versioned_model_uses_most_specific_pricing():
115
- pricing = core.load_pricing(Path(core.__file__).parents[1] / "data")
133
+ rows = GPT_54_ROWS + [
134
+ _gpt_54_row("GPT-5.4 mini", "Not applicable", "Default", "$0.75", "$0.075", "$4.50")
135
+ ]
136
+ pricing = core._build_pricing_from_yaml(rows, "test")
116
137
  rates = core._get_model_rates("gpt-5.4-mini-2026-10-01", 100_000, pricing)
117
138
  assert rates == pricing["models"]["gpt-5.4-mini"][0]
118
139
 
@@ -315,15 +336,7 @@ def test_threshold_aware_pricing_exact_boundary():
315
336
  ],
316
337
  )
317
338
  def test_threshold_aware_pricing_is_order_independent(reverse, upper, lower, boundary):
318
- text = core._read_data_file("models-and-pricing.yml")
319
- assert text is not None
320
- rows = [
321
- row
322
- for row in core._parse_pricing_entries(text, "test")
323
- if core._normalize_model_name(row.get("model", "")) == "gpt-5.4"
324
- ]
325
- assert len(rows) == 2
326
- rows = [{**rows[0], "threshold": upper}, {**rows[1], "threshold": lower}]
339
+ rows = [{**GPT_54_ROWS[0], "threshold": upper}, {**GPT_54_ROWS[1], "threshold": lower}]
327
340
  pricing = core._build_pricing_from_yaml(list(reversed(rows)) if reverse else rows, "test")
328
341
  pricing["models"]["gpt-5.4"].reverse()
329
342
  for tokens in [0, boundary - 1, boundary, boundary + 1, 500_000]: