Spaces:
Paused
Paused
Update server.js
Browse files
server.js
CHANGED
|
@@ -1,22 +1,25 @@
|
|
| 1 |
require('dotenv').config();
|
| 2 |
const express = require('express');
|
|
|
|
| 3 |
const admin = require('firebase-admin');
|
| 4 |
const Groq = require('groq-sdk');
|
| 5 |
const { Octokit } = require('@octokit/rest');
|
| 6 |
|
| 7 |
-
const app =
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
// Hugging Face-এর জন্য রিকোয়েস্ট সাইজ অপ্টিমাইজেশন
|
| 10 |
app.use(express.json({ limit: '10mb' }));
|
| 11 |
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
|
| 12 |
|
| 13 |
-
// ১. ফায়ারবেস অ্যাডমিন এসডিকে ইনিশিয়ালিলাইজেশন
|
| 14 |
try {
|
| 15 |
if (!process.env.FIREBASE_ADMIN_API) {
|
| 16 |
throw new Error("FIREBASE_ADMIN_API এনভায়রনমেন্ট ভেরিয়েবলটি পাওয়া যায়নি!");
|
| 17 |
}
|
| 18 |
|
| 19 |
-
// সেটিংসের সিক্রেট থেকে সম্পূর্ণ JSON স্ট্রিংটি অবজেক্টে কনভার্ট করা হচ্ছে
|
| 20 |
const serviceAccount = JSON.parse(process.env.FIREBASE_ADMIN_API);
|
| 21 |
|
| 22 |
admin.initializeApp({
|
|
@@ -37,7 +40,7 @@ const octokit = new Octokit({ auth: process.env.GITHUB_API_TOKEN });
|
|
| 37 |
const REPO_OWNER = 'chaingroupworld-rgb';
|
| 38 |
const REPO_NAME = 'Website-visit-1';
|
| 39 |
|
| 40 |
-
// ৩. চ্যাট এপিআই (Dynamic Model Selection
|
| 41 |
app.post('/api/chat', async (req, res) => {
|
| 42 |
const { userId, message } = req.body;
|
| 43 |
|
|
@@ -46,14 +49,12 @@ app.post('/api/chat', async (req, res) => {
|
|
| 46 |
}
|
| 47 |
|
| 48 |
try {
|
| 49 |
-
// ডায়নামিক মডেল ট্রিক: টেক্সট ৩০০ ক্যারেক্টারের বেশি হলে ১৭ বিলিয়ন (Llama 4 Scout), কম হলে ইনস্ট্যান্ট
|
| 50 |
let selectedModel = "llama-3.1-8b-instant";
|
| 51 |
|
| 52 |
if (message.length > 300) {
|
| 53 |
selectedModel = "meta-llama/llama-4-scout-17b-16e-instruct";
|
| 54 |
}
|
| 55 |
|
| 56 |
-
// Groq এপিআই কল
|
| 57 |
const chatCompletion = await groq.chat.completions.create({
|
| 58 |
messages: [{ role: "user", content: message }],
|
| 59 |
model: selectedModel,
|
|
@@ -61,7 +62,6 @@ app.post('/api/chat', async (req, res) => {
|
|
| 61 |
|
| 62 |
const aiResponse = chatCompletion.choices[0]?.message?.content || "";
|
| 63 |
|
| 64 |
-
// ফায়ারবেস রিয়েলটাইম ডাটাবেজে ইউজার ও এআই কথোপকথন সেভ
|
| 65 |
const chatRef = db.ref(`chats/${userId}`).push();
|
| 66 |
await chatRef.set({
|
| 67 |
userMessage: message,
|
|
@@ -82,7 +82,7 @@ app.post('/api/chat', async (req, res) => {
|
|
| 82 |
}
|
| 83 |
});
|
| 84 |
|
| 85 |
-
// ৪. গিটহাব ফাইল পুশ এপিআই
|
| 86 |
app.post('/api/github/push', async (req, res) => {
|
| 87 |
const { filePath, fileContent, commitMessage } = req.body;
|
| 88 |
|
|
@@ -92,7 +92,6 @@ app.post('/api/github/push', async (req, res) => {
|
|
| 92 |
|
| 93 |
try {
|
| 94 |
let sha;
|
| 95 |
-
// ফাইল আগে থেকে আছে কিনা চেক করা (আপডেটের জন্য SHA কোড দরকার হয়)
|
| 96 |
try {
|
| 97 |
const { data } = await octokit.repos.getContent({
|
| 98 |
owner: REPO_OWNER,
|
|
@@ -101,13 +100,11 @@ app.post('/api/github/push', async (req, res) => {
|
|
| 101 |
});
|
| 102 |
sha = data.sha;
|
| 103 |
} catch (e) {
|
| 104 |
-
sha = undefined;
|
| 105 |
}
|
| 106 |
|
| 107 |
-
// ফাইল ডেটাকে Base64 ফরম্যাটে রূপান্তর
|
| 108 |
const base64Content = Buffer.from(fileContent).toString('base64');
|
| 109 |
|
| 110 |
-
// গিটহাবে পুশ বা আপডেট করা
|
| 111 |
const response = await octokit.repos.createOrUpdateFileContents({
|
| 112 |
owner: REPO_OWNER,
|
| 113 |
repo: REPO_NAME,
|
|
@@ -129,12 +126,11 @@ app.post('/api/github/push', async (req, res) => {
|
|
| 129 |
}
|
| 130 |
});
|
| 131 |
|
| 132 |
-
// ৫. বেসিক রুট
|
| 133 |
app.get('/', (req, res) => {
|
| 134 |
res.status(200).send('Hugging Face Free Space Backend Engine is Active!');
|
| 135 |
});
|
| 136 |
|
| 137 |
-
// Hugging Face ফ্রি স্পেসের ডিফল্ট পোর্ট ৭৮৬০ রিড করা
|
| 138 |
const PORT = process.env.PORT || 7860;
|
| 139 |
app.listen(PORT, () => {
|
| 140 |
console.log(`Server is running smoothly on port ${PORT}`);
|
|
|
|
| 1 |
require('dotenv').config();
|
| 2 |
const express = require('express');
|
| 3 |
+
const cors = require('cors'); // 👈 ১. এখানে cors ইমপোর্ট করা হয়েছে
|
| 4 |
const admin = require('firebase-admin');
|
| 5 |
const Groq = require('groq-sdk');
|
| 6 |
const { Octokit } = require('@octokit/rest');
|
| 7 |
|
| 8 |
+
const app = express();
|
| 9 |
+
|
| 10 |
+
// 👈 ২. সব অরিজিন বা ফ্রন্টএন্ড থেকে রিকোয়েস্ট এক্সেপ্ট করার জন্য এটি যুক্ত করা হয়েছে
|
| 11 |
+
app.use(cors({ origin: '*' }));
|
| 12 |
|
| 13 |
// Hugging Face-এর জন্য রিকোয়েস্ট সাইজ অপ্টিমাইজেশন
|
| 14 |
app.use(express.json({ limit: '10mb' }));
|
| 15 |
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
|
| 16 |
|
| 17 |
+
// ১. ফায়ারবেস অ্যাডমিন এসডিকে ইনিশিয়ালিলাইজেশন
|
| 18 |
try {
|
| 19 |
if (!process.env.FIREBASE_ADMIN_API) {
|
| 20 |
throw new Error("FIREBASE_ADMIN_API এনভায়রনমেন্ট ভেরিয়েবলটি পাওয়া যায়নি!");
|
| 21 |
}
|
| 22 |
|
|
|
|
| 23 |
const serviceAccount = JSON.parse(process.env.FIREBASE_ADMIN_API);
|
| 24 |
|
| 25 |
admin.initializeApp({
|
|
|
|
| 40 |
const REPO_OWNER = 'chaingroupworld-rgb';
|
| 41 |
const REPO_NAME = 'Website-visit-1';
|
| 42 |
|
| 43 |
+
// ৩. চ্যাট এপিআই (Dynamic Model Selection)
|
| 44 |
app.post('/api/chat', async (req, res) => {
|
| 45 |
const { userId, message } = req.body;
|
| 46 |
|
|
|
|
| 49 |
}
|
| 50 |
|
| 51 |
try {
|
|
|
|
| 52 |
let selectedModel = "llama-3.1-8b-instant";
|
| 53 |
|
| 54 |
if (message.length > 300) {
|
| 55 |
selectedModel = "meta-llama/llama-4-scout-17b-16e-instruct";
|
| 56 |
}
|
| 57 |
|
|
|
|
| 58 |
const chatCompletion = await groq.chat.completions.create({
|
| 59 |
messages: [{ role: "user", content: message }],
|
| 60 |
model: selectedModel,
|
|
|
|
| 62 |
|
| 63 |
const aiResponse = chatCompletion.choices[0]?.message?.content || "";
|
| 64 |
|
|
|
|
| 65 |
const chatRef = db.ref(`chats/${userId}`).push();
|
| 66 |
await chatRef.set({
|
| 67 |
userMessage: message,
|
|
|
|
| 82 |
}
|
| 83 |
});
|
| 84 |
|
| 85 |
+
// ৪. গিটহাব ফাইল পুশ এপিআই
|
| 86 |
app.post('/api/github/push', async (req, res) => {
|
| 87 |
const { filePath, fileContent, commitMessage } = req.body;
|
| 88 |
|
|
|
|
| 92 |
|
| 93 |
try {
|
| 94 |
let sha;
|
|
|
|
| 95 |
try {
|
| 96 |
const { data } = await octokit.repos.getContent({
|
| 97 |
owner: REPO_OWNER,
|
|
|
|
| 100 |
});
|
| 101 |
sha = data.sha;
|
| 102 |
} catch (e) {
|
| 103 |
+
sha = undefined;
|
| 104 |
}
|
| 105 |
|
|
|
|
| 106 |
const base64Content = Buffer.from(fileContent).toString('base64');
|
| 107 |
|
|
|
|
| 108 |
const response = await octokit.repos.createOrUpdateFileContents({
|
| 109 |
owner: REPO_OWNER,
|
| 110 |
repo: REPO_NAME,
|
|
|
|
| 126 |
}
|
| 127 |
});
|
| 128 |
|
| 129 |
+
// ৫. বেসিক রুট
|
| 130 |
app.get('/', (req, res) => {
|
| 131 |
res.status(200).send('Hugging Face Free Space Backend Engine is Active!');
|
| 132 |
});
|
| 133 |
|
|
|
|
| 134 |
const PORT = process.env.PORT || 7860;
|
| 135 |
app.listen(PORT, () => {
|
| 136 |
console.log(`Server is running smoothly on port ${PORT}`);
|