1+
2+ import os
3+ from openai import OpenAI
4+ from typing import Sequence , Any
5+
6+ from .ai_service import AIProvider , Character , Message
7+
8+
9+ class OpenAIProvider :
10+ def __init__ (self , api_key : str , model_name : str = 'gpt-4.5-turbo' ):
11+ self .client = OpenAI (api_key = api_key )
12+ self .model_name = model_name
13+
14+ def _format_history_for_openai (self , character : Character , history : Sequence [Message ]) -> list [dict [str , str ]]:
15+ openai_history = []
16+ if character .system_prompt :
17+ openai_history .append ({"role" : "system" , "content" : character .system_prompt })
18+
19+ for message in history :
20+ role = 'user' if message .sender == 'user' else 'assistant'
21+ openai_history .append ({"role" : role , "content" : message .content })
22+
23+ return openai_history
24+
25+ def get_completion (self , character : Character , history : Sequence [Message ]) -> str :
26+ if not history :
27+ return "Error: No conversation history provided."
28+ messages = self ._format_history_for_openai (character , history )
29+
30+ try :
31+ response = self .client .chat .completions .create (
32+ model = self .model_name ,
33+ messages = messages
34+ )
35+ ai_response_text = response .choices [0 ].message .content
36+
37+ if not ai_response_text :
38+ print ("Warning: OpenAI API returned no text." )
39+ return "I cannot generate a response for that request."
40+
41+
42+ return ai_response_text
43+
44+ except Exception as e :
45+ print (f"Error calling OpenAI API: { e } " )
46+ return "Sorry, I encountered an erro."
0 commit comments