File size: 2,318 Bytes
186779c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import uuid
from prompts import QUESTIONS
from evaluator import call_llm
import json

class InterviewAgent:
    def __init__(self):
        self.session_id = str(uuid.uuid4())
        self.idx = 0
        self.history = []  
        self.results = []  
        self.active = True
        self.history.append({
            'role': 'agent',
            'text': 'Hello — I am your Excel mock interviewer. I will ask a few questions.'
        })
        self.history.append({'role': 'agent', 'text': QUESTIONS[0]['text']})

    @property
    def current_question(self):
        return QUESTIONS[self.idx]

    def record_answer(self, text: str):
        q = self.current_question
        self.history.append({'role': 'user', 'text': text})
        evidence = {}
        grade = call_llm(q['text'], text, evidence)
        self.results.append({
            'question_id': q['id'],
            'answer': text,
            'grade': grade,
            'evidence': evidence
        })
        self.idx += 1
        if self.idx < len(QUESTIONS):
            self.history.append({'role': 'agent', 'text': QUESTIONS[self.idx]['text']})
        else:
            self.finish()

    def record_upload(self, filepath: str):
        self.history.append({'role': 'user', 'text': f'Uploaded file: {filepath}'})
        self.results.append({'question_id': 'upload', 'file': filepath})
        self.idx += 1
        if self.idx < len(QUESTIONS):
            self.history.append({'role': 'agent', 'text': QUESTIONS[self.idx]['text']})
        else:
            self.finish()

    def finish(self):
        self.active = False
        self.history.append({'role': 'agent', 'text': 'Thank you. The interview is finished.'})

    def summary(self):
        total = 0
        count = 0
        for r in self.results:
            g = r.get('grade')
            if g and isinstance(g.get('score'), int):
                total += g['score']
                count += 1
        avg = total / count if count else 0
        return {
            'session_id': self.session_id,
            'avg_score': avg,
            'results': self.results
        }

    def transcript_json(self):
        return json.dumps({
            'session_id': self.session_id,
            'history': self.history,
            'results': self.results
        }, indent=2)