TeraDOCS / server.js
vedaco's picture
Update server.js
7d944f7 verified
Raw
History Blame Contribute Delete
2.98 kB
const express = require('express');
const cors = require('cors');
const http = require('http');
require('dotenv').config();
const app = express();
app.use(cors());
app.use(express.json({ limit: '50mb' }));
const PORT = process.env.PORT || 7860;
const OLLAMA_HOST = '127.0.0.1';
const OLLAMA_PORT = 11434;
const MODEL = process.env.MODEL || 'qwen3.5:0.8b';
console.log('Tera V2 Starting...');
// Root route
app.get('/', (req, res) => {
res.json({ name: 'Tera V2 API', version: '2.0.0', model: MODEL, status: 'running' });
});
// Health check
app.get('/health', (req, res) => {
res.json({ status: 'ok', service: 'Tera V2', model: MODEL });
});
// SIMPLE CHAT (Non-streaming - works better)
app.post('/api/chat', async (req, res) => {
try {
const { messages, sources } = req.body;
// Build prompt
let context = '';
if (sources && sources.length > 0) {
context = '\n\nDOCUMENTS:\n' + sources.map(s => s.name + ':\n' + (s.content?.substring(0, 2000) || '')).join('\n\n');
}
const prompt = `You are Tera V2, an AI assistant.${context}\n\nUser: ${messages[messages.length-1].content}\n\nTera V2:`;
console.log('Processing:', messages[messages.length-1].content.substring(0, 50));
// Call Ollama
const requestData = JSON.stringify({
model: MODEL,
prompt: prompt,
stream: false,
options: { temperature: 0.7, num_predict: 2048 }
});
const options = {
hostname: OLLAMA_HOST,
port: OLLAMA_PORT,
path: '/api/generate',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(requestData)
},
timeout: 120000
};
const proxyReq = http.request(options, (proxyRes) => {
let data = '';
proxyRes.on('data', chunk => data += chunk);
proxyRes.on('end', () => {
try {
const response = JSON.parse(data);
// Return in same format as before for compatibility
res.json({
content: response.response,
done: true
});
} catch (e) {
res.status(500).json({ error: 'Failed to parse response' });
}
});
});
proxyReq.on('error', (e) => {
console.error('Ollama error:', e.message);
res.status(500).json({ error: e.message });
});
proxyReq.write(requestData);
proxyReq.end();
} catch (error) {
console.error('Error:', error.message);
res.status(500).json({ error: error.message });
}
});
app.listen(PORT, () => {
console.log('Tera V2 Ready on port', PORT);
});