2026-04-10 23:20:41 -04:00
---
layout: default
title: "Python API Yeniden Düzenleme Teknik Özellikleri"
parent: "Turkish (Beta)"
---
2026-04-11 01:08:44 +00:00
# Python API Yeniden Düzenleme Teknik Özellikleri
2026-04-10 23:20:41 -04:00
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
2026-04-11 01:08:44 +00:00
## Genel Bakı ş
Bu özellik, TrustGraph Python API istemci kitaplı ğı nı n, API Gateway ile özellik uyumluluğu sağlamak ve modern gerçek zamanlı iletişim kalı pları na destek eklemek için kapsamlı bir şekilde yeniden düzenlenmesini açı klamaktadı r.
Bu yeniden düzenleme, dört birincil kullanı m durumunu ele almaktadı r:
1. **Akı şlı LLM Etkileşimleri** : LLM yanı tları nı n (ajan, grafik RAG, belge RAG, metin tamamlama, istemler) gerçek zamanlı olarak akı şı nı etkinleştirin ve ilk belirteç için ~60 kat daha düşük gecikme süresi sağlayı n (30 saniye yerine 500 ms).
2. **Toplu Veri İşlemleri** : Büyük ölçekli bilgi grafiği yönetimi için üçlülerin, grafik gömülme ve belge gömülme verilerinin verimli toplu olarak aktarı lması nı ve dı şa aktarı lması nı destekleyin.
3. **Özellik Uyumluluğu** : Her API Gateway uç noktası nı n, grafik gömülme sorgusu da dahil olmak üzere, karşı lı k gelen bir Python API yöntemine sahip olduğundan emin olun.
4. **Sürekli Bağlantı lar** : Çoklu istekler ve azaltı lmı ş bağlantı yükü için WebSocket tabanlı iletişimi etkinleştirin.
## Hedefler
**Özellik Uyumluluğu**: Her Gateway API hizmetinin karşı lı k gelen bir Python API yöntemi vardı r.
**Akı ş Desteği**: Tüm akı ş özellikli hizmetler (ajan, RAG, metin tamamlama, istem), Python API'de akı şı destekler.
**WebSocket Taşı yı cı Katmanı **: Kalı cı bağlantı lar ve çoklama için isteğe bağlı bir WebSocket taşı yı cı katmanı ekleyin.
**Toplu İşlemler**: Üçlüler, grafik gömülme ve belge gömülme için verimli toplu aktarı m/dı şa aktarma ekleyin.
**Tam Asenkron Desteği**: Tüm arayüzler (REST, WebSocket, toplu işlemler, ölçümler) için eksiksiz asenkron/bekleme uygulaması .
**Geriye Dönük Uyumluluk**: Mevcut kod, herhangi bir değişiklik yapı lmadan çalı şmaya devam eder.
**Tip Güvenliği**: Veri sı nı fları ve tip ipuçları yla tip güvenli arayüzleri koruyun.
**Aşamalı Geliştirme**: Akı ş ve asenkron, açı k arayüz seçimi yoluyla isteğe bağlı dı r.
**Performans**: Akı ş işlemlerinde 60 kat gecikme iyileştirmesi elde edin.
**Modern Python**: Maksimum esneklik için hem senkron hem de asenkron paradigmaları destekleyin.
## Arka Plan
### Mevcut Durum
Python API'si (`trustgraph-base/trustgraph/api/` ), aşağı daki modüllere sahip REST tabanlı bir istemci kitaplı ğı dı r:
`flow.py` : Akı ş yönetimi ve akı ş kapsamlı hizmetler (50 yöntem)
`library.py` : Belge kitaplı ğı işlemleri (9 yöntem)
`knowledge.py` : KG çekirdek yönetimi (4 yöntem)
`collection.py` : Koleksiyon meta verileri (3 yöntem)
`config.py` : Yapı landı rma yönetimi (6 yöntem)
`types.py` : Veri türü tanı mları (5 veri sı nı fı )
**Toplam İşlem**: 50/59 (%85 kapsama)
### Mevcut Sı nı rlamalar
**Eksik İşlemler**:
Grafik gömülme sorgusu (grafik varlı kları üzerindeki semantik arama)
Üçlüler, grafik gömülme, belge gömülme, varlı k bağlamları , nesneler için toplu aktarı m/dı şa aktarma
Ölçüm uç noktası
**Eksik Yetenekler**:
LLM hizmetleri için akı ş desteği
WebSocket taşı yı cı sı
Çoklu eşzamanlı istekler
Kalı cı bağlantı lar
**Performans Sorunları **:
LLM etkileşimleri için yüksek gecikme süresi (~30 saniye ilk belirteç)
Toplu veri aktarı mı için verimsiz (her öğe için REST isteği)
Birden çok sı ralı işlem için bağlantı yükü
**Kullanı cı Deneyimi Sorunları **:
LLM oluşturma sı rası nda gerçek zamanlı geri bildirim yok
Uzun süren LLM işlemlerini iptal edememe
Toplu işlemler için zayı f ölçeklenebilirlik
### Etki
Kası m 2024'te Gateway API'ye yapı lan akı ş geliştirmesi, LLM etkileşimleri için 60 kat gecikme iyileştirmesi (30 saniye yerine 500 ms ilk belirteç) sağladı , ancak Python API kullanı cı ları bu yeteneği kullanamı yor. Bu, Python ve Python dı şı kullanı cı lar arası nda önemli bir deneyim boşluğuna yol açmaktadı r.
## Teknik Tasarı m
### Mimari
Yeniden düzenlenmiş Python API'si, farklı iletişim kalı pları için ayrı nesneler kullanan **modüler bir arayüz yaklaşı mı ** kullanı r. Tüm arayüzler hem **senkron hem de asenkron** varyantlarda mevcuttur:
1. **REST Arayüzü** (mevcut, geliştirilmiş)
**Senkron** : `api.flow()` , `api.library()` , `api.knowledge()` , `api.collection()` , `api.config()`
**Asenkron** : `api.async_flow()`
Senkron/asenkron istek/yanı t
Basit bağlantı modeli
Geriye dönük uyumluluk için varsayı lan
2. **WebSocket Arayüzü** (yeni)
**Senkron** : `api.socket()`
**Asenkron** : `api.async_socket()`
Kalı cı bağlantı
Çoklu istekler
Akı ş desteği
İşlevselliğin örtüştüğü yerlerde REST ile aynı yöntem imzaları
3. **Toplu İşlemler Arayüzü** (yeni)
**Senkron** : `api.bulk()`
**Asenkron** : `api.async_bulk()`
Verimlilik için WebSocket tabanlı
Iterator/AsyncIterator tabanlı aktarı m/dı şa aktarma
Büyük veri kümelerini işler
4. **Ölçüm Arayüzü** (yeni)
**Senkron** : `api.metrics()`
**Asenkron** : `api.async_metrics()`
Prometheus ölçümleri erişimi
```python
import asyncio
# Synchronous interfaces
api = Api(url="http://localhost:8088/")
# REST (existing, unchanged)
flow = api.flow().id("default")
response = flow.agent(question="...", user="...")
# WebSocket (new)
socket_flow = api.socket().flow("default")
response = socket_flow.agent(question="...", user="...")
for chunk in socket_flow.agent(question="...", user="...", streaming=True):
print(chunk)
# Bulk operations (new)
bulk = api.bulk()
bulk.import_triples(flow="default", triples=triple_generator())
# Asynchronous interfaces
async def main():
api = Api(url="http://localhost:8088/")
# Async REST (new)
flow = api.async_flow().id("default")
response = await flow.agent(question="...", user="...")
# Async WebSocket (new)
socket_flow = api.async_socket().flow("default")
async for chunk in socket_flow.agent(question="...", streaming=True):
print(chunk)
# Async bulk operations (new)
bulk = api.async_bulk()
await bulk.import_triples(flow="default", triples=async_triple_generator())
asyncio.run(main())
```
**Temel Tasarı m Prensipleri**:
**Tüm arayüzler için aynı URL**: `Api(url="http://localhost:8088/")` , tüm arayüzler için geçerlidir.
**Senkron/Asenkron simetri**: Her arayüzün hem senkron hem de asenkron varyantları vardı r ve yöntem imzaları aynı dı r.
**Aynı imzalar**: İşlevsellik örtüşüyorsa, REST ve WebSocket, senkron ve asenkron arası nda yöntem imzaları aynı dı r.
**Aşamalı iyileştirme**: İhtiyaçlara göre arayüzü seçin (basit işlemler için REST, akı ş için WebSocket, büyük veri kümeleri için Bulk, modern çerçeveler için asenkron).
**Açı k niyet**: `api.socket()` , WebSocket'i belirtir, `api.async_socket()` , asenkron WebSocket'i belirtir.
**Geriye uyumlu**: Mevcut kod değişmeden kalı r.
### Bileşenler
#### 1. Temel API Sı nı fı (Değiştirilmiş)
Modül: `trustgraph-base/trustgraph/api/api.py`
**Geliştirilmiş API Sı nı fı **:
```python
class Api:
def __init__ (self, url: str, timeout: int = 60, token: Optional[str] = None):
self.url = url
self.timeout = timeout
self.token = token # Optional bearer token for REST, query param for WebSocket
self._socket_client = None
self._bulk_client = None
self._async_flow = None
self._async_socket_client = None
self._async_bulk_client = None
# Existing synchronous methods (unchanged)
def flow(self) -> Flow:
"""Synchronous REST-based flow interface"""
pass
def library(self) -> Library:
"""Synchronous REST-based library interface"""
pass
def knowledge(self) -> Knowledge:
"""Synchronous REST-based knowledge interface"""
pass
def collection(self) -> Collection:
"""Synchronous REST-based collection interface"""
pass
def config(self) -> Config:
"""Synchronous REST-based config interface"""
pass
# New synchronous methods
def socket(self) -> SocketClient:
"""Synchronous WebSocket-based interface for streaming operations"""
if self._socket_client is None:
self._socket_client = SocketClient(self.url, self.timeout, self.token)
return self._socket_client
def bulk(self) -> BulkClient:
"""Synchronous bulk operations interface for import/export"""
if self._bulk_client is None:
self._bulk_client = BulkClient(self.url, self.timeout, self.token)
return self._bulk_client
def metrics(self) -> Metrics:
"""Synchronous metrics interface"""
return Metrics(self.url, self.timeout, self.token)
# New asynchronous methods
def async_flow(self) -> AsyncFlow:
"""Asynchronous REST-based flow interface"""
if self._async_flow is None:
self._async_flow = AsyncFlow(self.url, self.timeout, self.token)
return self._async_flow
def async_socket(self) -> AsyncSocketClient:
"""Asynchronous WebSocket-based interface for streaming operations"""
if self._async_socket_client is None:
self._async_socket_client = AsyncSocketClient(self.url, self.timeout, self.token)
return self._async_socket_client
def async_bulk(self) -> AsyncBulkClient:
"""Asynchronous bulk operations interface for import/export"""
if self._async_bulk_client is None:
self._async_bulk_client = AsyncBulkClient(self.url, self.timeout, self.token)
return self._async_bulk_client
def async_metrics(self) -> AsyncMetrics:
"""Asynchronous metrics interface"""
return AsyncMetrics(self.url, self.timeout, self.token)
# Resource management
def close(self) -> None:
"""Close all synchronous connections"""
if self._socket_client:
self._socket_client.close()
if self._bulk_client:
self._bulk_client.close()
async def aclose(self) -> None:
"""Close all asynchronous connections"""
if self._async_socket_client:
await self._async_socket_client.aclose()
if self._async_bulk_client:
await self._async_bulk_client.aclose()
if self._async_flow:
await self._async_flow.aclose()
def __enter__ (self):
return self
def __exit__ (self, *args):
self.close()
async def __aenter__ (self):
return self
async def __aexit__ (self, *args):
await self.aclose()
```
#### 2. Senkron WebSocket İstemcisi
Modül: `trustgraph-base/trustgraph/api/socket_client.py` (yeni)
**SocketClient Sı nı fı **:
```python
class SocketClient:
"""Synchronous WebSocket client"""
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = self._convert_to_ws_url(url)
self.timeout = timeout
self.token = token
self._connection = None
self._request_counter = 0
def flow(self, flow_id: str) -> SocketFlowInstance:
"""Get flow instance for WebSocket operations"""
return SocketFlowInstance(self, flow_id)
def _connect(self) -> WebSocket:
"""Establish WebSocket connection (lazy)"""
# Uses asyncio.run() internally to wrap async websockets library
pass
def _send_request(
self,
service: str,
flow: Optional[str],
request: Dict[str, Any],
streaming: bool = False
) -> Union[Dict[str, Any], Iterator[Dict[str, Any]]]:
"""Send request and handle response/streaming"""
# Synchronous wrapper around async WebSocket calls
pass
def close(self) -> None:
"""Close WebSocket connection"""
pass
class SocketFlowInstance:
"""Synchronous WebSocket flow instance with same interface as REST FlowInstance"""
def __init__ (self, client: SocketClient, flow_id: str):
self.client = client
self.flow_id = flow_id
# Same method signatures as FlowInstance
def agent(
self,
question: str,
user: str,
state: Optional[Dict[str, Any]] = None,
group: Optional[str] = None,
history: Optional[List[Dict[str, Any]]] = None,
streaming: bool = False,
**kwargs
) -> Union[Dict[str, Any], Iterator[Dict[str, Any]]]:
"""Agent with optional streaming"""
pass
def text_completion(
self,
system: str,
prompt: str,
streaming: bool = False,
**kwargs
) -> Union[str, Iterator[str]]:
"""Text completion with optional streaming"""
pass
# ... similar for graph_rag, document_rag, prompt, etc.
```
**Temel Özellikler**:
Tembel bağlantı (yalnı zca ilk istek gönderildiğinde bağlantı kurulur)
İstek çoklama (en fazla 15 eşzamanlı )
Bağlantı kesildiğinde otomatik yeniden bağlanma
Akı ş yanı tı ayrı ştı rma
İş parçacı ğı güvenli çalı şma
Asenkron WebSocket kütüphanesi için senkron sarmalayı cı
#### 3. Asenkron WebSocket İstemcisi
Modül: `trustgraph-base/trustgraph/api/async_socket_client.py` (yeni)
**AsyncSocketClient Sı nı fı **:
```python
class AsyncSocketClient:
"""Asynchronous WebSocket client"""
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = self._convert_to_ws_url(url)
self.timeout = timeout
self.token = token
self._connection = None
self._request_counter = 0
def flow(self, flow_id: str) -> AsyncSocketFlowInstance:
"""Get async flow instance for WebSocket operations"""
return AsyncSocketFlowInstance(self, flow_id)
async def _connect(self) -> WebSocket:
"""Establish WebSocket connection (lazy)"""
# Native async websockets library
pass
async def _send_request(
self,
service: str,
flow: Optional[str],
request: Dict[str, Any],
streaming: bool = False
) -> Union[Dict[str, Any], AsyncIterator[Dict[str, Any]]]:
"""Send request and handle response/streaming"""
pass
async def aclose(self) -> None:
"""Close WebSocket connection"""
pass
class AsyncSocketFlowInstance:
"""Asynchronous WebSocket flow instance"""
def __init__ (self, client: AsyncSocketClient, flow_id: str):
self.client = client
self.flow_id = flow_id
# Same method signatures as FlowInstance (but async)
async def agent(
self,
question: str,
user: str,
state: Optional[Dict[str, Any]] = None,
group: Optional[str] = None,
history: Optional[List[Dict[str, Any]]] = None,
streaming: bool = False,
**kwargs
) -> Union[Dict[str, Any], AsyncIterator[Dict[str, Any]]]:
"""Agent with optional streaming"""
pass
async def text_completion(
self,
system: str,
prompt: str,
streaming: bool = False,
**kwargs
) -> Union[str, AsyncIterator[str]]:
"""Text completion with optional streaming"""
pass
# ... similar for graph_rag, document_rag, prompt, etc.
```
**Temel Özellikler**:
Yerleşik async/await desteği
Asenkron uygulamalar için verimli (FastAPI, aiohttp)
İş parçacı ğı engellemesi yok
Senkron sürümle aynı arayüz
Akı ş için AsyncIterator
#### 4. Senkron Toplu İşlemler İstemcisi
Modül: `trustgraph-base/trustgraph/api/bulk_client.py` (yeni)
**BulkClient Sı nı fı **:
```python
class BulkClient:
"""Synchronous bulk operations client"""
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = self._convert_to_ws_url(url)
self.timeout = timeout
self.token = token
def import_triples(
self,
flow: str,
triples: Iterator[Triple],
**kwargs
) -> None:
"""Bulk import triples via WebSocket"""
pass
def export_triples(
self,
flow: str,
**kwargs
) -> Iterator[Triple]:
"""Bulk export triples via WebSocket"""
pass
def import_graph_embeddings(
self,
flow: str,
embeddings: Iterator[Dict[str, Any]],
**kwargs
) -> None:
"""Bulk import graph embeddings via WebSocket"""
pass
def export_graph_embeddings(
self,
flow: str,
**kwargs
) -> Iterator[Dict[str, Any]]:
"""Bulk export graph embeddings via WebSocket"""
pass
# ... similar for document embeddings, entity contexts, objects
def close(self) -> None:
"""Close connections"""
pass
```
**Temel Özellikler**:
Sabit bellek kullanı mı için yineleyici tabanlı .
Her işlem için özel WebSocket bağlantı ları .
İlerleme takibi (isteğe bağlı geri çağı rma).
Kı smi başarı raporlaması yla hata yönetimi.
#### 5. Asenkron Toplu İşlemler İstemcisi
Modül: `trustgraph-base/trustgraph/api/async_bulk_client.py` (yeni)
**AsyncBulkClient Sı nı fı **:
```python
class AsyncBulkClient:
"""Asynchronous bulk operations client"""
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = self._convert_to_ws_url(url)
self.timeout = timeout
self.token = token
async def import_triples(
self,
flow: str,
triples: AsyncIterator[Triple],
**kwargs
) -> None:
"""Bulk import triples via WebSocket"""
pass
async def export_triples(
self,
flow: str,
**kwargs
) -> AsyncIterator[Triple]:
"""Bulk export triples via WebSocket"""
pass
async def import_graph_embeddings(
self,
flow: str,
embeddings: AsyncIterator[Dict[str, Any]],
**kwargs
) -> None:
"""Bulk import graph embeddings via WebSocket"""
pass
async def export_graph_embeddings(
self,
flow: str,
**kwargs
) -> AsyncIterator[Dict[str, Any]]:
"""Bulk export graph embeddings via WebSocket"""
pass
# ... similar for document embeddings, entity contexts, objects
async def aclose(self) -> None:
"""Close connections"""
pass
```
**Temel Özellikler**:
Sabit bellek kullanı mı için AsyncIterator tabanlı .
Asenkron uygulamalar için verimli.
Yerel asenkron/bekle destek.
Senkron sürümle aynı arayüz.
#### 6. REST Akı şı API'si (Senkron - Değişmedi)
Modül: `trustgraph-base/trustgraph/api/flow.py`
REST Akı şı API'si, geriye dönük uyumluluk için **tamamen değişmeden** kalmı ştı r. Tüm mevcut yöntemler çalı şmaya devam etmektedir:
`Flow.list()` , `Flow.start()` , `Flow.stop()` , vb.
`FlowInstance.agent()` , `FlowInstance.text_completion()` , `FlowInstance.graph_rag()` , vb.
Tüm mevcut imzalar ve dönüş türleri korunmuştur.
**Yeni**: Özellik uyumluluğu için `graph_embeddings_query()` 'ı REST FlowInstance'a ekleyin:
```python
class FlowInstance:
# All existing methods unchanged...
# New: Graph embeddings query (REST)
def graph_embeddings_query(
self,
text: str,
user: str,
collection: str,
limit: int = 10,
**kwargs
) -> List[Dict[str, Any]]:
"""Query graph embeddings for semantic search"""
# Calls POST /api/v1/flow/{flow}/service/graph-embeddings
pass
```
#### 7. Asenkron REST Akı şı API'si
Modül: `trustgraph-base/trustgraph/api/async_flow.py` (yeni)
**AsyncFlow ve AsyncFlowInstance Sı nı fları :**
```python
class AsyncFlow:
"""Asynchronous REST-based flow interface"""
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = url
self.timeout = timeout
self.token = token
async def list(self) -> List[Dict[str, Any]]:
"""List all flows"""
pass
async def get(self, id: str) -> Dict[str, Any]:
"""Get flow definition"""
pass
async def start(self, class_name: str, id: str, description: str, parameters: Dict) -> None:
"""Start a flow"""
pass
async def stop(self, id: str) -> None:
"""Stop a flow"""
pass
def id(self, flow_id: str) -> AsyncFlowInstance:
"""Get async flow instance"""
return AsyncFlowInstance(self.url, self.timeout, self.token, flow_id)
async def aclose(self) -> None:
"""Close connection"""
pass
class AsyncFlowInstance:
"""Asynchronous REST flow instance"""
async def agent(
self,
question: str,
user: str,
state: Optional[Dict[str, Any]] = None,
group: Optional[str] = None,
history: Optional[List[Dict[str, Any]]] = None,
**kwargs
) -> Dict[str, Any]:
"""Async agent execution"""
pass
async def text_completion(
self,
system: str,
prompt: str,
**kwargs
) -> str:
"""Async text completion"""
pass
async def graph_rag(
self,
question: str,
user: str,
collection: str,
**kwargs
) -> str:
"""Async graph RAG"""
pass
# ... all other FlowInstance methods as async versions
```
**Temel Özellikler**:
`aiohttp` veya `httpx` kullanarak yerel asenkron HTTP
Senkron REST API'si ile aynı yöntem imzaları
Akı ş yok (akı ş için `async_socket()` 'ı kullanı n)
Asenkron uygulamalar için verimli
#### 8. Ölçüm API'si
Modül: `trustgraph-base/trustgraph/api/metrics.py` (yeni)
**Senkron Ölçümler**:
```python
class Metrics:
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = url
self.timeout = timeout
self.token = token
def get(self) -> str:
"""Get Prometheus metrics as text"""
# Call GET /api/metrics
pass
```
**Asenkron Metrikler**:
```python
class AsyncMetrics:
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = url
self.timeout = timeout
self.token = token
async def get(self) -> str:
"""Get Prometheus metrics as text"""
# Call GET /api/metrics
pass
```
#### 9. Gelişmiş Tipler
Modül: `trustgraph-base/trustgraph/api/types.py` (değiştirildi)
**Yeni Tipler**:
```python
from typing import Iterator, Union, Dict, Any
import dataclasses
@dataclasses .dataclass
class StreamingChunk:
"""Base class for streaming chunks"""
content: str
end_of_message: bool = False
@dataclasses .dataclass
class AgentThought(StreamingChunk):
"""Agent reasoning chunk"""
chunk_type: str = "thought"
@dataclasses .dataclass
class AgentObservation(StreamingChunk):
"""Agent tool observation chunk"""
chunk_type: str = "observation"
@dataclasses .dataclass
class AgentAnswer(StreamingChunk):
"""Agent final answer chunk"""
chunk_type: str = "final-answer"
end_of_dialog: bool = False
@dataclasses .dataclass
class RAGChunk(StreamingChunk):
"""RAG streaming chunk"""
end_of_stream: bool = False
error: Optional[Dict[str, str]] = None
# Type aliases for clarity
AgentStream = Iterator[Union[AgentThought, AgentObservation, AgentAnswer]]
RAGStream = Iterator[RAGChunk]
CompletionStream = Iterator[str]
```
#### 6. Metrik API
Modül: `trustgraph-base/trustgraph/api/metrics.py` (yeni)
```python
class Metrics:
def __init__ (self, url: str, timeout: int, token: Optional[str]):
self.url = url
self.timeout = timeout
self.token = token
def get(self) -> str:
"""Get Prometheus metrics as text"""
# Call GET /api/metrics
pass
```
### Uygulama Yaklaşı mı
#### 1. Aşama: Temel API Geliştirmeleri (1. Hafta)
1. `socket()` , `bulk()` ve `metrics()` yöntemlerini `Api` sı nı fı na ekleyin
2. WebSocket ve toplu iş yükleri için tembel başlatmayı uygulayı n
3. Bağlam yöneticisi desteğini ekleyin (`__enter__` , `__exit__` )
4. Temizleme için `close()` yöntemini ekleyin
5. API sı nı fı geliştirmeleri için birim testleri ekleyin
6. Geriye dönük uyumluluğu doğrulayı n
**Geriye Dönük Uyumluluk**: Herhangi bir uyumsuz değişiklik yok. Sadece yeni yöntemler.
#### 2. Aşama: WebSocket İstemcisi (2-3. Haftalar)
1. Bağlantı yönetimi için `SocketClient` sı nı fı nı uygulayı n
2. `SocketFlowInstance` 'ı `FlowInstance` ile aynı yöntem imzaları na sahip olacak şekilde uygulayı n
3. İstek çoklama desteğini ekleyin (en fazla 15 eşzamanlı )
4. Farklı parça türleri için akı ş yanı tı ayrı ştı rması nı ekleyin
5. Otomatik yeniden bağlantı mantı ğı nı ekleyin
6. Birim ve entegrasyon testlerini ekleyin
7. WebSocket kullanı m kalı pları nı belgeleyin
**Geriye Dönük Uyumluluk**: Sadece yeni bir arayüz. Mevcut kod üzerinde hiçbir etkisi yok.
#### 3. Aşama: Akı ş Desteği (3-4. Haftalar)
1. Akı ş parça türü sı nı fları nı ekleyin (`AgentThought` , `AgentObservation` , `AgentAnswer` , `RAGChunk` )
2. `SocketClient` içinde akı ş yanı tı ayrı ştı rması nı uygulayı n
3. `SocketFlowInstance` içindeki tüm LLM yöntemlerine akı ş parametresini ekleyin
4. Akı ş sı rası nda hata durumları nı işleyin
5. Akı ş için birim ve entegrasyon testlerini ekleyin
6. Belgelerdeki akı ş örneklerini ekleyin
**Geriye Dönük Uyumluluk**: Sadece yeni bir arayüz. Mevcut REST API değişmedi.
#### 4. Aşama: Toplu İşlemler (4-5. Haftalar)
1. `BulkClient` sı nı fı nı uygulayı n
2. Üçlüler, gömülü veriler, bağlamlar, nesneler için toplu içe/dı şa aktarma yöntemlerini ekleyin
3. Sabit bellek için yineleyici tabanlı işleme uygulayı n
4. İlerleme takibini ekleyin (isteğe bağlı geri çağı rma)
5. Kı smi başarı raporlaması yla hata işleme ekleyin
6. Birim ve entegrasyon testlerini ekleyin
7. Toplu işlem örneklerini ekleyin
**Geriye Dönük Uyumluluk**: Sadece yeni bir arayüz. Mevcut kod üzerinde hiçbir etkisi yok.
#### 5. Aşama: Özellik Eşitliği ve İyileştirmeler (5. Hafta)
1. REST `FlowInstance` 'ine `graph_embeddings_query()` 'ı ekleyin
2. `Metrics` sı nı fı nı uygulayı n
3. Kapsamlı entegrasyon testlerini ekleyin
4. Performans karşı laştı rması
5. Tüm belgeleri güncelleyin
6. Geçiş kı lavuzu oluşturun
**Geriye Dönük Uyumluluk**: Sadece yeni yöntemler. Mevcut kod üzerinde hiçbir etkisi yok.
### Veri Modelleri
#### Arayüz Seçimi
```python
# Single API instance, same URL for all interfaces
api = Api(url="http://localhost:8088/")
# Synchronous interfaces
rest_flow = api.flow().id("default") # Sync REST
socket_flow = api.socket().flow("default") # Sync WebSocket
bulk = api.bulk() # Sync bulk operations
metrics = api.metrics() # Sync metrics
# Asynchronous interfaces
async_rest_flow = api.async_flow().id("default") # Async REST
async_socket_flow = api.async_socket().flow("default") # Async WebSocket
async_bulk = api.async_bulk() # Async bulk operations
async_metrics = api.async_metrics() # Async metrics
```
#### Akı ş Yanı t Türleri
**Ajan Akı şı :**
```python
api = Api(url="http://localhost:8088/")
# REST interface - non-streaming (existing)
rest_flow = api.flow().id("default")
response = rest_flow.agent(question="What is ML?", user="user123")
print(response["response"])
# WebSocket interface - non-streaming (same signature)
socket_flow = api.socket().flow("default")
response = socket_flow.agent(question="What is ML?", user="user123")
print(response["response"])
# WebSocket interface - streaming (new)
for chunk in socket_flow.agent(question="What is ML?", user="user123", streaming=True):
if isinstance(chunk, AgentThought):
print(f"Thinking: {chunk.content}")
elif isinstance(chunk, AgentObservation):
print(f"Observed: {chunk.content}")
elif isinstance(chunk, AgentAnswer):
print(f"Answer: {chunk.content}")
if chunk.end_of_dialog:
break
```
**RAG Akı şı :**
```python
api = Api(url="http://localhost:8088/")
# REST interface - non-streaming (existing)
rest_flow = api.flow().id("default")
response = rest_flow.graph_rag(question="What is Python?", user="user123", collection="default")
print(response)
# WebSocket interface - streaming (new)
socket_flow = api.socket().flow("default")
for chunk in socket_flow.graph_rag(
question="What is Python?",
user="user123",
collection="default",
streaming=True
):
print(chunk.content, end="", flush=True)
if chunk.end_of_stream:
break
```
**Toplu İşlemler (Senkron)**:
```python
api = Api(url="http://localhost:8088/")
# Bulk import triples
def triple_generator():
yield Triple(s="http://ex.com/alice", p="http://ex.com/type", o="Person")
yield Triple(s="http://ex.com/alice", p="http://ex.com/name", o="Alice")
yield Triple(s="http://ex.com/bob", p="http://ex.com/type", o="Person")
bulk = api.bulk()
bulk.import_triples(flow="default", triples=triple_generator())
# Bulk export triples
for triple in bulk.export_triples(flow="default"):
print(f"{triple.s} -> {triple.p} -> {triple.o}")
```
**Toplu İşlemler (Asenkron)**:
```python
import asyncio
async def main():
api = Api(url="http://localhost:8088/")
# Async bulk import triples
async def async_triple_generator():
yield Triple(s="http://ex.com/alice", p="http://ex.com/type", o="Person")
yield Triple(s="http://ex.com/alice", p="http://ex.com/name", o="Alice")
yield Triple(s="http://ex.com/bob", p="http://ex.com/type", o="Person")
bulk = api.async_bulk()
await bulk.import_triples(flow="default", triples=async_triple_generator())
# Async bulk export triples
async for triple in bulk.export_triples(flow="default"):
print(f"{triple.s} -> {triple.p} -> {triple.o}")
asyncio.run(main())
```
**Asenkron REST Örneği**:
```python
import asyncio
async def main():
api = Api(url="http://localhost:8088/")
# Async REST flow operations
flow = api.async_flow().id("default")
response = await flow.agent(question="What is ML?", user="user123")
print(response["response"])
asyncio.run(main())
```
**Asenkron WebSocket Akı şı Örneği**:
```python
import asyncio
async def main():
api = Api(url="http://localhost:8088/")
# Async WebSocket streaming
socket = api.async_socket()
flow = socket.flow("default")
async for chunk in flow.agent(question="What is ML?", user="user123", streaming=True):
if isinstance(chunk, AgentAnswer):
print(chunk.content, end="", flush=True)
if chunk.end_of_dialog:
break
asyncio.run(main())
```
### API'ler
#### Yeni API'ler
1. **Temel API Sı nı fı ** :
**Senkron** :
`Api.socket()` - Senkron WebSocket istemcisini al
`Api.bulk()` - Senkron toplu işlem istemcisini al
`Api.metrics()` - Senkron ölçüm istemcisini al
`Api.close()` - Tüm senkron bağlantı ları kapat
Bağlam yöneticisi desteği (`__enter__` , `__exit__` )
**Asenkron** :
`Api.async_flow()` - Asenkron REST akı şı istemcisini al
`Api.async_socket()` - Asenkron WebSocket istemcisini al
`Api.async_bulk()` - Asenkron toplu işlem istemcisini al
`Api.async_metrics()` - Asenkron ölçüm istemcisini al
`Api.aclose()` - Tüm asenkron bağlantı ları kapat
Asenkron bağlam yöneticisi desteği (`__aenter__` , `__aexit__` )
2. **Senkron WebSocket İstemcisi** :
`SocketClient.flow(flow_id)` - WebSocket akı şı örneğini al
`SocketFlowInstance.agent(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte aracı
`SocketFlowInstance.text_completion(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte metin tamamlama
`SocketFlowInstance.graph_rag(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte grafik RAG
`SocketFlowInstance.document_rag(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte belge RAG
`SocketFlowInstance.prompt(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte istem
`SocketFlowInstance.graph_embeddings_query()` - Grafik gömme sorgusu
Aynı imzaya sahip diğer tüm FlowInstance yöntemleri
3. **Asenkron WebSocket İstemcisi** :
`AsyncSocketClient.flow(flow_id)` - Asenkron WebSocket akı şı örneğini al
`AsyncSocketFlowInstance.agent(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte asenkron aracı
`AsyncSocketFlowInstance.text_completion(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte asenkron metin tamamlama
`AsyncSocketFlowInstance.graph_rag(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte asenkron grafik RAG
`AsyncSocketFlowInstance.document_rag(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte asenkron belge RAG
`AsyncSocketFlowInstance.prompt(..., streaming: bool = False)` - İsteğe bağlı akı şla birlikte asenkron istem
`AsyncSocketFlowInstance.graph_embeddings_query()` - Asenkron grafik gömme sorgusu
Diğer tüm FlowInstance yöntemleri asenkron versiyonlardı r
4. **Senkron Toplu İşlem İstemcisi** :
`BulkClient.import_triples(flow, triples)` - Toplu üçlü içe aktarma
`BulkClient.export_triples(flow)` - Toplu üçlü dı şa aktarma
`BulkClient.import_graph_embeddings(flow, embeddings)` - Toplu grafik gömme içe aktarma
`BulkClient.export_graph_embeddings(flow)` - Toplu grafik gömme dı şa aktarma
`BulkClient.import_document_embeddings(flow, embeddings)` - Toplu belge gömme içe aktarma
`BulkClient.export_document_embeddings(flow)` - Toplu belge gömme dı şa aktarma
`BulkClient.import_entity_contexts(flow, contexts)` - Toplu varlı k bağlamları içe aktarma
`BulkClient.export_entity_contexts(flow)` - Toplu varlı k bağlamları dı şa aktarma
`BulkClient.import_objects(flow, objects)` - Toplu nesneler içe aktarma
5. **Asenkron Toplu İşlem İstemcisi** :
`AsyncBulkClient.import_triples(flow, triples)` - Asenkron toplu üçlü içe aktarma
`AsyncBulkClient.export_triples(flow)` - Asenkron toplu üçlü dı şa aktarma
`AsyncBulkClient.import_graph_embeddings(flow, embeddings)` - Asenkron toplu grafik gömme içe aktarma
`AsyncBulkClient.export_graph_embeddings(flow)` - Asenkron toplu grafik gömme dı şa aktarma
`AsyncBulkClient.import_document_embeddings(flow, embeddings)` - Asenkron toplu belge gömme içe aktarma
`AsyncBulkClient.export_document_embeddings(flow)` - Asenkron toplu belge gömme dı şa aktarma
`AsyncBulkClient.import_entity_contexts(flow, contexts)` - Asenkron toplu varlı k bağlamları içe aktarma
`AsyncBulkClient.export_entity_contexts(flow)` - Asenkron toplu varlı k bağlamları dı şa aktarma
`AsyncBulkClient.import_objects(flow, objects)` - Asenkron toplu nesneler içe aktarma
6. **Asenkron REST Akı şı İstemcisi** :
`AsyncFlow.list()` - Tüm akı şları listele (asenkron)
`AsyncFlow.get(id)` - Akı ş tanı mı nı al (asenkron)
`AsyncFlow.start(...)` - Akı şı başlat (asenkron)
`AsyncFlow.stop(id)` - Akı şı durdur (asenkron)
`AsyncFlow.id(flow_id)` - Asenkron akı ş örneğini al
`AsyncFlowInstance.agent(...)` - Asenkron aracı yürütme
`AsyncFlowInstance.text_completion(...)` - Asenkron metin tamamlama
`AsyncFlowInstance.graph_rag(...)` - Asenkron grafik RAG
Diğer tüm FlowInstance yöntemleri asenkron versiyonlardı r
7. **Ölçüm İstemcileri** :
`Metrics.get()` - Senkron Prometheus ölçümleri
`AsyncMetrics.get()` - Asenkron Prometheus ölçümleri
8. **REST Akı şı API Geliştirmesi** :
`FlowInstance.graph_embeddings_query()` - Grafik gömme sorgusu (senkron özellik uyumluluğu)
`AsyncFlowInstance.graph_embeddings_query()` - Grafik gömme sorgusu (asenkron özellik uyumluluğu)
#### Değiştirilen API'ler
1. **Kurucu** (küçük bir iyileştirme):
```python
Api(url: str, timeout: int = 60, token: Optional[str] = None)
```
`token` parametresi eklendi (isteğe bağlı , kimlik doğrulama için)
Eğer `None` belirtilmemişse (varsayı lan): Kimlik doğrulama kullanı lmı yor
Eğer belirtilmişse: REST için bearer token olarak kullanı lı r (`Authorization: Bearer <token>` ), WebSocket için sorgu parametresi olarak kullanı lı r (`?token=<token>` )
Başka bir değişiklik yok - tamamen geriye dönük uyumlu
2. **Kı rı cı Değişiklikler Yok** :
Tüm mevcut REST API yöntemleri değişmedi
Tüm mevcut imzalar korunmuş
Tüm mevcut dönüş türleri korunmuş
### Uygulama Detayları
#### Hata Yönetimi
**WebSocket Bağlantı Hataları **:
```python
try:
api = Api(url="http://localhost:8088/")
socket = api.socket()
socket_flow = socket.flow("default")
response = socket_flow.agent(question="...", user="user123")
except ConnectionError as e:
print(f"WebSocket connection failed: {e}")
print("Hint: Ensure Gateway is running and WebSocket endpoint is accessible")
```
**Zarif Yedekleme:**
```python
api = Api(url="http://localhost:8088/")
try:
# Try WebSocket streaming first
socket_flow = api.socket().flow("default")
for chunk in socket_flow.agent(question="...", user="...", streaming=True):
print(chunk.content)
except ConnectionError:
# Fall back to REST non-streaming
print("WebSocket unavailable, falling back to REST")
rest_flow = api.flow().id("default")
response = rest_flow.agent(question="...", user="...")
print(response["response"])
```
**Kı smi Akı ş Hataları **:
```python
api = Api(url="http://localhost:8088/")
socket_flow = api.socket().flow("default")
accumulated = []
try:
for chunk in socket_flow.graph_rag(question="...", streaming=True):
accumulated.append(chunk.content)
if chunk.error:
print(f"Error occurred: {chunk.error}")
print(f"Partial response: {''.join(accumulated)}")
break
except Exception as e:
print(f"Streaming error: {e}")
print(f"Partial response: {''.join(accumulated)}")
```
#### Kaynak Yönetimi
**Bağlam Yöneticisi Desteği**:
```python
# Automatic cleanup
with Api(url="http://localhost:8088/") as api:
socket_flow = api.socket().flow("default")
response = socket_flow.agent(question="...", user="user123")
# All connections automatically closed
# Manual cleanup
api = Api(url="http://localhost:8088/")
try:
socket_flow = api.socket().flow("default")
response = socket_flow.agent(question="...", user="user123")
finally:
api.close() # Explicitly close all connections (WebSocket, bulk, etc.)
```
#### İş parçacı ğı ve Eşzamanlı lı k
**İş Parçacı ğı Güvenliği**:
Her `Api` örneği kendi bağlantı sı nı korur.
WebSocket taşı ma katmanı , iş parçacı ğı güvenli istek çoklama için kilitler kullanı r.
Birden fazla iş parçacı ğı , bir `Api` örneğini güvenli bir şekilde paylaşabilir.
Akı ş iteratörleri iş parçacı ğı güvenli değildir (tek iş parçacı ğı ndan tüketilir).
**Asenkron Destek** (gelecek planlar):
```python
# Phase 2 enhancement (not in initial scope)
import asyncio
async def main():
api = await AsyncApi(url="ws://localhost:8088/")
flow = api.flow().id("default")
async for chunk in flow.agent(question="...", streaming=True):
print(chunk.content)
await api.close()
asyncio.run(main())
```
## Güvenlik Hususları
### Kimlik Doğrulama
**Token Parametresi**:
```python
# No authentication (default)
api = Api(url="http://localhost:8088/")
# With authentication
api = Api(url="http://localhost:8088/", token="mytoken")
```
**REST İletim Yöntemi**:
Taşı yı cı belirteci, `Authorization` başlı ğı aracı lı ğı yla
Tüm REST isteklerine otomatik olarak uygulanı r
Format: `Authorization: Bearer <token>`
**WebSocket İletim Yöntemi**:
Belirteç, WebSocket URL'sine eklenen bir sorgu parametresi aracı lı ğı yla
Bağlantı kurulması sı rası nda otomatik olarak uygulanı r
Format: `ws://localhost:8088/api/v1/socket?token=<token>`
**Uygulama**:
```python
class SocketClient:
def _connect(self) -> WebSocket:
# Construct WebSocket URL with optional token
ws_url = f"{self.url}/api/v1/socket"
if self.token:
ws_url = f"{ws_url}?token={self.token}"
# Connect to WebSocket
return websocket.connect(ws_url)
```
**Örnek:**
```python
# REST with auth
api = Api(url="http://localhost:8088/", token="mytoken")
flow = api.flow().id("default")
# All REST calls include: Authorization: Bearer mytoken
# WebSocket with auth
socket = api.socket()
# Connects to: ws://localhost:8088/api/v1/socket?token=mytoken
```
### Güvenli İletişim
Hem WS (WebSocket) hem de WSS (WebSocket Secure) şemaları nı destekler.
WSS bağlantı ları için TLS sertifika doğrulaması .
Geliştirme için isteğe bağlı sertifika doğrulama devre dı şı bı rakma (uyarı ile).
### Girdi Doğrulama
URL şemaları nı (http, https, ws, wss) doğrula.
Taşı ma parametre değerlerini doğrula.
Akı ş parametre kombinasyonları nı doğrula.
Toplu veri türlerini doğrula.
## Performans Hususları
### Gecikme İyileştirmeleri
**Akı şlı LLM İşlemleri**:
**İlk token'a ulaşma süresi**: ~500ms (akı şsı z ise ~30 saniye)
**İyileşme**: Algı lanan performansta 60 kat daha hı zlı .
**Kullanı m alanları **: Ajan, Grafik RAG, Belge RAG, Metin Tamamlama, İstek.
**Sürekli Bağlantı lar**:
**Bağlantı ek yükü**: Sonraki istekler için ortadan kaldı rı lmı ştı r.
**WebSocket el sı kı şması **: Tek seferlik maliyet (~100ms).
**Kullanı m alanları **: WebSocket taşı ma yöntemini kullanı rken tüm işlemler için geçerlidir.
### Verim İyileştirmeleri
**Toplu İşlemler**:
**Üçlü veri aktarı mı **: ~10.000 üçlü/saniye (REST ile tek öğe için ~100/saniye)
**Gömme veri aktarı mı **: ~5.000 gömme/saniye (REST ile tek öğe için ~50/saniye)
**İyileşme**: Toplu işlemler için 100 kat daha yüksek verim.
**İstek Çoklama**:
**Eşzamanlı istekler**: Tek bağlantı üzerinden 15'e kadar eşzamanlı istek.
**Bağlantı yeniden kullanı mı **: Eşzamanlı işlemler için bağlantı ek yükü yok.
### Bellek Hususları
**Akı şlı Yanı tlar**:
Sabit bellek kullanı mı (parçalar geldiği gibi işlenir).
Tam yanı tı n tamponlanması yok.
Çok uzun çı ktı lar (>1MB) için uygundur.
**Toplu İşlemler**:
Yineleyici tabanlı işleme (sabit bellek).
Tüm veri kümesinin belleğe yüklenmesi yok.
Milyonlarca öğeye sahip veri kümeleri için uygundur.
### Karşı laştı rmalar (Beklenen)
| İşlem | REST (mevcut) | WebSocket (akı şlı ) | İyileşme |
|-----------|----------------|----------------------|-------------|
| Ajan (ilk token'a ulaşma süresi) | 30s | 0.5s | 60x |
| Grafik RAG (ilk token'a ulaşma süresi) | 25s | 0.5s | 50x |
| 10K üçlü aktarı mı | 100s | 1s | 100x |
| 1M üçlü aktarı mı | 10.000s (2.7h) | 100s (1.6m) | 100x |
| 10 eşzamanlı küçük istek | 5s (sı ralı ) | 0.5s (paralel) | 10x |
## Test Stratejisi
### Birim Testleri
**Taşı ma Katmanı ** (`test_transport.py` ):
REST taşı ma isteklerini/yanı tları nı test et
WebSocket taşı ma bağlantı sı nı test et
WebSocket taşı ma bağlantı sı nı n yeniden kurulması nı test et
İstek çoklama işlemini test et
Akı ş yanı tı ayrı ştı rması nı test et
Belirli testler için sahte WebSocket sunucusu oluştur
**API Yöntemleri** (`test_flow.py` , `test_library.py` , vb.):
Sahte taşı ma ile yeni yöntemleri test et
Akı ş parametrelerinin işlenmesini test et
Toplu işlem yineleyicilerini test et
Hata işleme işlemlerini test et
**Türler** (`test_types.py` ):
Yeni akı ş parçacı k türlerini test et
Tür serileştirme/deserileştirme işlemlerini test et
### Entegrasyon Testleri
**Uçtan Uca REST** (`test_integration_rest.py` ):
Tüm işlemleri gerçek Ağ geçidine karşı test et (REST modu)
Geriye dönük uyumluluğu doğrula
Hata koşulları nı test et
**Uçtan Uca WebSocket** (`test_integration_websocket.py` ):
Tüm işlemleri gerçek Ağ geçidine karşı test et (WebSocket modu)
Akı ş işlemlerini test et
Toplu işlemleri test et
Eşzamanlı istekleri test et
Bağlantı kurtarma işlemlerini test et
**Akı ş Hizmetleri** (`test_streaming_integration.py` ):
Ajan akı şı nı (düşünceler, gözlemler, yanı tlar) test et
RAG akı şı nı (artı mlı parçalar) test et
Metin tamamlama akı şı nı (token-by-token) test et
İstem akı şı nı test et
Akı ş sı rası nda hata işleme işlemlerini test et
**Toplu İşlemler** (`test_bulk_integration.py` ):
Üçlülerin toplu olarak aktarı lması nı /dı şa aktarı lması nı test et (1K, 10K, 100K öğe)
Gömme verilerinin toplu olarak aktarı lması nı /dı şa aktarı lması nı test et
Toplu işlemler sı rası nda bellek kullanı mı nı test et
İlerleme takibini test et
### Performans Testleri
**Gecikme Ölçümleri** (`test_performance_latency.py` ):
İlk tokene kadar geçen süreyi ölç (akı şlı vs. akı şsı z)
Bağlantı ek yükünü ölç (REST vs WebSocket)
Beklenen ölçümlerle karşı laştı r
**Verim Ölçümleri** (`test_performance_throughput.py` ):
Toplu aktarı m verimini ölç
İstek çoklama verimliliğini ölç
Beklenen ölçümlerle karşı laştı r
### Uyumluluk Testleri
**Geriye Dönük Uyumluluk** (`test_backward_compatibility.py` ):
Mevcut test paketini yeniden düzenlenmiş API'ye karşı çalı ştı r
Herhangi bir uyumsuz değişikliğin olmadı ğı nı doğrulayı n
Yaygı n kalı plar için geçiş yolunu test edin
## Geçiş Planı
### 1. Aşama: Şeffaf Geçiş (Varsayı lan)
**Kodda herhangi bir değişiklik gerekli değil**. Mevcut kod çalı şmaya devam ediyor:
```python
# Existing code works unchanged
api = Api(url="http://localhost:8088/")
flow = api.flow().id("default")
response = flow.agent(question="What is ML?", user="user123")
```
### 2. Aşama: İsteğe Bağlı Yayı n (Basit)
**Yayı nlamayı etkinleştirmek için `api.socket()` arayüzünü kullanı n:**
```python
# Before: Non-streaming REST
api = Api(url="http://localhost:8088/")
rest_flow = api.flow().id("default")
response = rest_flow.agent(question="What is ML?", user="user123")
print(response["response"])
# After: Streaming WebSocket (same parameters!)
api = Api(url="http://localhost:8088/") # Same URL
socket_flow = api.socket().flow("default")
for chunk in socket_flow.agent(question="What is ML?", user="user123", streaming=True):
if isinstance(chunk, AgentAnswer):
print(chunk.content, end="", flush=True)
```
**Önemli Noktalar**:
Hem REST hem de WebSocket için aynı URL
Aynı yöntem imzaları (kolay geçiş)
Sadece `.socket()` ve `streaming=True` ekleyin
### 3. Aşama: Toplu İşlemler (Yeni Özellik)
Büyük veri kümeleri için `api.bulk()` arayüzünü kullanı n:
```python
# Before: Inefficient per-item operations
api = Api(url="http://localhost:8088/")
flow = api.flow().id("default")
for triple in my_large_triple_list:
# Slow per-item operations
# (no direct bulk insert in REST API)
pass
# After: Efficient bulk loading
api = Api(url="http://localhost:8088/") # Same URL
bulk = api.bulk()
# This is fast (10,000 triples/second)
bulk.import_triples(flow="default", triples=iter(my_large_triple_list))
```
### Dokümantasyon Güncellemeleri
1. **README.md** : Akı ş ve WebSocket örnekleri ekleyin
2. **API Referansı ** : Tüm yeni yöntemleri ve parametreleri belgeleyin
3. **Yükseltme Kı lavuzu** : Akı şı etkinleştirmek için adı m adı m kı lavuz
4. **Örnekler** : Yaygı n kalı plar için örnek betikler ekleyin
5. **Performans Kı lavuzu** : Beklenen performans iyileştirmelerini belgeleyin
### Kullanı mdan Kaldı rma Politikası
**Herhangi bir kullanı mdan kaldı rma yok**. Tüm mevcut API'ler desteklenmeye devam ediyor. Bu, yalnı zca bir geliştirmedir.
## Zaman Çizelgesi
### 1. Hafta: Temel
Taşı ma soyutlama katmanı
Mevcut REST kodunu yeniden düzenleyin
Taşı ma katmanı için birim testleri
Geriye dönük uyumluluk doğrulaması
### 2. Hafta: WebSocket Taşı yı cı sı
WebSocket taşı yı cı sı uygulaması
Bağlantı yönetimi ve yeniden bağlanma
İstek çoklama
Birim ve entegrasyon testleri
### 3. Hafta: Akı ş Desteği
LLM yöntemlerine akı ş parametresi ekleyin
Akı ş yanı tı ayrı ştı rması nı uygulayı n
Akı ş parçacı ğı türleri ekleyin
Akı ş entegrasyon testleri
### 4. Hafta: Toplu İşlemler
Toplu içe/dı şa aktarma yöntemleri ekleyin
Yineleyici tabanlı işlemleri uygulayı n
Performans testi
Toplu işlem entegrasyon testleri
### 5. Hafta: Özellik Eşdeğerliği ve Dokümantasyon
Grafik gömme sorgusu ekleyin
Ölçüm API'si ekleyin
Kapsamlı dokümantasyon
Yükseltme kı lavuzu
Yayı n adayı
### 6. Hafta: Yayı n
Son entegrasyon testleri
Performans karşı laştı rması
Yayı n dokümantasyonu
Topluluk duyurusu
**Toplam Süre**: 6 hafta
## Açı k Sorular
### API Tasarı mı Soruları
1. **Asenkron Destek** : ✅ **ÇÖZÜLDÜ** - Tam asenkron destek, ilk sürümde dahil edilmiştir
Tüm arayüzlerin asenkron varyantları vardı r: `async_flow()` , `async_socket()` , `async_bulk()` , `async_metrics()`
Senkron ve asenkron API'ler arası nda tam bir simetri sağlar
Modern asenkron çerçeveler (FastAPI, aiohttp) için gereklidir
2. **İlerleme İzleme** : Toplu işlemler, ilerleme geri çağı rmaları nı desteklemeli mi?
```python
def progress_callback(processed: int, total: Optional[int]):
print(f"Processed {processed} items")
bulk.import_triples(flow="default", triples=triples, on_progress=progress_callback)
```
**Öneri** : 2. Faz'da ekleyin. İlk sürüm için kritik değil.
3. **Akı ş Zaman Aşı mı ** : Akı ş işlemlerinde zaman aşı mı nı nası l ele almalı yı z?
**Öneri** : Akı ş dı şı işlemler için aynı zaman aşı mı nı kullanı n, ancak her parça alı ndı ğı nda sı fı rlayı n.
4. **Parça Önbelleği** : Parçaları önbelleğe almalı mı yı z yoksa hemen geri mi vermeliyiz?
**Öneri** : En düşük gecikme için hemen geri verin.
5. **WebSocket Üzerinden Küresel Hizmetler** : `api.socket()` , küresel hizmetleri (kütüphane, bilgi, koleksiyon, yapı landı rma) desteklemeli mi yoksa yalnı zca akı şla ilgili hizmetleri mi?
**Öneri** : Başlangı çta yalnı zca akı şla ilgili hizmetlerle başlayı n (akı şı n önemli olduğu yerlerde). Gerekirse 2. Faz'da küresel hizmetleri ekleyin.
### Uygulama Soruları
1. **WebSocket Kütüphanesi** : `websockets` , `websocket-client` veya `aiohttp` 'yi kullanmalı mı yı z?
**Öneri** : `websockets` (asenkron, olgun, iyi bakı lan). `asyncio.run()` kullanarak senkron bir arayüzle sarı n.
2. **Bağlantı Havuzu** : Birden çok eşzamanlı `Api` örneğinin bir bağlantı havuzunu paylaşması na izin vermeli miyiz?
**Öneri** : 2. Faz'a bı rakı n. Her `Api` örneğinin başlangı çta kendi bağlantı ları vardı r.
3. **Bağlantı Geri Dönüşümü** : `SocketClient` ve `BulkClient` aynı WebSocket bağlantı sı nı mı kullanmalı , yoksa ayrı bağlantı lar mı kullanmalı ?
**Öneri** : Ayrı bağlantı lar. Daha basit uygulama, daha net sorumluluk ayrı mı .
4. **Gecikmeli vs. Hı zlı Bağlantı ** : WebSocket bağlantı sı `api.socket()` içinde mi yoksa ilk istekte mi kurulmalı ?
**Öneri** : Gecikmeli (ilk istekte). Kullanı cı yalnı zca REST yöntemlerini kullanı yorsa, bağlantı ek yükünden kaçı nı n.
### Test Soruları
1. **Sahte Ağ Geçidi** : Test için hafif bir sahte Ağ Geçidi mi oluşturmalı yı z, yoksa gerçek Ağ Geçidi üzerinde mi test yapmalı yı z?
**Öneri** : Her ikisi de. Birim testleri için sahte nesneler kullanı n, entegrasyon testleri için gerçek Ağ Geçidi'ni kullanı n.
2. **Performans Geri Dönüşüm Testleri** : Otomatik performans geri dönüşüm testlerini CI'a eklemeli miyiz?
**Öneri** : Evet, ancak CI ortamı ndaki değişkenliği hesaba katmak için cömert eşiklerle.
## Referanslar
### İlgili Teknik Özellikler
`docs/tech-specs/streaming-llm-responses.md` - Ağ Geçidi'ndeki akı ş uygulaması
`docs/tech-specs/rag-streaming-support.md` - RAG akı ş desteği
### Uygulama Dosyaları
`trustgraph-base/trustgraph/api/` - Python API kaynağı
`trustgraph-flow/trustgraph/gateway/` - Ağ Geçidi kaynağı
`trustgraph-flow/trustgraph/gateway/dispatch/mux.py` - WebSocket çoklayı cı referans uygulaması
### Belgeler
`docs/apiSpecification.md` - Tam API referansı
`docs/api-status-summary.md` - API durumu özeti
`README.websocket` - WebSocket protokolü belgeleri
`STREAMING-IMPLEMENTATION-NOTES.txt` - Akı ş uygulama notları
### Harici Kütüphaneler
`websockets` - Python WebSocket kütüphanesi (https://websockets.readthedocs.io/)
`requests` - Python HTTP kütüphanesi (mevcut)