37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Optional
 | |
| from openai import AsyncOpenAI
 | |
| 
 | |
| 
 | |
| class GPT:
 | |
|     def __init__(self, constants) -> None:
 | |
|         self.constants = constants
 | |
|         self.api_key: str = self.constants.OPENAI_API_KEY
 | |
|         self.client: AsyncOpenAI = AsyncOpenAI(
 | |
|             api_key=self.api_key,
 | |
|             timeout=10.0,
 | |
|         )
 | |
|         self.default_system_prompt: str = """You are a helpful assistant who will provide only totally accurate tidbits of \
 | |
|             info on the specific songs the user may listen to."""
 | |
| 
 | |
|     async def get_completion(
 | |
|         self, prompt: str, system_prompt: Optional[str] = None
 | |
|     ) -> Optional[str]:
 | |
|         if not system_prompt:
 | |
|             system_prompt = self.default_system_prompt
 | |
|         chat_completion = await self.client.chat.completions.create(
 | |
|             messages=[
 | |
|                 {
 | |
|                     "role": "system",
 | |
|                     "content": system_prompt,
 | |
|                 },
 | |
|                 {
 | |
|                     "role": "user",
 | |
|                     "content": prompt,
 | |
|                 },
 | |
|             ],
 | |
|             model="gpt-4o-mini",
 | |
|             temperature=0.35,
 | |
|         )
 | |
|         response: Optional[str] = chat_completion.choices[0].message.content
 | |
|         return response
 |