update docker, bugfix
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# -------- BASE IMAGE (includes Chromium & deps) ----------------------------
|
# -------- 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 ----------------------------------------------------
|
# -------- Runtime setup ----------------------------------------------------
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|||||||
@@ -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.
|
* **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.
|
* **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ı)
|
* **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.
|
* Karar metinlerinin daha kolay işlenebilmesi için Markdown formatına çevrilmesi.
|
||||||
* Claude Desktop uygulaması ile `fastmcp install` komutu kullanılarak kolay entegrasyon.
|
* 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_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
|
* `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**
|
### **📊 Kapsamlı İstatistikler**
|
||||||
- **Toplam Mahkeme/Kurum:** 12 farklı hukuki kurum
|
- **Toplam Mahkeme/Kurum:** 13 farklı hukuki kurum (KVKK dahil)
|
||||||
- **Toplam MCP Tool:** 36+ arama ve belge getirme aracı
|
- **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)
|
- **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
|
- **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ı)
|
- **Kesin Cümle Arama:** 5 Bedesten API aracında çift tırnak ile tam cümle arama (`"\"mülkiyet kararı\""` formatı)
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ class BedestenSearchDataResponse(BaseModel):
|
|||||||
start: int
|
start: int
|
||||||
|
|
||||||
class BedestenSearchResponse(BaseModel):
|
class BedestenSearchResponse(BaseModel):
|
||||||
data: BedestenSearchDataResponse
|
data: Optional[BedestenSearchDataResponse]
|
||||||
metadata: Dict[str, Any]
|
metadata: Dict[str, Any]
|
||||||
|
|
||||||
# Document Request/Response Models
|
# Document Request/Response Models
|
||||||
|
|||||||
+60
-2
@@ -1553,6 +1553,16 @@ async def search_yargitay_bedesten(
|
|||||||
try:
|
try:
|
||||||
response = await bedesten_client_instance.search_documents(search_request)
|
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 simplified response format
|
||||||
return {
|
return {
|
||||||
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
||||||
@@ -1656,6 +1666,16 @@ async def search_danistay_bedesten(
|
|||||||
try:
|
try:
|
||||||
response = await bedesten_client_instance.search_documents(search_request)
|
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 simplified response format
|
||||||
return {
|
return {
|
||||||
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
||||||
@@ -1749,6 +1769,16 @@ async def search_yerel_hukuk_bedesten(
|
|||||||
try:
|
try:
|
||||||
response = await bedesten_client_instance.search_documents(search_request)
|
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 simplified response format
|
||||||
return {
|
return {
|
||||||
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
||||||
@@ -1857,6 +1887,16 @@ async def search_istinaf_hukuk_bedesten(
|
|||||||
try:
|
try:
|
||||||
response = await bedesten_client_instance.search_documents(search_request)
|
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 simplified response format
|
||||||
return {
|
return {
|
||||||
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
||||||
@@ -1987,6 +2027,16 @@ async def search_kyb_bedesten(
|
|||||||
try:
|
try:
|
||||||
response = await bedesten_client_instance.search_documents(search_request)
|
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 simplified response format
|
||||||
return {
|
return {
|
||||||
"decisions": [d.model_dump() for d in response.data.emsalKararList],
|
"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)
|
# Add results from this court type (limit to top 5 per court)
|
||||||
for decision in search_results.data.emsalKararList[:5]:
|
for decision in search_results.data.emsalKararList[:5]:
|
||||||
# For ChatGPT Deep Research, fetch document content for preview
|
# 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}"
|
"url": f"https://mevzuat.adalet.gov.tr/ictihat/{decision.documentId}"
|
||||||
})
|
})
|
||||||
|
|
||||||
logger.info(f"Found {len(search_results.data.emsalKararList)} results from {court_name}")
|
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:
|
except Exception as e:
|
||||||
logger.warning(f"Bedesten API search error for {court_name}: {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]
|
decision = search_results.data.emsalKararList[0]
|
||||||
if decision.documentId == id:
|
if decision.documentId == id:
|
||||||
# Build a proper title from metadata
|
# Build a proper title from metadata
|
||||||
|
|||||||
Reference in New Issue
Block a user