mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
[codex] rename rollout budget error to session budget error (#29744)
## Summary - rename the rollout-budget exhaustion error from `RolloutBudgetExceeded` to `SessionBudgetExceeded` - expose the matching app-server v2 wire value as `sessionBudgetExceeded` - regenerate JSON/TypeScript schema fixtures and update the app-server docs and focused tests This is a naming-only follow-up to #29715 based on [Pavel's review suggestion](https://github.com/openai/codex/pull/29715#discussion_r3463183480). Runtime behavior is unchanged. ## Tests - `just test -p codex-core rollout_budget` - `just test -p codex-app-server-protocol` - `just fmt` - `just write-app-server-schema`
This commit is contained in:
committed by
GitHub
Unverified
parent
77e7ce1374
commit
1ec3def0b5
@@ -139,7 +139,7 @@ impl TurnCodexErrorFact {
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum CodexErrKind {
|
||||
TurnAborted,
|
||||
RolloutBudgetExceeded,
|
||||
SessionBudgetExceeded,
|
||||
Stream,
|
||||
ContextWindowExceeded,
|
||||
ThreadNotFound,
|
||||
@@ -196,7 +196,7 @@ impl From<&CodexErr> for CodexErrKind {
|
||||
fn from(error: &CodexErr) -> Self {
|
||||
match error {
|
||||
CodexErr::TurnAborted => CodexErrKind::TurnAborted,
|
||||
CodexErr::RolloutBudgetExceeded => CodexErrKind::RolloutBudgetExceeded,
|
||||
CodexErr::SessionBudgetExceeded => CodexErrKind::SessionBudgetExceeded,
|
||||
CodexErr::Stream(..) => CodexErrKind::Stream,
|
||||
CodexErr::ContextWindowExceeded => CodexErrKind::ContextWindowExceeded,
|
||||
CodexErr::ThreadNotFound(_) => CodexErrKind::ThreadNotFound,
|
||||
|
||||
@@ -573,7 +573,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
+1
-1
@@ -7070,7 +7070,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
+1
-1
@@ -3310,7 +3310,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{
|
||||
"enum": [
|
||||
"contextWindowExceeded",
|
||||
"rolloutBudgetExceeded",
|
||||
"sessionBudgetExceeded",
|
||||
"usageLimitExceeded",
|
||||
"serverOverloaded",
|
||||
"cyberPolicy",
|
||||
|
||||
@@ -9,4 +9,4 @@ import type { NonSteerableTurnKind } from "./NonSteerableTurnKind";
|
||||
* When an upstream HTTP status is available (for example, from the Responses API or a provider),
|
||||
* it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.
|
||||
*/
|
||||
export type CodexErrorInfo = "contextWindowExceeded" | "rolloutBudgetExceeded" | "usageLimitExceeded" | "serverOverloaded" | "cyberPolicy" | { "httpConnectionFailed": { httpStatusCode: number | null, } } | { "responseStreamConnectionFailed": { httpStatusCode: number | null, } } | "internalServerError" | "unauthorized" | "badRequest" | "threadRollbackFailed" | "sandboxError" | { "responseStreamDisconnected": { httpStatusCode: number | null, } } | { "responseTooManyFailedAttempts": { httpStatusCode: number | null, } } | { "activeTurnNotSteerable": { turnKind: NonSteerableTurnKind, } } | "other";
|
||||
export type CodexErrorInfo = "contextWindowExceeded" | "sessionBudgetExceeded" | "usageLimitExceeded" | "serverOverloaded" | "cyberPolicy" | { "httpConnectionFailed": { httpStatusCode: number | null, } } | { "responseStreamConnectionFailed": { httpStatusCode: number | null, } } | "internalServerError" | "unauthorized" | "badRequest" | "threadRollbackFailed" | "sandboxError" | { "responseStreamDisconnected": { httpStatusCode: number | null, } } | { "responseTooManyFailedAttempts": { httpStatusCode: number | null, } } | { "activeTurnNotSteerable": { turnKind: NonSteerableTurnKind, } } | "other";
|
||||
|
||||
@@ -70,7 +70,7 @@ pub enum NonSteerableTurnKind {
|
||||
#[ts(export_to = "v2/")]
|
||||
pub enum CodexErrorInfo {
|
||||
ContextWindowExceeded,
|
||||
RolloutBudgetExceeded,
|
||||
SessionBudgetExceeded,
|
||||
UsageLimitExceeded,
|
||||
ServerOverloaded,
|
||||
CyberPolicy,
|
||||
@@ -116,7 +116,7 @@ impl From<CoreCodexErrorInfo> for CodexErrorInfo {
|
||||
fn from(value: CoreCodexErrorInfo) -> Self {
|
||||
match value {
|
||||
CoreCodexErrorInfo::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded,
|
||||
CoreCodexErrorInfo::RolloutBudgetExceeded => CodexErrorInfo::RolloutBudgetExceeded,
|
||||
CoreCodexErrorInfo::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded,
|
||||
CoreCodexErrorInfo::UsageLimitExceeded => CodexErrorInfo::UsageLimitExceeded,
|
||||
CoreCodexErrorInfo::ServerOverloaded => CodexErrorInfo::ServerOverloaded,
|
||||
CoreCodexErrorInfo::CyberPolicy => CodexErrorInfo::CyberPolicy,
|
||||
|
||||
@@ -1423,7 +1423,7 @@ There are additional item-specific events:
|
||||
`codexErrorInfo` maps to the `CodexErrorInfo` enum. Common values:
|
||||
|
||||
- `ContextWindowExceeded`
|
||||
- `RolloutBudgetExceeded`
|
||||
- `SessionBudgetExceeded`
|
||||
- `UsageLimitExceeded`
|
||||
- `HttpConnectionFailed { httpStatusCode? }`: upstream HTTP failures including 4xx/5xx
|
||||
- `ResponseStreamConnectionFailed { httpStatusCode? }`: failure to connect to the response SSE stream
|
||||
|
||||
@@ -275,7 +275,7 @@ async fn run_compact_task_inner_impl(
|
||||
Err(err @ (CodexErr::Interrupted | CodexErr::TurnAborted)) => {
|
||||
return Err(err);
|
||||
}
|
||||
Err(e @ CodexErr::RolloutBudgetExceeded) => {
|
||||
Err(e @ CodexErr::SessionBudgetExceeded) => {
|
||||
sess.track_turn_codex_error(turn_context.as_ref(), &e);
|
||||
let event = EventMsg::Error(e.to_error_event(/*message_prefix*/ None));
|
||||
sess.send_event(&turn_context, event).await;
|
||||
|
||||
@@ -30,7 +30,7 @@ impl Session {
|
||||
.rollout_budget()
|
||||
.record_usage(usage)
|
||||
{
|
||||
return Err(CodexErr::RolloutBudgetExceeded);
|
||||
return Err(CodexErr::SessionBudgetExceeded);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ async fn exhausted_budget_fails_current_and_later_turns() -> Result<()> {
|
||||
matches!(
|
||||
event,
|
||||
EventMsg::Error(error)
|
||||
if error.codex_error_info == Some(CodexErrorInfo::RolloutBudgetExceeded)
|
||||
if error.codex_error_info == Some(CodexErrorInfo::SessionBudgetExceeded)
|
||||
)
|
||||
})
|
||||
.await;
|
||||
@@ -315,7 +315,7 @@ async fn compaction_budget_exhaustion_fails_without_retry(remote_v2: bool) -> Re
|
||||
matches!(
|
||||
event,
|
||||
EventMsg::Error(error)
|
||||
if error.codex_error_info == Some(CodexErrorInfo::RolloutBudgetExceeded)
|
||||
if error.codex_error_info == Some(CodexErrorInfo::SessionBudgetExceeded)
|
||||
)
|
||||
})
|
||||
.await;
|
||||
|
||||
@@ -70,7 +70,7 @@ pub enum CodexErr {
|
||||
TurnAborted,
|
||||
|
||||
#[error("shared rollout token budget exhausted")]
|
||||
RolloutBudgetExceeded,
|
||||
SessionBudgetExceeded,
|
||||
|
||||
/// Returned by ResponsesClient when the SSE stream disconnects or errors out **after** the HTTP
|
||||
/// handshake has succeeded but **before** it finished emitting `response.completed`.
|
||||
@@ -176,7 +176,7 @@ impl CodexErr {
|
||||
pub fn is_retryable(&self) -> bool {
|
||||
match self {
|
||||
CodexErr::TurnAborted
|
||||
| CodexErr::RolloutBudgetExceeded
|
||||
| CodexErr::SessionBudgetExceeded
|
||||
| CodexErr::Interrupted
|
||||
| CodexErr::EnvVar(_)
|
||||
| CodexErr::Fatal(_)
|
||||
@@ -224,7 +224,7 @@ impl CodexErr {
|
||||
pub fn to_codex_protocol_error(&self) -> CodexErrorInfo {
|
||||
match self {
|
||||
CodexErr::ContextWindowExceeded => CodexErrorInfo::ContextWindowExceeded,
|
||||
CodexErr::RolloutBudgetExceeded => CodexErrorInfo::RolloutBudgetExceeded,
|
||||
CodexErr::SessionBudgetExceeded => CodexErrorInfo::SessionBudgetExceeded,
|
||||
CodexErr::UsageLimitReached(_)
|
||||
| CodexErr::QuotaExceeded
|
||||
| CodexErr::UsageNotIncluded => CodexErrorInfo::UsageLimitExceeded,
|
||||
|
||||
@@ -1690,7 +1690,7 @@ pub enum NonSteerableTurnKind {
|
||||
#[ts(rename_all = "snake_case")]
|
||||
pub enum CodexErrorInfo {
|
||||
ContextWindowExceeded,
|
||||
RolloutBudgetExceeded,
|
||||
SessionBudgetExceeded,
|
||||
UsageLimitExceeded,
|
||||
ServerOverloaded,
|
||||
CyberPolicy,
|
||||
@@ -1728,7 +1728,7 @@ impl CodexErrorInfo {
|
||||
match self {
|
||||
Self::ThreadRollbackFailed | Self::ActiveTurnNotSteerable { .. } => false,
|
||||
Self::ContextWindowExceeded
|
||||
| Self::RolloutBudgetExceeded
|
||||
| Self::SessionBudgetExceeded
|
||||
| Self::UsageLimitExceeded
|
||||
| Self::ServerOverloaded
|
||||
| Self::CyberPolicy
|
||||
|
||||
Reference in New Issue
Block a user