@yolo-croket-dev/entity-v2 0.2.141-jun.7 → 0.2.141-jun.9

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.
@@ -1,3 +1,4 @@
1
+ import { Types } from 'mongoose';
1
2
  import { NaverPolicyAiReviewDecisionEnum, NaverPolicyAiReviewTextSourceTypeEnum } from './enum';
2
3
  /** @description 네이버 정책 AI 검수 후보 문장 */
3
4
  export interface NaverPolicyAiReviewCandidate {
@@ -34,6 +35,14 @@ export interface NaverPolicyAiReviewCandidateResult {
34
35
  confidence: number;
35
36
  /** @description 사람이 이해할 수 있는 후보 판정 사유 */
36
37
  reason: string;
38
+ /** @description 후보 판정 출처. AI 직접 호출 또는 후보 cache 재사용 여부를 나타냅니다. */
39
+ reviewSource?: 'AI' | 'CACHE';
40
+ /** @description candidate cache를 사용한 후보인지 여부 */
41
+ cacheHit?: boolean;
42
+ /** @description 재사용한 candidate cache 문서 id */
43
+ cacheId?: Types.ObjectId | string;
44
+ /** @description 후보 cache를 조회할 때 사용한 key */
45
+ cacheKey?: string;
37
46
  }
38
47
  /** @description 네이버 정책 AI 검수 오류 요약 */
39
48
  export interface NaverPolicyAiReviewErrorSummary {
@@ -44,3 +53,14 @@ export interface NaverPolicyAiReviewErrorSummary {
44
53
  /** @description 오류가 발생한 시각 */
45
54
  occurredAt: Date;
46
55
  }
56
+ /** @description AI provider가 반환한 토큰 사용량 */
57
+ export interface NaverPolicyAiReviewTokenUsage {
58
+ /** @description provider 요청 입력 토큰 수 */
59
+ promptTokenCount?: number;
60
+ /** @description provider 응답 출력 토큰 수 */
61
+ candidatesTokenCount?: number;
62
+ /** @description 입력과 출력을 합산한 전체 토큰 수 */
63
+ totalTokenCount?: number;
64
+ /** @description Gemini thinking 계열 모델에서 반환될 수 있는 사고 토큰 수 */
65
+ thoughtsTokenCount?: number;
66
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './common.entity';
2
2
  export * from './enum';
3
+ export * from './naver-policy-ai-review-candidate-cache.entity';
3
4
  export * from './naver-policy-ai-review-log.entity';
4
5
  export * from './naver-policy-ai-review-result.entity';
@@ -16,5 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./common.entity"), exports);
18
18
  __exportStar(require("./enum"), exports);
19
+ __exportStar(require("./naver-policy-ai-review-candidate-cache.entity"), exports);
19
20
  __exportStar(require("./naver-policy-ai-review-log.entity"), exports);
20
21
  __exportStar(require("./naver-policy-ai-review-result.entity"), exports);
@@ -0,0 +1,74 @@
1
+ import { Types } from 'mongoose';
2
+ import { NaverPolicyAiReviewDecisionEnum, NaverPolicyAiReviewTextSourceTypeEnum } from './enum';
3
+ /**
4
+ * @author jun
5
+ * @description 네이버 정책 AI 검수 후보 단위 cache 데이터
6
+ */
7
+ export interface NaverPolicyAiReviewCandidateCacheEntity {
8
+ /** @description cache 문서 id */
9
+ _id: Types.ObjectId | string;
10
+ /** @description 후보 cache를 유일하게 식별하는 hash key */
11
+ cacheKey: string;
12
+ /** @description cache 대상 후보의 텍스트 출처. v1은 IMAGE_OCR만 사용합니다. */
13
+ sourceType: NaverPolicyAiReviewTextSourceTypeEnum;
14
+ /** @description IMAGE_OCR 후보일 때 원본 이미지 md5sum */
15
+ imageMd5: string;
16
+ /** @description OCR 원문 또는 정규화 텍스트의 hash */
17
+ ocrTextHash: string;
18
+ /** @description OCR engine 이름 */
19
+ ocrEngine?: string;
20
+ /** @description OCR engine 버전 */
21
+ ocrEngineVersion?: string;
22
+ /** @description OCR 전처리 버전 */
23
+ preprocessVersion?: string;
24
+ /** @description 네이버 정책 정의 버전 */
25
+ policyVersion: string;
26
+ /** @description 후보 추출 룰셋 버전 */
27
+ ruleSetVersion: string;
28
+ /** @description 후보 추출기 구현 버전 */
29
+ candidateExtractorVersion: string;
30
+ /** @description AI 프롬프트 버전 */
31
+ promptVersion: string;
32
+ /** @description AI provider 이름 */
33
+ modelProvider: string;
34
+ /** @description 호출한 AI 모델명 */
35
+ modelName: string;
36
+ /** @description provider가 제공하는 모델 세부 버전 */
37
+ modelVersion?: string;
38
+ /** @description 후보를 추출한 룰 id */
39
+ ruleId: string;
40
+ /** @description 후보가 속한 정책 위험 카테고리 */
41
+ category: string;
42
+ /** @description exactText, beforeText, afterText, category를 정규화해 만든 hash */
43
+ candidateContextHash: string;
44
+ /** @description AI 검수 대상이 되는 핵심 후보 문장 */
45
+ exactText: string;
46
+ /** @description 후보 문장 바로 앞 문맥 */
47
+ beforeText?: string;
48
+ /** @description 후보 문장 바로 뒤 문맥 */
49
+ afterText?: string;
50
+ /** @description 룰에 매칭된 핵심 단어 목록 */
51
+ matchedTerms: string[];
52
+ /** @description OCR 저신뢰도처럼 후보 해석에 참고할 품질 플래그 */
53
+ qualityFlags?: string[];
54
+ /** @description 후보 단위 AI 판정 */
55
+ decision: NaverPolicyAiReviewDecisionEnum;
56
+ /** @description 후보 판정 confidence */
57
+ confidence: number;
58
+ /** @description 판정 사유를 분류하기 위한 코드 */
59
+ reasonCode: string;
60
+ /** @description 사람이 이해할 수 있는 후보 판정 사유 */
61
+ reason: string;
62
+ /** @description 이 cache row를 최초 생성한 AI 검수 결과 id */
63
+ sourceReviewResultId?: Types.ObjectId | string;
64
+ /** @description 이 cache row를 최초 생성한 AI 검수 로그 id */
65
+ sourceReviewLogId?: Types.ObjectId | string;
66
+ /** @description cache hit 누적 횟수 */
67
+ hitCount: number;
68
+ /** @description 마지막 cache hit 시각 */
69
+ lastHitAt?: Date;
70
+ /** @description 문서 생성 시각 */
71
+ createdAt: Date;
72
+ /** @description 문서 마지막 수정 시각 */
73
+ updatedAt: Date;
74
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,5 +1,5 @@
1
1
  import { Types } from 'mongoose';
2
- import { NaverPolicyAiReviewCandidate, NaverPolicyAiReviewCandidateResult, NaverPolicyAiReviewErrorSummary } from './common.entity';
2
+ import { NaverPolicyAiReviewCandidate, NaverPolicyAiReviewCandidateResult, NaverPolicyAiReviewErrorSummary, NaverPolicyAiReviewTokenUsage } from './common.entity';
3
3
  import { NaverPolicyAiReviewChannelEnum, NaverPolicyAiReviewDecisionEnum, NaverPolicyAiReviewLogStatusEnum } from './enum';
4
4
  /** @description 네이버 정책 AI 검수 로그에 저장하는 provider 요청 스냅샷 */
5
5
  export interface NaverPolicyAiReviewRequestPayload {
@@ -28,6 +28,14 @@ export interface NaverPolicyAiReviewResponseResult {
28
28
  productConfidence: number;
29
29
  /** @description AI가 반환한 후보별 판정 결과 */
30
30
  candidateResults: NaverPolicyAiReviewCandidateResult[];
31
+ /** @description AI provider가 반환한 토큰 사용량 */
32
+ tokenUsage?: NaverPolicyAiReviewTokenUsage;
33
+ /** @description 후보 cache를 재사용한 후보 수 */
34
+ cacheHitCount?: number;
35
+ /** @description 후보 cache를 재사용하지 못한 후보 수 */
36
+ cacheMissCount?: number;
37
+ /** @description 실제 AI provider에 요청한 후보 수 */
38
+ aiRequestedCandidateCount?: number;
31
39
  }
32
40
  /**
33
41
  * @author jun
@@ -1,5 +1,5 @@
1
1
  import { Types } from 'mongoose';
2
- import { NaverPolicyAiReviewCandidate, NaverPolicyAiReviewCandidateResult, NaverPolicyAiReviewErrorSummary } from './common.entity';
2
+ import { NaverPolicyAiReviewCandidate, NaverPolicyAiReviewCandidateResult, NaverPolicyAiReviewErrorSummary, NaverPolicyAiReviewTokenUsage } from './common.entity';
3
3
  import { NaverPolicyAiReviewChannelEnum, NaverPolicyAiReviewDecisionEnum, NaverPolicyAiReviewStatusEnum } from './enum';
4
4
  /**
5
5
  * @author jun
@@ -40,6 +40,14 @@ export interface NaverPolicyAiReviewResultEntity {
40
40
  candidateSummary?: string;
41
41
  /** @description AI가 상품 단위로 반환한 confidence */
42
42
  aiConfidence?: number;
43
+ /** @description AI provider가 반환한 토큰 사용량. 요금/사용량 집계에 사용합니다. */
44
+ tokenUsage?: NaverPolicyAiReviewTokenUsage;
45
+ /** @description 후보 cache를 재사용한 후보 수 */
46
+ cacheHitCount?: number;
47
+ /** @description 후보 cache를 재사용하지 못한 후보 수 */
48
+ cacheMissCount?: number;
49
+ /** @description 실제 AI provider에 요청한 후보 수 */
50
+ aiRequestedCandidateCount?: number;
43
51
  /** @description 최종 판정에 연결된 사유 코드 목록 */
44
52
  reasonCodes: string[];
45
53
  /** @description AI 검수에 전달한 후보 문장 스냅샷 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolo-croket-dev/entity-v2",
3
- "version": "0.2.141-jun.7",
3
+ "version": "0.2.141-jun.9",
4
4
  "main": "index.js",
5
5
  "author": "Yolo Co., Ltd.",
6
6
  "description": "크로켓 nest 용 entity-v3",