File size: 1,336 Bytes
1fb925a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pixeltable as pxt
from pixeltable.functions import openai
import os
import getpass

# Set up OpenAI API key
if 'OPENAI_API_KEY' not in os.environ:
    os.environ['OPENAI_API_KEY'] = getpass.getpass('Enter your OpenAI API key: ')

# Initialize Pixeltable
pxt.drop_dir('ai_rpg', force=True)
pxt.create_dir('ai_rpg')

# Create a single table for all game data
interactions = pxt.create_table(
    'ai_rpg.interactions',
    {
        'session_id': pxt.StringType(),
        'player_name': pxt.StringType(),
        'genre': pxt.StringType(),
        'initial_scenario': pxt.StringType(),
        'turn_number': pxt.IntType(),
        'player_input': pxt.StringType(),
        'timestamp': pxt.TimestampType(),
    }
)

# Add computed columns for AI responses
from src.utils import generate_messages, extract_options

interactions['messages'] = generate_messages(
    interactions.genre,
    interactions.player_name,
    interactions.initial_scenario,
    interactions.player_input,
    interactions.turn_number
)

interactions['ai_response'] = openai.chat_completions(
    messages=interactions.messages,
    model='gpt-4o-mini-2024-07-18',
    max_tokens=500,
    temperature=0.8
)

interactions['story_text'] = interactions.ai_response.choices[0].message.content
interactions['options'] = extract_options(interactions.story_text)