Hardik5456's picture
Update app.py
906ce9f verified
raw
history blame
2.93 kB
import os
import threading
import discord
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from dotenv import load_dotenv
# Load environment variables from Hugging Face Secrets and .env (if available)
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
HF_TOKEN = os.getenv("HF_TOKEN") # Optional: only needed if your model repository is private
if not DISCORD_TOKEN:
raise ValueError("Discord bot token is missing. Set DISCORD_TOKEN in the environment variables.")
# Specify the model repository name. For DeepScaleR-1.5B-Preview use the official repo:
MODEL_NAME = "agentica-org/DeepScaleR-1.5B-Preview"
# Load the tokenizer and model.
# If HF_TOKEN is provided, use it for authentication.
if HF_TOKEN:
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=HF_TOKEN)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME, token=HF_TOKEN, torch_dtype=torch.float16, device_map="auto"
)
else:
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME, torch_dtype=torch.float16, device_map="auto"
)
# Define a function to generate responses using the model.
def generate_response(prompt):
device = "cuda" if torch.cuda.is_available() else "cpu"
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=1024).to(device)
outputs = model.generate(**inputs, max_new_tokens=200, do_sample=True, top_p=0.9, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Replace any instance of "DeepScaleR" with "Shiv Yantra AI" to enforce the bot's identity.
response = response.replace("DeepScaleR", "Shiv Yantra AI")
return response
# ==========================
# Discord Bot Setup
# ==========================
intents = discord.Intents.default()
intents.message_content = True # Required for reading message content
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"Logged in as {client.user}")
@client.event
async def on_message(message):
# Skip messages from the bot itself.
if message.author == client.user:
return
user_input = message.content.strip()
if user_input:
try:
# Directly call the local function instead of making an HTTP request.
ai_response = generate_response(user_input)
except Exception as e:
print(f"Error generating response: {e}")
ai_response = "Error processing your request."
await message.channel.send(ai_response)
def run_discord_bot():
client.run(DISCORD_TOKEN)
# ==========================
# Start the Discord Bot
# ==========================
if __name__ == "__main__":
# Run the Discord bot on a separate thread.
threading.Thread(target=run_discord_bot, daemon=True).start()
# Keep the main thread alive.
while True:
pass