File size: 5,318 Bytes
44e0e84
 
1c7b7bd
 
44e0e84
 
 
 
 
 
 
 
 
 
 
1c7b7bd
 
 
 
44e0e84
1c7b7bd
 
44e0e84
1c7b7bd
 
 
 
44e0e84
1c7b7bd
 
 
 
 
44e0e84
 
 
 
1c7b7bd
44e0e84
 
1c7b7bd
44e0e84
 
 
1c7b7bd
44e0e84
 
1c7b7bd
 
44e0e84
1c7b7bd
44e0e84
 
 
1c7b7bd
44e0e84
1c7b7bd
 
 
 
 
 
 
 
44e0e84
1c7b7bd
44e0e84
 
1c7b7bd
44e0e84
1c7b7bd
 
 
 
 
 
 
 
 
 
 
 
 
44e0e84
 
 
1c7b7bd
44e0e84
 
 
 
 
1c7b7bd
 
44e0e84
1c7b7bd
 
44e0e84
1c7b7bd
44e0e84
1c7b7bd
44e0e84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c7b7bd
 
 
44e0e84
1c7b7bd
 
 
 
44e0e84
1c7b7bd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import os
import json
import time
from datetime import datetime
import uuid

# Define data directories
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data")
PERSONAS_DIR = os.path.join(DATA_DIR, "personas")
CONVERSATIONS_DIR = os.path.join(DATA_DIR, "conversations")

# Create directories if they don't exist
for directory in [DATA_DIR, PERSONAS_DIR, CONVERSATIONS_DIR]:
    os.makedirs(directory, exist_ok=True)

def save_persona(persona):
    """페르소나 객체를 JSON 파일로 저장"""
    if not persona or "기본정보" not in persona:
        return None
    
    # 저장 디렉토리 확인
    os.makedirs(PERSONAS_DIR, exist_ok=True)
    
    # 파일명 생성 (이름_타입_타임스탬프.json)
    name = persona.get("기본정보", {}).get("이름", "unknown")
    object_type = persona.get("기본정보", {}).get("유형", "unknown")
    timestamp = int(time.time())
    
    # 공백이나 특수문자 처리
    name = name.replace(" ", "_").replace("/", "_").replace("\\", "_")
    object_type = object_type.replace(" ", "_").replace("/", "_").replace("\\", "_")
    
    filename = f"{name}_{object_type}_{timestamp}.json"
    filepath = os.path.join(PERSONAS_DIR, filename)
    
    try:
        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(persona, f, ensure_ascii=False, indent=2)
        return filepath
    except Exception as e:
        print(f"페르소나 저장 오류: {str(e)}")
        return None

def load_persona(filepath):
    """JSON 파일에서 페르소나 객체 로드"""
    try:
        with open(filepath, 'r', encoding='utf-8') as f:
            persona = json.load(f)
        return persona
    except Exception as e:
        print(f"페르소나 로드 오류: {str(e)}")
        return None

def list_personas():
    """저장된 모든 페르소나 목록 반환"""
    try:
        personas = []
        personas_dir = PERSONAS_DIR
        
        if not os.path.exists(personas_dir):
            os.makedirs(personas_dir, exist_ok=True)
            return personas
        
        for filename in os.listdir(personas_dir):
            if filename.endswith(".json"):
                filepath = os.path.join(personas_dir, filename)
                try:
                    with open(filepath, 'r', encoding='utf-8') as f:
                        persona = json.load(f)
                    
                    # 기본 정보 추출
                    name = persona.get("기본정보", {}).get("이름", "Unknown")
                    persona_type = persona.get("기본정보", {}).get("유형", "Unknown")
                    
                    # 생성 시간 (파일명에서 추출 또는 메타데이터에서)
                    created_at = persona.get("기본정보", {}).get("생성일시", "")
                    if not created_at:
                        # 파일명에서 타임스탬프 추출 시도
                        try:
                            timestamp = int(filename.split("_")[-1].split(".")[0])
                            created_at = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M")
                        except:
                            created_at = "알 수 없음"
                    
                    personas.append({
                        "name": name,
                        "type": persona_type,
                        "created_at": created_at,
                        "filename": filename,
                        "filepath": filepath
                    })
                except Exception as e:
                    print(f"파일 {filename} 로드 오류: {str(e)}")
                    continue
        
        # 최신순 정렬
        personas.sort(key=lambda p: p["filepath"], reverse=True)
        return personas
    
    except Exception as e:
        print(f"페르소나 목록 조회 오류: {str(e)}")
        return []

def save_conversation(conversation_data):
    """
    Save conversation data to a JSON file
    
    Args:
        conversation_data: Dictionary containing conversation information
    
    Returns:
        File path where the conversation was saved
    """
    # Generate filename
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    persona_name = conversation_data.get("persona", {}).get("기본정보", {}).get("이름", "unnamed")
    sanitized_name = "".join(c if c.isalnum() or c in ["-", "_"] else "_" for c in persona_name)
    unique_id = str(uuid.uuid4())[:8]
    filename = f"conversation_{sanitized_name}_{timestamp}_{unique_id}.json"
    
    # Full file path
    filepath = os.path.join(CONVERSATIONS_DIR, filename)
    
    # Save to file
    try:
        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(conversation_data, f, ensure_ascii=False, indent=2)
        
        return filepath
    except Exception as e:
        print(f"Error saving conversation: {str(e)}")
        return None

def toggle_frontend_backend_view(persona):
    """페르소나 객체의 프론트엔드/백엔드 뷰 전환"""
    if not persona:
        return None, None
    
    # 원본 데이터 복사
    import copy
    frontend_persona = copy.deepcopy(persona)
    backend_persona = copy.deepcopy(persona)
    
    return frontend_persona, backend_persona