-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpf_cli.py
More file actions
140 lines (112 loc) · 4.87 KB
/
Copy pathpf_cli.py
File metadata and controls
140 lines (112 loc) · 4.87 KB
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
#!/usr/bin/env python3
"""
PocketFlow-based MBTI questionnaire using the actual flow and shared store
"""
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from flow import create_mbti_flow, create_shared_store
from utils.test_data import generate_test_data
def run_pocketflow_questionnaire(import_file=None):
"""Run questionnaire using PocketFlow"""
print("=== MBTI Questionnaire (PocketFlow) ===\n")
# Create flow and shared store
flow = create_mbti_flow()
config = {
"ui_mode": "cli",
"output_format": "html",
"analysis_method": "traditional", # Skip LLM for now
"import_file": import_file
}
shared = create_shared_store(config)
try:
print("Running PocketFlow pipeline...")
flow.run(shared)
# Display results
print("\n" + "="*50)
print("POCKETFLOW RESULTS")
print("="*50)
print(f"Your MBTI Type: {shared['results']['mbti_type']}")
print(f"Report generated: {shared['exports']['report_path']}")
print(f"Data exported: {shared['exports']['questionnaire_json']}")
# Show confidence scores
confidence = shared['analysis']['confidence_scores']
if confidence:
print(f"\nConfidence Scores:")
for dimension, score in confidence.items():
print(f" {dimension}: {score:.2f}")
# Show traditional scores
traditional = shared['analysis']['traditional_scores']
if traditional:
print(f"\nDimension Scores:")
pairs = [('E', 'I'), ('S', 'N'), ('T', 'F'), ('J', 'P')]
for dim1, dim2 in pairs:
score1 = traditional.get(f'{dim1}_score', 0.5)
score2 = traditional.get(f'{dim2}_score', 0.5)
stronger = dim1 if score1 > score2 else dim2
percentage = max(score1, score2) * 100
print(f" {dim1}/{dim2}: {stronger} ({percentage:.1f}%)")
print(f"\nOpen '{shared['exports']['report_path']}' to view the full report.")
except Exception as e:
print(f"Error running PocketFlow: {e}")
import traceback
traceback.print_exc()
return False
return True
def run_pocketflow_test(mbti_type=None):
"""Run test using PocketFlow with test data"""
print("=== MBTI Test Mode (PocketFlow) ===\n")
# Generate test data
test_data = generate_test_data(mbti_type)
print(f"Generated test data for: {test_data['target_type']}")
# Create flow and shared store
flow = create_mbti_flow()
config = {
"ui_mode": "test",
"output_format": "html",
"analysis_method": "traditional"
}
shared = create_shared_store(config)
# Pre-populate with test data (skip question presentation)
shared["questionnaire"]["responses"] = test_data['responses']
try:
print("Running PocketFlow analysis...")
# Skip to analysis nodes (questions already answered)
from pocketflow import Flow
from nodes import AnalyzeResponsesBatchNode, TraditionalScoringNode, DetermineMBTITypeNode, GenerateReportNode, ExportDataNode
analyze_responses = AnalyzeResponsesBatchNode()
traditional_scoring = TraditionalScoringNode()
determine_type = DetermineMBTITypeNode()
generate_report = GenerateReportNode()
export_data = ExportDataNode()
# Connect partial flow
analyze_responses >> traditional_scoring >> determine_type >> generate_report >> export_data
test_flow = Flow(start=analyze_responses)
# Run the flow
test_flow.run(shared)
# Display results
print("\n" + "="*50)
print("POCKETFLOW TEST RESULTS")
print("="*50)
print(f"Target Type: {test_data['target_type']}")
print(f"Detected Type: {shared['results']['mbti_type']}")
print(f"Match: {'YES' if test_data['target_type'] == shared['results']['mbti_type'] else 'NO'}")
print(f"Report: {shared['exports']['report_path']}")
except Exception as e:
print(f"Error in PocketFlow test: {e}")
import traceback
traceback.print_exc()
return False
return True
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='MBTI Questionnaire using PocketFlow')
parser.add_argument('--test', action='store_true', help='Run in test mode')
parser.add_argument('--test-type', type=str, help='MBTI type for test mode')
parser.add_argument('--import-file', type=str, help='Import questionnaire from JSON')
args = parser.parse_args()
if args.test:
success = run_pocketflow_test(args.test_type)
else:
success = run_pocketflow_questionnaire(args.import_file)
exit(0 if success else 1)