process-gpt-agent-sdk 0.3.15__py3-none-any.whl → 0.3.17__py3-none-any.whl
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.
Potentially problematic release.
This version of process-gpt-agent-sdk might be problematic. Click here for more details.
- {process_gpt_agent_sdk-0.3.15.dist-info → process_gpt_agent_sdk-0.3.17.dist-info}/METADATA +7 -8
- process_gpt_agent_sdk-0.3.17.dist-info/RECORD +8 -0
- processgpt_agent_sdk/__init__.py +25 -33
- processgpt_agent_sdk/database.py +119 -397
- processgpt_agent_sdk/processgpt_agent_framework.py +307 -240
- processgpt_agent_sdk/utils.py +100 -0
- process_gpt_agent_sdk-0.3.15.dist-info/RECORD +0 -7
- {process_gpt_agent_sdk-0.3.15.dist-info → process_gpt_agent_sdk-0.3.17.dist-info}/WHEEL +0 -0
- {process_gpt_agent_sdk-0.3.15.dist-info → process_gpt_agent_sdk-0.3.17.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import traceback
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
|
|
6
|
+
# OpenAI 호환 엔드포인트 사용 (환경변수 기반)
|
|
7
|
+
# OPENAI_API_KEY, OPENAI_BASE_URL(required if not default)
|
|
8
|
+
try:
|
|
9
|
+
from openai import OpenAI
|
|
10
|
+
except Exception: # 라이브러리 미설치/호환 환경 대비
|
|
11
|
+
OpenAI = None # type: ignore
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
async def summarize_error_to_user(exc: Exception, meta: Dict[str, Any]) -> str:
|
|
17
|
+
"""
|
|
18
|
+
예외 정보를 바탕으로 사용자 친화적인 5줄 요약을 생성.
|
|
19
|
+
- 모델: gpt-4.1-nano (요청사항 반영)
|
|
20
|
+
- 실패 시 Fallback: 간단한 수동 요약문
|
|
21
|
+
"""
|
|
22
|
+
# 오류 컨텍스트 정리
|
|
23
|
+
logger.info("🔍 오류 컨텍스트 분석 중...")
|
|
24
|
+
err_text = f"{type(exc).__name__}: {str(exc)}"
|
|
25
|
+
tb = traceback.format_exc(limit=3)
|
|
26
|
+
meta_lines = [
|
|
27
|
+
f"task_id={meta.get('task_id')}",
|
|
28
|
+
f"proc_inst_id={meta.get('proc_inst_id')}",
|
|
29
|
+
f"agent_orch={meta.get('agent_orch')}",
|
|
30
|
+
f"tool={meta.get('tool')}",
|
|
31
|
+
]
|
|
32
|
+
meta_text = ", ".join([x for x in meta_lines if x])
|
|
33
|
+
logger.info("📋 오류 컨텍스트 분석 완료 - %s", meta_text)
|
|
34
|
+
|
|
35
|
+
system = (
|
|
36
|
+
"당신은 엔터프라이즈 SDK의 오류 비서입니다. "
|
|
37
|
+
"사용자(비개발자도 이해 가능)를 위해, 아래 조건을 정확히 지켜 5줄로 한국어 설명을 만드세요.\n"
|
|
38
|
+
"형식: 각 줄은 1문장씩, 총 5줄.\n"
|
|
39
|
+
"포함 요소: ①무슨 문제인지(원인 추정) ②어떤 영향이 있는지 ③즉시 할 일(대처) "
|
|
40
|
+
"④재발 방지 팁 ⑤필요시 지원 요청 경로.\n"
|
|
41
|
+
"과장 금지, 간결하고 친절하게."
|
|
42
|
+
)
|
|
43
|
+
user = (
|
|
44
|
+
f"[오류요약대상]\n"
|
|
45
|
+
f"- 컨텍스트: {meta_text}\n"
|
|
46
|
+
f"- 에러: {err_text}\n"
|
|
47
|
+
f"- 스택(상위 3프레임):\n{tb}\n"
|
|
48
|
+
f"위 정보를 바탕으로 5줄 설명을 출력하세요."
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
try:
|
|
52
|
+
if OpenAI is None:
|
|
53
|
+
logger.warning("⚠️ OpenAI SDK 사용 불가 - Fallback 모드로 전환")
|
|
54
|
+
raise RuntimeError("OpenAI SDK not available")
|
|
55
|
+
|
|
56
|
+
logger.info("🤖 OpenAI 클라이언트 초기화 중...")
|
|
57
|
+
client = OpenAI(
|
|
58
|
+
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1"),
|
|
59
|
+
api_key=os.getenv("OPENAI_API_KEY", ""),
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
model_name = os.getenv("ERROR_SUMMARY_MODEL", "gpt-4.1-nano")
|
|
63
|
+
logger.info("📡 LLM 요청 전송 중... (모델: %s)", model_name)
|
|
64
|
+
|
|
65
|
+
# responses API (신규 SDK)
|
|
66
|
+
resp = client.responses.create(
|
|
67
|
+
model=model_name,
|
|
68
|
+
input=[{"role": "system", "content": system},
|
|
69
|
+
{"role": "user", "content": user}],
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
logger.info("🔍 LLM 응답 분석 중...")
|
|
73
|
+
# 텍스트 추출(호환성 고려)
|
|
74
|
+
text = None
|
|
75
|
+
try:
|
|
76
|
+
text = resp.output_text # type: ignore[attr-defined]
|
|
77
|
+
except Exception:
|
|
78
|
+
# 다른 필드 구조 호환
|
|
79
|
+
if hasattr(resp, "choices") and resp.choices:
|
|
80
|
+
text = getattr(resp.choices[0].message, "content", None) # type: ignore
|
|
81
|
+
if not text:
|
|
82
|
+
raise RuntimeError("No text in LLM response")
|
|
83
|
+
|
|
84
|
+
logger.info("✅ LLM 오류 요약 생성 완료")
|
|
85
|
+
return text.strip()
|
|
86
|
+
|
|
87
|
+
except Exception as e:
|
|
88
|
+
logger.warning("⚠️ LLM 오류 요약 생성 실패: %s - Fallback 모드로 전환", str(e))
|
|
89
|
+
# Fallback: 간단 5줄
|
|
90
|
+
logger.info("📝 Fallback 오류 요약 생성 중...")
|
|
91
|
+
|
|
92
|
+
fallback_text = (
|
|
93
|
+
"1) 처리 중 알 수 없는 오류가 발생했어요(환경/입력 값 문제일 수 있어요).\n"
|
|
94
|
+
"2) 작업 결과가 저장되지 않았거나 일부만 반영됐을 수 있어요.\n"
|
|
95
|
+
"3) 입력 값과 네트워크 상태를 확인하고, 다시 시도해 주세요.\n"
|
|
96
|
+
"4) 같은 문제가 반복되면 로그와 설정(키/URL/권한)을 점검해 주세요.\n"
|
|
97
|
+
"5) 계속되면 관리자나 운영팀에 문의해 원인 분석을 요청해 주세요."
|
|
98
|
+
)
|
|
99
|
+
logger.info("✅ Fallback 오류 요약 생성 완료")
|
|
100
|
+
return fallback_text
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
processgpt_agent_sdk/__init__.py,sha256=eaRAJsvoMHuu5KDz0T8jQxXp8o6v8VISaM1g2rblhok,741
|
|
2
|
-
processgpt_agent_sdk/database.py,sha256=G9nln9QTSfgPf3FfzLKwbXf3esEPz07rWVmzttxKTWE,18989
|
|
3
|
-
processgpt_agent_sdk/processgpt_agent_framework.py,sha256=YE5JB4TyRkYFYxRMRfo-SyXb5JuFZwaNtNaxFNd9PXA,16894
|
|
4
|
-
process_gpt_agent_sdk-0.3.15.dist-info/METADATA,sha256=l-_uC0r4XVVEoSnlHMyYAiajRVDTQWKCcVfKEW4FxUM,22153
|
|
5
|
-
process_gpt_agent_sdk-0.3.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
6
|
-
process_gpt_agent_sdk-0.3.15.dist-info/top_level.txt,sha256=Xe6zrj3_3Vv7d0pl5RRtenVUckwOVBVLQn2P03j5REo,21
|
|
7
|
-
process_gpt_agent_sdk-0.3.15.dist-info/RECORD,,
|
|
File without changes
|
{process_gpt_agent_sdk-0.3.15.dist-info → process_gpt_agent_sdk-0.3.17.dist-info}/top_level.txt
RENAMED
|
File without changes
|