Ana içeriğe geç

Hook spesifikasyonları

10 hookspec backend/app/hookspecs.py içinde yaşar. Her hookspec çağırma sözleşmesini tanımlar; eklentiler bunları @hookimpl ile uygular. Üçü, v1.5.0 ve v1.6.0 boyunca aşamalı olarak sunulan AI çağrısı varyantlarıdır (senkron / async / akış); geri kalanlar v0.2.0'dan bu yana değişmemiştir.

get_assessment_questions

@hookspec
def get_assessment_questions(lang: str) -> list[dict] | None:
    """İstenen dil için soru paketini döndür.

    Uygulayan: değerlendirme eklentisi.
    Mod: liste (firstresult değil). Rota şu anda ilk eklentinin
    sonucunu kullanır; gelecekteki bir "çoklu soru paketi"
    özelliği, sağlayıcıların adlandırılmış paketler kaydetmesine
    izin verebilir.
    """

Dönüş şekli:

[
  {
    "id": "q01",
    "type": "single" | "multi",
    "text": "...",
    "answers": [
      {"id": "a", "text": "...", "weights": {"deductive": 1.0}},
      ...
    ]
  },
  ...
]

calculate_profile

@hookspec(firstresult=True)
def calculate_profile(answers: list[dict]) -> dict[str, float]:
    """Ham cevapları 6 yöntemli profile topla.

    Uygulayan: değerlendirme eklentisi.
    firstresult: tam olarak bir eklenti profili hesaplar.
    """

Girdi answers şekli:

[
  {"question_id": "q01", "answer_ids": ["a", "b"]},  # çoklu
  {"question_id": "q02", "answer_id": "c"},          # tekli
  ...
]

Dönüş: altı yöntem anahtarıyla dict[method, float].

create_session_prompt

@hookspec(firstresult=True)
def create_session_prompt(
    project: dict,
    profile: dict,
    method: str,
    step: int,
    lang: str,
) -> str:
    """Bir (yöntem, adım, dil) hücresi için sistem istemini oluştur.

    Uygulayan: oturum eklentisi.
    firstresult: tam olarak bir eklenti istemi oluşturur.
    """

Dönüş: system rolü mesajı olarak gönderilmeye hazır bir dize. Oturum eklentisinin uygulaması 42 hücreli _PROMPTS sözlüğünden okur ve bir bağlam bloğu ekler.

ai_complete

@hookspec(firstresult=True)
def ai_complete(
    messages: list[dict[str, Any]],
    model: str,
    api_key: str,
    max_tokens: int = 1024,
) -> str | None:
    """AI sağlayıcısını çağır, asistan metnini döndür.

    Uygulayan: ai-anthropic, ai-openai, ai-gemini.
    firstresult: eşleşen sağlayıcı eklentisi metni döndürür;
    diğerleri None döndürür.
    """

Her sağlayıcı eklentisi model önekini kontrol eder (claude-*, gpt-*, gemini-*) ve modele sahipse asistan metnini döndürür. Eşleşmeyen eklentiler None döndürerek firstresult'un bir sonrakine geçmesine izin verir.

messages şekli (OpenAI tarzı):

[
  {"role": "system", "content": "..."},
  {"role": "user", "content": "..."},
  {"role": "assistant", "content": "..."},
  {"role": "user", "content": "..."},
]

Sağlayıcı eklentileri bu şekli kendi API'lerine normalleştirir (Anthropic system'i ayırır; Gemini bunu katlar).

ai_complete_async (v1.5.0+)

@hookspec(firstresult=True)
async def ai_complete_async(
    messages: list[dict[str, Any]],
    model: str,
    api_key: str,
    max_tokens: int = 1024,
) -> str:
    """ai_complete'in beklenilebilir varyantı.

    Uygulayan: ai-anthropic, ai-openai, ai-gemini.
    Adım 6 -> 7 döngü sınırında kullanılır; adım değerlendirmesi +
    konu geçişinin asyncio.gather aracılığıyla eş zamanlı
    tetiklenmesi için (~T_2 gecikme tasarrufu).
    """

Orkestratör yardımcısı call_ai_complete_async bu hook'u tercih eder; uygulanmadığında asyncio.to_thread içinde sarılmış ai_complete'e geri döner.

ai_complete_stream (v1.6.0+)

@hookspec(firstresult=True)
def ai_complete_stream(
    messages: list[dict[str, Any]],
    model: str,
    api_key: str,
    max_tokens: int = 1024,
) -> AsyncIterator[str]:
    """Metin deltalarının async yineleyicisini döndür.

    Uygulayan: ai-anthropic, ai-openai, ai-gemini; her biri
    sağlayıcı SDK'sının yerel async akışını kullanır.
    ``POST /api/plugins/session/{id}/message/stream``'i
    (SSE: ``start`` / ``chunk`` / ``done`` olayları yayar)
    destekler.
    """

recommend_method_switch

@hookspec
def recommend_method_switch(
    history: list[dict],
    profile: dict,
) -> dict | None:
    """Bir geçiş önerisi veya None döndür.

    Uygulayan: oturum eklentisi.
    Mod: liste. Eklentiler bireysel öneriler döndürür;
    gelecekteki bir hakem en yüksek güvenilirlikli None olmayan
    olanı seçer.
    """

Dönüş şekli:

{
  "recommended": True,
  "to_method": "dialogic",
  "reason": "Three sessions of stagnant understanding.",
  "confidence": 0.75,  # isteğe bağlı
}

Geçiş gerekmediğinde None (veya {"recommended": False}) döndürün.

on_session_complete

@hookspec
def on_session_complete(
    session: dict,
    rating: dict,
) -> None:
    """Yan etki hook'u: oturum sonlandırıldığında tetiklenir.

    Uygulayan: takip eklentisi (ProgressCommit yazar).
    Mod: liste. Her abone çalışır; hatalar yakalanır ve
    kaydedilir ama oturum sonunu geri almaz.
    """

Bu hook'taki hatalar YAYILMAMALIDIR — backend/app/main.py içindeki _fire_on_session_complete sarmalayıcısı onları yakalar ve kaydeder.

get_progress_summary

@hookspec
def get_progress_summary(
    project_id: str,
    db: Session,
) -> dict | None:
    """İlerleme özetinin bir ad alanı dilimini döndür.

    Uygulayan: takip eklentisi ("tracking" ad alanı dilimini
    döndürür).
    Mod: liste. Dilimler rotada sığ olarak birleştirilir.
    """

Her eklenti, benzersiz bir ad alanıyla anahtarlanmış bir dict döndürür. Takip eklentisi {"tracking": {...}, "step_evaluation": {...}} döndürür. Gelecekteki bir durgunluk algılama eklentisi {"stagnation": {...}} vb. döndürebilir.

get_tool_recommendations

@hookspec
def get_tool_recommendations(
    profile: dict,
    lang: str,
    limit: int = 5,
) -> list[dict] | None:
    """Sıralı dış araç önerilerini döndür.

    Uygulayan: araçlar eklentisi.
    Mod: liste. Rota şu anda ilk eklentinin sonucunu kullanır;
    gelecekteki çok kaynaklı bir öneri sistemi birleştirebilir.
    """

Dönüş şekli:

[
  {
    "name": "Anki",
    "url": "https://apps.ankiweb.net/",
    "why": "...",
    "weight_keys": ["deductive", "error_based"],
    "score": 0.5
  },
  ...
]

firstresult vs liste modu

Hookspec Mod Neden
get_assessment_questions liste (etkin firstresult) Şu anda bir paket; gelecekte adlandırılmış paketler kaydedilebilir
calculate_profile firstresult Tam olarak bir algoritma
create_session_prompt firstresult Tam olarak bir istem oluşturucu
ai_complete firstresult Eşleşen sağlayıcı çağrıya sahip
recommend_method_switch liste Birden fazla eklenti önerebilir
on_session_complete liste Yan etkiler yayılır
get_progress_summary liste Ad alanı dilimleri birleşir
get_tool_recommendations liste (etkin firstresult) Şu anda bir kaynak

Şu anda firstresult gibi davranan list modları kasıtlıdır: sözleşme çok eklentili uzantıya açıktır ama v0.7.0 uygulaması yalnızca ilkini kullanır.