Skip to content

feat: OpenAI smoke와 영문 코드 주석 추가 - #75

Merged
HuitaePark merged 1 commit into
mainfrom
feat/issue-44-openai-smoke
Aug 27, 2026
Merged

feat: OpenAI smoke와 영문 코드 주석 추가#75
HuitaePark merged 1 commit into
mainfrom
feat/issue-44-openai-smoke

Conversation

@HuitaePark

Copy link
Copy Markdown
Member

Summary

  • OpenAI provider 선택 profile과 실제 smoke endpoint를 추가했습니다.
  • API key와 명시적 플래그가 있을 때만 실행되는 OpenAI JUnit smoke test를 추가했습니다.
  • Java, Gradle, YAML, Dockerfile 등 코드 주석을 영어로 통일했습니다.
  • 한국어 demo runbook의 영어 버전과 실행 링크를 추가했습니다.

Verification

  • ./gradlew --no-daemon test
  • git diff --check
  • OpenAI smoke profile dummy-key startup and health check (no provider call)
  • Live OpenAI smoke remains opt-in via RUN_OPENAI_SMOKE=true and OPENAI_API_KEY

Closes #44

@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 164 files, which is 64 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 18519953-b2c8-4d84-99e8-b4eb99e014a6

📥 Commits

Reviewing files that changed from the base of the PR and between fd518cf and 386c3ae.

📒 Files selected for processing (164)
  • AGENTS.md
  • README.md
  • docs/CONFIGURATION.md
  • docs/QUICKSTART.md
  • docs/SAMPLE_RUNBOOK.md
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/LedgerChatClientBuilderCustomizer.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/PricingPlanProperties.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotBudgetAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotBudgetMetricsAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotBudgetPolicyFactory.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotCoreMetricsAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotNotificationAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotNotificationMetricsAutoConfiguration.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotProperties.java
  • token-pilot-autoconfigure/src/main/java/io/tokenpilot/autoconfigure/TokenPilotSpringAiAutoConfiguration.java
  • token-pilot-autoconfigure/src/test/java/io/tokenpilot/autoconfigure/TokenPilotAutoConfigurationTest.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/AccountingTransitionStatus.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ActualUsageCommand.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/AtomicBudgetStateStore.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetDecision.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetEvaluator.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetKey.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetPolicy.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetReservation.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetReservationRequest.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetReservationResult.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetSnapshot.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetState.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetStateStore.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetThreshold.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/BudgetWindow.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/IdempotencyKey.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccounting.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingEvent.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingListener.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingListenerErrorHandler.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingListenerFailureEvent.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingListenerPhase.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingListenerType.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationAccountingReason.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationActualTokens.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationId.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationReconciliation.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationReconciliationRequiredEvent.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationState.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationStateMachine.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationStatus.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationTokenEstimate.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/ReservationTransition.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/exception/BudgetExceededException.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/ActualUsageFingerprint.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/AppliedCommit.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/AppliedRelease.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/CommitType.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/DefaultBudgetEvaluator.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/InMemoryBudgetStateStore.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/LedgerBudgetComponents.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/ReleaseType.java
  • token-pilot-budget/src/main/java/io/tokenpilot/budget/internal/ReservationAccountingState.java
  • token-pilot-budget/src/test/java/io/tokenpilot/budget/internal/BudgetReservationConcurrencyTest.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/CoreComponents.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/CostCalculator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/LedgerListener.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/LedgerManager.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/ModelRegistry.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PreflightCostEstimator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PreflightDecisionListener.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PricingEvaluator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PricingMissingListener.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PricingProvider.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/PricingRegistry.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/RoundingPolicy.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/TokenBudget.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/TokenEstimator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/AdmissionReason.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/AdmissionStatus.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/BudgetResult.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/Cost.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/CostRecordedEvent.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/ModelDefinition.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PreflightCostResult.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PreflightCostUnavailableReason.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PreflightDecisionEvent.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PreflightPricingContext.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PricingMissingEvent.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PricingPlan.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PricingReconciliationResult.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/PricingSnapshot.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenCountAccuracy.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenCountResult.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenCountScope.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenCountUnavailableReason.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenEstimatorDescriptor.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenType.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenUsage.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenUsageDetails.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/TokenizationBasis.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/domain/UsageSource.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/DefaultCostCalculator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/DefaultLedgerManager.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/DefaultPreflightCostEstimator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/DefaultTokenBudget.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/HeuristicTokenEstimator.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/InMemoryModelRegistry.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/InMemoryPricingRegistry.java
  • token-pilot-core/src/main/java/io/tokenpilot/core/internal/LedgerComponents.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/MetricsOptions.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/BudgetMetricsPublisher.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/BudgetMicrometerComponents.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/CoreMetricsPublisher.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/LedgerMicrometerComponents.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/MicroCostMetricsPublisher.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/NotificationMetricsPublisher.java
  • token-pilot-micrometer/src/main/java/io/tokenpilot/micrometer/internal/NotificationMicrometerComponents.java
  • token-pilot-micrometer/src/test/java/io/tokenpilot/micrometer/internal/MicroCostMetricsPublisherTest.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/AtomicNotificationStateStore.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationError.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationErrorHook.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationEvent.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationHandler.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationLifecycleEvent.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationLifecycleListener.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationOutcome.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationService.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/BudgetNotificationSource.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/InMemoryNotificationStateStore.java
  • token-pilot-notification/src/main/java/io/tokenpilot/notification/NotificationStateStore.java
  • token-pilot-sample-app/DEMO_RUNBOOK.md
  • token-pilot-sample-app/DEMO_RUNBOOK_EN.md
  • token-pilot-sample-app/Dockerfile
  • token-pilot-sample-app/build.gradle
  • token-pilot-sample-app/docker-compose.yml
  • token-pilot-sample-app/grafana/provisioning/datasources/datasource.yml
  • token-pilot-sample-app/prometheus/Dockerfile
  • token-pilot-sample-app/prometheus/prometheus.yml
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoChatModel.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoConfiguration.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoController.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoRunReport.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoScenarioResult.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/DemoScenarioService.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/OpenAiSmokeController.java
  • token-pilot-sample-app/src/main/java/io/tokenpilot/sample/OpenAiSmokeReport.java
  • token-pilot-sample-app/src/main/resources/application-openai-smoke.yml
  • token-pilot-sample-app/src/main/resources/application.yml
  • token-pilot-sample-app/src/test/java/io/tokenpilot/sample/DemoScenarioE2ETest.java
  • token-pilot-sample-app/src/test/java/io/tokenpilot/sample/OpenAiSmokeE2ETest.java
  • token-pilot-spring-ai/build.gradle
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/LedgerAdvisor.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/ReservedOutputTokensResolver.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/UsageExtractor.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/DefaultLedgerAdvisor.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/DefaultUsageExtractor.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/IdempotencyKeyResolver.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/LedgerSpringAiComponents.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/ModelResolver.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/RequestContextAccessor.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/RequestMessageRole.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/RequestPreflight.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/RequestScopeResolver.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/RequestScopeResult.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/ReservedOutputResolver.java
  • token-pilot-spring-ai/src/main/java/io/tokenpilot/springai/internal/UnsupportedRequestScopeReason.java

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@HuitaePark
HuitaePark merged commit 48667fa into main Aug 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Demo] Prometheus/Grafana 예제와 provider smoke 시나리오 준비

1 participant