Spaces:
Runtime error
Runtime error
File size: 3,497 Bytes
7aec585 cb35dc2 1c63c09 b5fc9a6 81721b3 41f1852 81721b3 1c63c09 41f1852 7aec585 1c63c09 7aec585 1c63c09 cb35dc2 906ce9f cb35dc2 41f1852 cb35dc2 41f1852 cb35dc2 1c63c09 cb35dc2 1c63c09 cb35dc2 1c63c09 cb35dc2 1c63c09 906ce9f 1c63c09 81721b3 1c63c09 81721b3 d29ae30 b5fc9a6 cb35dc2 b5fc9a6 906ce9f 7aec585 fdb904d cb35dc2 1c63c09 cb35dc2 1c63c09 fdb904d cb35dc2 7aec585 cb35dc2 7aec585 1c63c09 cb35dc2 1c63c09 cb35dc2 1c63c09 906ce9f cb35dc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import os
import threading
import asyncio
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 repo 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, we use the official repository:
MODEL_NAME = "agentica-org/DeepScaleR-1.5B-Preview"
# Load the tokenizer and model.
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 AI responses.
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 the internal model name with 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 to read message contents
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:
# Run the synchronous generate_response function in a separate thread.
ai_response = await asyncio.to_thread(generate_response, user_input)
except Exception as e:
print(f"Error during generation: {e}")
ai_response = "Error processing your request."
await message.channel.send(ai_response)
def run_discord_bot():
client.run(DISCORD_TOKEN)
# --------------------------
# (Optional) Gradio Interface Setup
# --------------------------
# If you want a web UI (you can disable this if not needed)
import gradio as gr
def gradio_api(input_text):
return generate_response(input_text)
iface = gr.Interface(fn=gradio_api, inputs="text", outputs="text", title="Shiv Yantra AI")
def run_gradio():
iface.launch(server_name="0.0.0.0", server_port=7860, share=False)
# --------------------------
# Start Services Concurrently
# --------------------------
if __name__ == "__main__":
# Optionally, start the Gradio interface in a daemon thread.
threading.Thread(target=run_gradio, daemon=True).start()
# Start the Discord bot in a separate thread.
threading.Thread(target=run_discord_bot, daemon=True).start()
# Keep the main thread alive.
while True:
pass |