from typing import List, Dict
from openai import AsyncOpenAI
import os

class SystemRolePrompt:
    def __init__(self, template: str):
        self.template = template

    def create_message(self) -> Dict[str, str]:
        return {
            "role": "system",
            "content": self.template
        }

class UserRolePrompt:
    def __init__(self, template: str):
        self.template = template

    def create_message(self, **kwargs) -> Dict[str, str]:
        return {
            "role": "user",
            "content": self.template.format(**kwargs)
        }

class ChatOpenAI:
    def __init__(self):
        self.client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))

    async def acomplete(self, messages: List[Dict[str, str]]) -> str:
        response = await self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages
        )
        return response.choices[0].message.content