{"meta":{"title":"Ограничения сессий","intro":"Ограничения сессий позволяют приложению устанавливать бюджет AI-кредитов для сессии Copilot. При создании или возобновлении сессии используйте sessionLimits мягкий лимит для текущего бухгалтерского окна.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos","title":"Инструкции"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Второй пилот SDK"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"Возможности"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/session-limits","title":"Ограничения сессий"}],"documentType":"article"},"body":"# Ограничения сессий\n\nОграничения сессий позволяют приложению устанавливать бюджет AI-кредитов для сессии Copilot. При создании или возобновлении сессии используйте sessionLimits мягкий лимит для текущего бухгалтерского окна.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## Настройте лимит сессий\n\nУстановите `maxAiCredits` софтлимит AI Credits для текущего бухгалтерского окна сессии. Использование проверяется после возвращения вызовов модели, поэтому один ответ может превысить заданное значение до того, как время выполнения блокирует следующий вызов модели. SDK пересылает это значение Copilot CLI при создании или возобновлении сессии.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n<!-- docs-validate: skip -->\n\n```typescript\nconst session = await client.createSession({\n    onPermissionRequest: approveAll,\n    sessionLimits: {\n        maxAiCredits: 30,\n    },\n});\n\nconst resumed = await client.resumeSession(session.sessionId, {\n    onPermissionRequest: approveAll,\n    sessionLimits: {\n        maxAiCredits: 30,\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n<!-- docs-validate: skip -->\n\n```python\nsession = await client.create_session(\n    on_permission_request=PermissionHandler.approve_all,\n    session_limits={\n        \"max_ai_credits\": 30,\n    },\n)\n\nresumed = await client.resume_session(\n    session.session_id,\n    on_permission_request=PermissionHandler.approve_all,\n    session_limits={\n        \"max_ai_credits\": 30,\n    },\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n<!-- docs-validate: skip -->\n\n```golang\nsession, err := client.CreateSession(ctx, &copilot.SessionConfig{\n    OnPermissionRequest: copilot.PermissionHandler.ApproveAll,\n    SessionLimits: &rpc.SessionLimitsConfig{\n        MaxAiCredits: copilot.Float64(30),\n    },\n})\n\nresumed, err := client.ResumeSession(ctx, session.SessionID, &copilot.ResumeSessionConfig{\n    OnPermissionRequest: copilot.PermissionHandler.ApproveAll,\n    SessionLimits: &rpc.SessionLimitsConfig{\n        MaxAiCredits: copilot.Float64(30),\n    },\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar session = await client.CreateSessionAsync(new SessionConfig\n{\n    OnPermissionRequest = PermissionHandler.ApproveAll,\n    SessionLimits = new SessionLimitsConfig\n    {\n        MaxAiCredits = 30,\n    },\n});\n\nvar resumed = await client.ResumeSessionAsync(session.SessionId, new ResumeSessionConfig\n{\n    OnPermissionRequest = PermissionHandler.ApproveAll,\n    SessionLimits = new SessionLimitsConfig\n    {\n        MaxAiCredits = 30,\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n<!-- docs-validate: skip -->\n\n```java\nCopilotSession session = client\n        .createSession(new SessionConfig()\n                .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n                .setSessionLimits(new SessionLimitsConfig(30.0)))\n        .get();\n\nCopilotSession resumed = client\n        .resumeSession(session.getSessionId(), new ResumeSessionConfig()\n                .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n                .setSessionLimits(new SessionLimitsConfig(30.0)))\n        .get();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n<!-- docs-validate: skip -->\n\n```rust\nlet limits = SessionLimitsConfig {\n    max_ai_credits: Some(30.0),\n};\n\nlet session = client\n    .create_session(\n        SessionConfig::default()\n            .approve_all_permissions()\n            .with_session_limits(limits.clone()),\n    )\n    .await?;\n\nlet resumed = client\n    .resume_session(\n        ResumeSessionConfig::new(session.id().clone())\n            .approve_all_permissions()\n            .with_session_limits(limits),\n    )\n    .await?;\n```\n\n</div>\n\n</div>\n\n## Наблюдайте за бюджетными событиями\n\nПриложения могут подписываться на события сессий для обновления интерфейса, когда меняется мягкий лимит или сессия достигает исчерпанного бюджета.\n\n| Тип события | Когда он излучается | Важные области |\n|---|---|---|\n| `session.session_limits_changed` | Ограничения активных сессий изменились. Значение `null``sessionLimits` означает, что ограничения не активны. | `sessionLimits.maxAiCredits?` |\n| `session.usage_checkpoint` | Время выполнения фиксирует устойчивое агрегированное использование для резюме и бухгалтерии. | \n`totalNanoAiu`, `totalPremiumRequests?` |\n| `session_limits_exhausted.requested` | Сессия достигла истощённого бюджета и требует решения пользователя перед продолжением. | \n`requestId`, , `maxAiCredits``usedAiCredits` |\n| `session_limits_exhausted.completed` | Вопрос о исчерпанном лимите был решен. | \n`requestId`, , `response.action``response.additionalAiCredits?``response.maxAiCredits?` |\n\nИспользуйте сгенерированные типы событий для используемого вами языка SDK. Например, TypeScript сужает на `event.type`:\n\n```typescript\nsession.on((event) => {\n    if (event.type === \"session_limits_exhausted.requested\") {\n        showBudgetDialog({\n            requestId: event.data.requestId,\n            maxAiCredits: event.data.maxAiCredits,\n            usedAiCredits: event.data.usedAiCredits,\n        });\n    }\n});\n```"}