Initial commit
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import { Request, Response } from 'express';
|
||||
|
||||
export const searchPrecedents = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { phrase, court_types, page_number } = req.body;
|
||||
|
||||
if (!phrase) {
|
||||
return res.status(400).json({ error: 'Arama metni (phrase) zorunludur.' });
|
||||
}
|
||||
|
||||
let optimizedPhrase = phrase;
|
||||
|
||||
// Eğer sorgu 3 kelimeden uzunsa (doğal dil sorusu ise), AI ile anahtar kelimelere dönüştür
|
||||
if (phrase.split(' ').length > 3) {
|
||||
const aiModel = process.env.AI_MODEL || 'mizan-fixed';
|
||||
const runpodUrl = process.env.RUNPOD_API_BASE_URL || 'https://q190env94stwis-11434.proxy.runpod.net';
|
||||
|
||||
const systemPrompt = `Sen uzman bir Türk avukatısın. Kullanıcının uzun ve doğal dille yazdığı hukuki soruyu, Yargıtay içtihat arama motorunda en iyi sonucu verecek şekilde 2 ila en fazla 4 temel hukuki terime/anahtar kelimeye çevir.
|
||||
SADECE anahtar kelimeleri aralarına boşluk koyarak yaz. Noktalama işareti, açıklama veya ek kelimeler (ve, ile, vb.) kullanma.
|
||||
Örnek Kullanıcı: İşveren tarafından performans düşüklüğü gerekçesiyle iş sözleşmesi feshedilen işçinin işe iade davası açması halinde ispat yükü kime aittir
|
||||
Örnek Cevap: performans düşüklüğü ispat yükü işe iade`;
|
||||
|
||||
try {
|
||||
const aiResponse = await fetch(`${runpodUrl}/v1/chat/completions`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
model: aiModel,
|
||||
messages: [
|
||||
{ role: 'system', content: systemPrompt },
|
||||
{ role: 'user', content: phrase }
|
||||
],
|
||||
think: false,
|
||||
stream: false,
|
||||
}),
|
||||
});
|
||||
|
||||
if (aiResponse.ok) {
|
||||
const data = await aiResponse.json();
|
||||
const aiContent = data.message?.content || (data.choices && data.choices[0]?.message?.content);
|
||||
if (aiContent) {
|
||||
optimizedPhrase = aiContent.trim().replace(/["'\n]/g, '');
|
||||
console.log(`[AI Search] Orijinal: "${phrase}" -> Optimize: "${optimizedPhrase}"`);
|
||||
}
|
||||
} else {
|
||||
console.error('AI Query Optimization API returned status:', aiResponse.status);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('AI Query Optimization Fetch Error:', err);
|
||||
}
|
||||
}
|
||||
|
||||
// Yargı MCP REST API'sine (8001 portu veya YARGI_MCP_URL) optimize edilmiş sorgu ile istek at
|
||||
const mcpBaseUrl = process.env.YARGI_MCP_URL || 'http://localhost:8001';
|
||||
const mcpResponse = await fetch(`${mcpBaseUrl}/search`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
phrase: optimizedPhrase,
|
||||
court_types: court_types || ["YARGITAYKARARI", "DANISTAYKARAR"],
|
||||
page_number: page_number || 1
|
||||
})
|
||||
});
|
||||
|
||||
if (!mcpResponse.ok) {
|
||||
const errorData = await mcpResponse.text();
|
||||
console.error('Yargı MCP API Error:', errorData);
|
||||
return res.status(mcpResponse.status).json({ error: 'Arama servisi hata döndürdü', details: errorData });
|
||||
}
|
||||
|
||||
const data = await mcpResponse.json();
|
||||
res.json(data);
|
||||
} catch (error: any) {
|
||||
console.error('Search Precedents Error:', error);
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
|
||||
export const getPrecedentDocument = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const documentId = String(req.params.documentId || '');
|
||||
|
||||
if (!documentId) {
|
||||
return res.status(400).json({ error: 'documentId zorunludur.' });
|
||||
}
|
||||
|
||||
const mcpBaseUrl = process.env.YARGI_MCP_URL || 'http://localhost:8001';
|
||||
const mcpResponse = await fetch(`${mcpBaseUrl}/document/${encodeURIComponent(documentId)}`);
|
||||
|
||||
if (!mcpResponse.ok) {
|
||||
const errorData = await mcpResponse.text();
|
||||
console.error('Yargı MCP API Error:', errorData);
|
||||
return res.status(mcpResponse.status).json({ error: 'Belge servisi hata döndürdü', details: errorData });
|
||||
}
|
||||
|
||||
const data = await mcpResponse.json();
|
||||
res.json(data);
|
||||
} catch (error: any) {
|
||||
console.error('Get Precedent Document Error:', error);
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user