mirror of
https://github.com/NovaOSS/nova-cord.git
synced 2024-11-25 20:53:58 +01:00
70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
import os
|
||
import openai
|
||
import random
|
||
|
||
import embedder
|
||
|
||
from dotenv import load_dotenv
|
||
|
||
load_dotenv()
|
||
|
||
async def respond(interaction, prompt):
|
||
partial_message = await interaction.send('') # send an empty message
|
||
message = await partial_message.fetch() # gets the message that was send
|
||
|
||
openai.api_base = os.getenv('OPENAI_BASE')
|
||
openai.api_key = os.getenv('OPENAI_KEY')
|
||
|
||
model = os.getenv('OPENAI_MODEL')
|
||
|
||
async with interaction.channel.typing(): # show the "Typing..."
|
||
try:
|
||
completion = openai.ChatCompletion.create(
|
||
model=model,
|
||
messages=[
|
||
{'role': 'system', 'content': f"""You are a helpful Discord AI bot called "Nova". You're based on NovaAI\'s {model} model.
|
||
You were developed by *NovaAI* (website: https://nova-oss.com) in 2023, but your knowledge is limited to mid-2021.
|
||
Respond using Markdown. Keep things simple and short and directly do what the user says without any fluff.
|
||
Have cool humour and be friendly. Precicesly follow the instructions of the user.
|
||
For programming code, always make use formatted code blocks like this:
|
||
```py
|
||
print("Hello")
|
||
```"""},
|
||
{'role': 'user', 'content': prompt}
|
||
],
|
||
temperature=0.6,
|
||
stream=True,
|
||
max_tokens=1000
|
||
)
|
||
except Exception as exc:
|
||
await embedder.error(interaction, 'Could not generate an AI response.', ephemeral=True)
|
||
raise exc
|
||
|
||
text = f"""### {interaction.user.mention}:
|
||
{prompt}
|
||
|
||
### NovaAI [`{model}`]:
|
||
"""
|
||
|
||
for event in completion: # loop through word generation in real time
|
||
try:
|
||
new_text = event['choices'][0]['delta']['content'] # newly generated word
|
||
except KeyError:
|
||
if not event['choices'][0].get('text'):
|
||
continue
|
||
|
||
if '[DONE]' in event['choices'][0]['text']:
|
||
break
|
||
|
||
text += new_text
|
||
|
||
if text and random.randint(0, 100) < 20:
|
||
await message.edit(content=text)
|
||
|
||
if text:
|
||
await message.edit(content=text)
|
||
|
||
await message.add_reaction('✅')
|
||
|
||
|