update docker, bugfix

This commit is contained in:
saidsurucu
2025-07-12 15:25:18 +03:00
parent d590702272
commit 87cf4fd46d
4 changed files with 69 additions and 6 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# -------- BASE IMAGE (includes Chromium & deps) ----------------------------
FROM mcr.microsoft.com/playwright/python:v1.52.0-noble
FROM mcr.microsoft.com/playwright/python:v1.53.0-noble
# -------- Runtime setup ----------------------------------------------------
WORKDIR /app
+7 -2
View File
@@ -26,6 +26,7 @@ Bu proje, çeşitli Türk hukuk kaynaklarına (Yargıtay, Danıştay, Emsal Kara
* **KİK (Kamu İhale Kurulu):** Çeşitli kriterlerle Kurul kararlarını arama; uzun karar metinlerini (varsayılan 5.000 karakterlik) sayfalanmış Markdown formatında getirme.
* **Rekabet Kurumu:** Çeşitli kriterlerle Kurul kararlarını arama; karar metinlerini Markdown formatında getirme.
* **Sayıştay:** 3 karar türü ile kapsamlı denetim kararlarına erişim + **8 Daire Filtreleme** + **Tarih Aralığı & İçerik Arama** (Genel Kurul yorumlayıcı kararları, Temyiz Kurulu itiraz kararları, Daire ilk derece denetim kararları)
* **KVKK (Kişisel Verilerin Korunması Kurulu):** Brave Search API ile veri koruma kararlarını arama; uzun karar metinlerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme + **Türkçe Arama** + **Site Hedeflemeli Arama** (kvkk.gov.tr kararları)
* Karar metinlerinin daha kolay işlenebilmesi için Markdown formatına çevrilmesi.
* Claude Desktop uygulaması ile `fastmcp install` komutu kullanılarak kolay entegrasyon.
@@ -186,12 +187,16 @@ Bu FastMCP sunucusu aşağıdaki temel araçları sunar:
* `get_sayistay_temyiz_kurulu_document_markdown(decision_id: str)`: Temyiz Kurulu kararının tam metnini Markdown formatında getirir
* `get_sayistay_daire_document_markdown(decision_id: str)`: Daire kararının tam metnini Markdown formatında getirir
* **KVKK Araçları (Brave Search API + Türkçe Arama):**
* `search_kvkk_decisions(keywords, page, pageSize, ...)`: KVKK (Kişisel Verilerin Korunması Kurulu) kararlarını Brave Search API ile arar. **Türkçe arama** + **Site hedeflemeli** (`site:kvkk.gov.tr "karar özeti"`) + **Sayfalama desteği**
* `get_kvkk_document_markdown(decision_url: str, page_number: Optional[int] = 1)`: KVKK kararının tam metnini **sayfalanmış Markdown** formatında getirir (5.000 karakterlik sayfa)
---
### **📊 Kapsamlı İstatistikler**
- **Toplam Mahkeme/Kurum:** 12 farklı hukuki kurum
- **Toplam MCP Tool:** 36+ arama ve belge getirme aracı
- **Toplam Mahkeme/Kurum:** 13 farklı hukuki kurum (KVKK dahil)
- **Toplam MCP Tool:** 38+ arama ve belge getirme aracı
- **Daire/Kurul Filtreleme:** 87 farklı seçenek (52 Yargıtay + 27 Danıştay + 8 Sayıştay)
- **Tarih Filtreleme:** 5 Bedesten API aracında ISO 8601 formatında tam tarih aralığı desteği
- **Kesin Cümle Arama:** 5 Bedesten API aracında çift tırnak ile tam cümle arama (`"\"mülkiyet kararı\""` formatı)
+1 -1
View File
@@ -125,7 +125,7 @@ class BedestenSearchDataResponse(BaseModel):
start: int
class BedestenSearchResponse(BaseModel):
data: BedestenSearchDataResponse
data: Optional[BedestenSearchDataResponse]
metadata: Dict[str, Any]
# Document Request/Response Models
+59 -1
View File
@@ -1553,6 +1553,16 @@ async def search_yargitay_bedesten(
try:
response = await bedesten_client_instance.search_documents(search_request)
# Handle potential None data
if response.data is None:
return {
"decisions": [],
"total_records": 0,
"requested_page": pageNumber,
"page_size": pageSize,
"error": "No data returned from Bedesten API"
}
# Return simplified response format
return {
"decisions": [d.model_dump() for d in response.data.emsalKararList],
@@ -1656,6 +1666,16 @@ async def search_danistay_bedesten(
try:
response = await bedesten_client_instance.search_documents(search_request)
# Handle potential None data
if response.data is None:
return {
"decisions": [],
"total_records": 0,
"requested_page": pageNumber,
"page_size": pageSize,
"error": "No data returned from Bedesten API"
}
# Return simplified response format
return {
"decisions": [d.model_dump() for d in response.data.emsalKararList],
@@ -1749,6 +1769,16 @@ async def search_yerel_hukuk_bedesten(
try:
response = await bedesten_client_instance.search_documents(search_request)
# Handle potential None data
if response.data is None:
return {
"decisions": [],
"total_records": 0,
"requested_page": pageNumber,
"page_size": pageSize,
"error": "No data returned from Bedesten API"
}
# Return simplified response format
return {
"decisions": [d.model_dump() for d in response.data.emsalKararList],
@@ -1857,6 +1887,16 @@ async def search_istinaf_hukuk_bedesten(
try:
response = await bedesten_client_instance.search_documents(search_request)
# Handle potential None data
if response.data is None:
return {
"decisions": [],
"total_records": 0,
"requested_page": pageNumber,
"page_size": pageSize,
"error": "No data returned from Bedesten API"
}
# Return simplified response format
return {
"decisions": [d.model_dump() for d in response.data.emsalKararList],
@@ -1987,6 +2027,16 @@ async def search_kyb_bedesten(
try:
response = await bedesten_client_instance.search_documents(search_request)
# Handle potential None data
if response.data is None:
return {
"decisions": [],
"total_records": 0,
"requested_page": pageNumber,
"page_size": pageSize,
"error": "No data returned from Bedesten API"
}
# Return simplified response format
return {
"decisions": [d.model_dump() for d in response.data.emsalKararList],
@@ -2828,6 +2878,11 @@ async def search(
)
)
# Handle potential None data
if search_results.data is None:
logger.warning(f"No data returned from Bedesten API for {court_name}")
continue
# Add results from this court type (limit to top 5 per court)
for decision in search_results.data.emsalKararList[:5]:
# For ChatGPT Deep Research, fetch document content for preview
@@ -2872,7 +2927,10 @@ async def search(
"url": f"https://mevzuat.adalet.gov.tr/ictihat/{decision.documentId}"
})
if search_results.data:
logger.info(f"Found {len(search_results.data.emsalKararList)} results from {court_name}")
else:
logger.info(f"Found 0 results from {court_name} (no data returned)")
except Exception as e:
logger.warning(f"Bedesten API search error for {court_name}: {e}")
@@ -2980,7 +3038,7 @@ async def fetch(
)
)
if search_results.data.emsalKararList:
if search_results.data and search_results.data.emsalKararList:
decision = search_results.data.emsalKararList[0]
if decision.documentId == id:
# Build a proper title from metadata