75일차 자료 추가 (답 제외): 실습 15개 · 실행 결과, gpt-5.4-nano · 단가, 교안 개요 30장 · 4단계 정리, 바이브 코딩 tcost 요청서
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d663d045e3
commit
01dc892303
70 files changed
+10890
No files matched your search
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "기록 1 · VPN",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기록 2 · 접수",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 중",
|
||||
"대기 중"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기록 3 · 다른 사람",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"answer": [
|
||||
"비밀번호 찾기",
|
||||
"휴대폰"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "사용량 요약 · 요청 3건",
|
||||
"url": "http://localhost:8800/usage/summary",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"requests": 3
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.05
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"by_user": [
|
||||
"이준호",
|
||||
"박서연",
|
||||
"한지훈"
|
||||
],
|
||||
"by_model": [
|
||||
"gpt-4.1-mini"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"usage": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"usage": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "기록 API 고장(500) · 답은 나감",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"usage": "error"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"recorded": false
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "기록 API 느림(8초) · 답은 나감",
|
||||
"request": "requests/faq-printer.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"usage": "slow",
|
||||
"slow_seconds": 8
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"recorded": false
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"대기열"
|
||||
]
|
||||
},
|
||||
"max_seconds": 15
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "고친 뒤 · 기록됨",
|
||||
"request": "requests/faq-password.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/admin/fault",
|
||||
"body": {
|
||||
"usage": "ok"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"recorded": true
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"비밀번호 찾기",
|
||||
"휴대폰"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "요약 · 기록된 요청은 1건",
|
||||
"url": "http://localhost:8800/usage/summary",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"requests": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"cases": [
|
||||
{
|
||||
"name": "FAQ · VPN",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "FAQ · 프린터",
|
||||
"request": "requests/faq-printer.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "FAQ · 비밀번호",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "FAQ · 메일",
|
||||
"request": "requests/faq-mail.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "접수 · T-1002",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "접수 · T-1001",
|
||||
"request": "requests/ticket-done.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "규칙에 없는 질문",
|
||||
"request": "requests/no-keyword.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"cases": [
|
||||
{
|
||||
"name": "VPN · 비용과 단계별 사용량",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.01
|
||||
],
|
||||
"usage.prompt_tokens": [
|
||||
1,
|
||||
20000
|
||||
],
|
||||
"usage.by_step.answer.cost_usd": [
|
||||
1e-06,
|
||||
0.01
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "접수 현황 · 비용",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.01
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 중",
|
||||
"대기 중"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "빈 질문은 LLM 없이",
|
||||
"request": "requests/empty-question.json",
|
||||
"expect": {
|
||||
"status": 400
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"cases": [
|
||||
{
|
||||
"name": "faq-vpn · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "faq-password · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"비밀번호 찾기",
|
||||
"휴대폰"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "faq-printer · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/faq-printer.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"대기열",
|
||||
"전원"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "faq-mail · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/faq-mail.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"보관함",
|
||||
"삭제"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ticket-own · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 중",
|
||||
"대기 중"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ticket-done · LLM 한 번 · $0.0002 이하",
|
||||
"request": "requests/ticket-done.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 완료",
|
||||
"완료"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "규칙으로 모르는 질문은 분류 + 답",
|
||||
"request": "requests/no-keyword.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "긴 로그 + 끝에 질문 · 프린터",
|
||||
"request": "requests/long-printer.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1,
|
||||
"trimmed": true
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0003
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"대기열"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "앞에 질문 + 긴 로그 · VPN",
|
||||
"request": "requests/long-vpn.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"llm_calls": 1,
|
||||
"trimmed": true
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0003
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "짧은 질문은 그대로",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"trimmed": false,
|
||||
"question_chars": 24
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "사람이 한도를 늘리면 자르지 않음",
|
||||
"request": "requests/long-printer.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget",
|
||||
"body": {
|
||||
"max_question_chars": 10000
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"trimmed": false
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"대기열"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"cases": [
|
||||
{
|
||||
"name": "예제 1 · VPN · 보내는 양 줄이기",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"range": {
|
||||
"usage.by_step.answer.prompt_tokens": [
|
||||
1,
|
||||
600
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 1 · 접수 · 보내는 양 줄이기",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"range": {
|
||||
"usage.by_step.answer.prompt_tokens": [
|
||||
1,
|
||||
600
|
||||
]
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 중",
|
||||
"대기 중"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 1 · 비밀번호 · 품질 그대로",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"answer": [
|
||||
"비밀번호 찾기",
|
||||
"휴대폰"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 2 · 분류는 작은 모델",
|
||||
"request": "requests/no-keyword.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"usage.by_step.classify.model": "gpt-5.4-nano"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예제 2 · 프린터 · 품질 그대로",
|
||||
"request": "requests/faq-printer.json",
|
||||
"expect": {
|
||||
"contains": {
|
||||
"answer": [
|
||||
"대기열"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"webhook": "my-cost-report",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage",
|
||||
"body": {
|
||||
"items": [
|
||||
{
|
||||
"request_id": "r1",
|
||||
"user": "이준호",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 1000,
|
||||
"completion_tokens": 100,
|
||||
"cost_usd": 0.00056,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r1",
|
||||
"user": "이준호",
|
||||
"step": "classify",
|
||||
"model": "gpt-5.4-nano",
|
||||
"prompt_tokens": 100,
|
||||
"completion_tokens": 20,
|
||||
"cost_usd": 4.5e-05,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r2",
|
||||
"user": "박서연",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 2000,
|
||||
"completion_tokens": 200,
|
||||
"cost_usd": 0.00112,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r3",
|
||||
"user": "이준호",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 500,
|
||||
"completion_tokens": 40,
|
||||
"cost_usd": 0.000264,
|
||||
"route": "자동 답변"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "요약 숫자",
|
||||
"body": {
|
||||
"requests_per_day": 100,
|
||||
"workdays": 22
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"requests": 3,
|
||||
"calls": 4,
|
||||
"cost_usd": 0.001989,
|
||||
"avg_usd": 0.000663,
|
||||
"top_user": "박서연"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "모델별 · 한 달 예상",
|
||||
"body": {
|
||||
"requests_per_day": 100,
|
||||
"workdays": 22
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"projected_month_usd": 1.4586
|
||||
},
|
||||
"contains": {
|
||||
"by_model": [
|
||||
"\"gpt-4.1-mini\": 0.001944"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "작은 모델 몫",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"contains": {
|
||||
"by_model": [
|
||||
"\"gpt-5.4-nano\": 4.5e-05"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예산 남은 금액",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"daily_budget_usd": 1.0,
|
||||
"remaining_usd": 0.998011,
|
||||
"over_budget": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "예산을 넘으면",
|
||||
"body": {},
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget",
|
||||
"body": {
|
||||
"daily_usd": 0.001
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"over_budget": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"webhook": "my-cost-report",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage",
|
||||
"body": {
|
||||
"items": [
|
||||
{
|
||||
"request_id": "r1",
|
||||
"user": "이준호",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 1000,
|
||||
"completion_tokens": 100,
|
||||
"cost_usd": 0.00056,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r1",
|
||||
"user": "이준호",
|
||||
"step": "classify",
|
||||
"model": "gpt-5.4-nano",
|
||||
"prompt_tokens": 100,
|
||||
"completion_tokens": 20,
|
||||
"cost_usd": 4.5e-05,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r2",
|
||||
"user": "박서연",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 2000,
|
||||
"completion_tokens": 200,
|
||||
"cost_usd": 0.00112,
|
||||
"route": "자동 답변"
|
||||
},
|
||||
{
|
||||
"request_id": "r3",
|
||||
"user": "이준호",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"prompt_tokens": 500,
|
||||
"completion_tokens": 40,
|
||||
"cost_usd": 0.000264,
|
||||
"route": "자동 답변"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "모두 nano였다면",
|
||||
"body": {
|
||||
"requests_per_day": 100,
|
||||
"workdays": 22,
|
||||
"what_if_model": "gpt-5.4-nano"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"what_if.model": "gpt-5.4-nano",
|
||||
"what_if.cost_usd": 0.00117,
|
||||
"what_if.saving_usd": 0.000819,
|
||||
"what_if.projected_month_usd": 0.858
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "원래 숫자는 그대로",
|
||||
"body": {
|
||||
"requests_per_day": 100,
|
||||
"workdays": 22,
|
||||
"what_if_model": "gpt-5.4-nano"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"cost_usd": 0.001989,
|
||||
"projected_month_usd": 1.4586
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "모두 mini였다면 · 아끼는 돈이 음수",
|
||||
"body": {
|
||||
"what_if_model": "gpt-4.1-mini"
|
||||
},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"what_if.cost_usd": 0.002016,
|
||||
"what_if.saving_usd": -2.7e-05
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "없는 모델은 400",
|
||||
"body": {
|
||||
"what_if_model": "gpt-9"
|
||||
},
|
||||
"expect": {
|
||||
"status": 400,
|
||||
"equals": {
|
||||
"error": "unknown model"
|
||||
},
|
||||
"contains": {
|
||||
"known": [
|
||||
"gpt-5.4-nano"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "what_if 없이 부르면 과제 1과 같음",
|
||||
"body": {},
|
||||
"expect": {
|
||||
"equals": {
|
||||
"what_if": null,
|
||||
"requests": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "1번째 · VPN",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2번째 · 프린터",
|
||||
"request": "requests/faq-printer.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "3번째 · 비밀번호",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "4번째 · 메일",
|
||||
"request": "requests/faq-mail.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "5번째 · 접수",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "6번째 · VPN 다시",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/budget",
|
||||
"body": {
|
||||
"user_limit_per_min": 2
|
||||
}
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "이준호 1번째",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "이준호 2번째",
|
||||
"body": {
|
||||
"question": "프린터 출력이 안 돼요",
|
||||
"user": "이준호"
|
||||
},
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "이준호 3번째 · 1분에 2번 넘음",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"expect": {
|
||||
"status": 429,
|
||||
"equals": {
|
||||
"route": "잠시 후",
|
||||
"cost_usd": 0
|
||||
},
|
||||
"max_seconds": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "다른 사람은 그대로",
|
||||
"request": "requests/faq-password.json",
|
||||
"expect": {
|
||||
"status": 200
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"webhook": "my-cost",
|
||||
"after": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"cases": [
|
||||
{
|
||||
"name": "한도를 넘으면 · FAQ 원문",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/budget",
|
||||
"body": {
|
||||
"daily_usd": 0.001
|
||||
}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage",
|
||||
"body": {
|
||||
"request_id": "seed",
|
||||
"user": "seed",
|
||||
"step": "answer",
|
||||
"model": "gpt-4.1-mini",
|
||||
"cost_usd": 0.002
|
||||
}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "한도 초과",
|
||||
"cost_usd": 0,
|
||||
"llm_calls": 0
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"인증서"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "한도를 넘으면 · 접수 원문",
|
||||
"request": "requests/ticket-own.json",
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "한도 초과",
|
||||
"cost_usd": 0
|
||||
},
|
||||
"contains": {
|
||||
"answer": [
|
||||
"처리 중"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "한도 안이면 평소대로",
|
||||
"request": "requests/faq-vpn.json",
|
||||
"before": [
|
||||
{
|
||||
"url": "http://localhost:8800/budget/reset",
|
||||
"body": {}
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:8800/usage-clear",
|
||||
"body": {}
|
||||
}
|
||||
],
|
||||
"expect": {
|
||||
"equals": {
|
||||
"route": "자동 답변"
|
||||
},
|
||||
"range": {
|
||||
"cost_usd": [
|
||||
1e-06,
|
||||
0.0002
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user