fix(ai): AtlasCloud üst sağlayıcısı kalıcı olarak atlanır (liste + danışman)
All checks were successful
Deploy / deploy (push) Successful in 9m34s
All checks were successful
Deploy / deploy (push) Successful in 9m34s
AtlasCloud reasoning_effort: "none" isteğine uymuyor; cevap ~50 sn sürüp yarım kalıyordu (07-liste-duzeltmeleri.md). Liste üretiminde tepkisel 6 saatlik atlamaya ek olarak kalıcı liste eklendi (client.ts); danışman sohbeti de aynı listeyi provider.ignore ile gönderir. Gerçek modelle doğrulandı: 3 soru + 2 listede istek gövdesinde alan var, yanıt 200. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { getOpenRouter, raporModeli, saglayiciAdi } from "./client";
|
import { getOpenRouter, kaliciDislananSaglayicilar, raporModeli, saglayiciAdi } from "./client";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AI çağrı katmanı: tüm istekler OpenRouter'ın OpenAI-uyumlu API'sine gider
|
* AI çağrı katmanı: tüm istekler OpenRouter'ın OpenAI-uyumlu API'sine gider
|
||||||
@@ -75,10 +75,10 @@ const URETIM_ZAMAN_ASIMI_MS = 60_000;
|
|||||||
* maliyet; önbellek yüzünden yeniden deneme de aynı sağlayıcıya gidiyordu →
|
* maliyet; önbellek yüzünden yeniden deneme de aynı sağlayıcıya gidiyordu →
|
||||||
* "iki denemede başarısız" ve 60 sn zaman aşımlarının kaynağı).
|
* "iki denemede başarısız" ve 60 sn zaman aşımlarının kaynağı).
|
||||||
*
|
*
|
||||||
* Savunma tepkiseldir, sağlayıcı SEÇİLMEZ: isteğe uymadığı bu süreçte
|
* İki katman: AtlasCloud kalıcı olarak atlanır (client.ts
|
||||||
* gözlenen üst sağlayıcı bir süre `provider.ignore` ile atlanır; kalanlar
|
* `kaliciDislananSaglayicilar`, Bilal 5 Eki 2026); ayrıca isteğe uymadığı bu
|
||||||
* arasında yönlendirme OpenRouter'da kalır. Kalıcı çözüm hesap ayarıdır
|
* süreçte gözlenen başka bir üst sağlayıcı bir süre tepkisel olarak atlanır.
|
||||||
* (OpenRouter paneli → ignored providers) ve Bilal'in kararıdır.
|
* Kalanlar arasında yönlendirme OpenRouter'da kalır.
|
||||||
*/
|
*/
|
||||||
const DISLAMA_SURESI_MS = 6 * 60 * 60_000;
|
const DISLAMA_SURESI_MS = 6 * 60 * 60_000;
|
||||||
const globalForCagri = globalThis as unknown as {
|
const globalForCagri = globalThis as unknown as {
|
||||||
@@ -136,7 +136,9 @@ export async function yapilandirilmisUret<T extends z.ZodType>(opts: {
|
|||||||
const sinyal = AbortSignal.timeout(URETIM_ZAMAN_ASIMI_MS);
|
const sinyal = AbortSignal.timeout(URETIM_ZAMAN_ASIMI_MS);
|
||||||
// provider alanı OpenRouter'a özgüdür; başka bir kapıda (AI_BASE_URL) gönderilmez
|
// provider alanı OpenRouter'a özgüdür; başka bir kapıda (AI_BASE_URL) gönderilmez
|
||||||
const dislanan =
|
const dislanan =
|
||||||
saglayiciAdi() === "openrouter.ai" ? dislananSaglayicilar() : [];
|
saglayiciAdi() === "openrouter.ai"
|
||||||
|
? [...new Set([...kaliciDislananSaglayicilar(), ...dislananSaglayicilar()])]
|
||||||
|
: [];
|
||||||
const t0 = Date.now();
|
const t0 = Date.now();
|
||||||
const yanit = await geciciHatadaTekrarla(() =>
|
const yanit = await geciciHatadaTekrarla(() =>
|
||||||
getOpenRouter().chat.completions.create(
|
getOpenRouter().chat.completions.create(
|
||||||
|
|||||||
@@ -26,6 +26,20 @@ export function saglayiciAdi(): string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenRouter'ın hiç yönlendirmemesi gereken üst sağlayıcılar (istek gövdesinde
|
||||||
|
* `provider.ignore`). AtlasCloud `reasoning_effort: "none"` isteğine uymuyor:
|
||||||
|
* 4.000 token'ın 3.999'unu düşünmeye harcıyor, cevap ~50 sn sürüp yarım kalıyor
|
||||||
|
* (ölçüm 5 Eki 2026, docs/gece-vardiyasi/2026-10-05/07-liste-duzeltmeleri.md).
|
||||||
|
* Liste üretimi (cagri.ts) ve danışman sohbeti (sohbet-akisi.ts) ortak kullanır.
|
||||||
|
* Başka bir kapıda (AI_BASE_URL) boş döner: `provider` alanı OpenRouter'a özgü.
|
||||||
|
*/
|
||||||
|
const KALICI_DISLANAN_SAGLAYICILAR = ["AtlasCloud"];
|
||||||
|
|
||||||
|
export function kaliciDislananSaglayicilar(): string[] {
|
||||||
|
return saglayiciAdi() === "openrouter.ai" ? KALICI_DISLANAN_SAGLAYICILAR : [];
|
||||||
|
}
|
||||||
|
|
||||||
export function raporModeli(): string {
|
export function raporModeli(): string {
|
||||||
return (
|
return (
|
||||||
process.env.OPENROUTER_RAPOR_MODEL?.trim() ||
|
process.env.OPENROUTER_RAPOR_MODEL?.trim() ||
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {
|
|||||||
type UIMessageChunk,
|
type UIMessageChunk,
|
||||||
} from "ai";
|
} from "ai";
|
||||||
import { ARACLAR, aracSeti, type AracBaglami } from "./araclar";
|
import { ARACLAR, aracSeti, type AracBaglami } from "./araclar";
|
||||||
import { sohbetDilModeli } from "./client";
|
import { kaliciDislananSaglayicilar, sohbetDilModeli } from "./client";
|
||||||
import { KAYIT_DUZELTME_NOTU, kayitBeyaniVar, semaSizintisiVar, vaatDiliBul } from "./cikti-denetimi";
|
import { KAYIT_DUZELTME_NOTU, kayitBeyaniVar, semaSizintisiVar, vaatDiliBul } from "./cikti-denetimi";
|
||||||
import { cevapIhlalOlasiligi, JEV_DUZELTME_NOTU, JEV_IHLAL_ESIGI } from "./jev";
|
import { cevapIhlalOlasiligi, JEV_DUZELTME_NOTU, JEV_IHLAL_ESIGI } from "./jev";
|
||||||
|
|
||||||
@@ -113,7 +113,13 @@ export function danismanAkisi(opts: {
|
|||||||
},
|
},
|
||||||
maxOutputTokens: 1024,
|
maxOutputTokens: 1024,
|
||||||
abortSignal: zamanAsimi,
|
abortSignal: zamanAsimi,
|
||||||
providerOptions: { openaiCompatible: { reasoningEffort: "none" } },
|
providerOptions: {
|
||||||
|
openaiCompatible: { reasoningEffort: "none" },
|
||||||
|
// Sağlayıcı adı altındaki bilinmeyen alanlar istek gövdesine aynen geçer
|
||||||
|
...(kaliciDislananSaglayicilar().length > 0
|
||||||
|
? { openrouter: { provider: { ignore: kaliciDislananSaglayicilar() } } }
|
||||||
|
: {}),
|
||||||
|
},
|
||||||
onError: ({ error }) => {
|
onError: ({ error }) => {
|
||||||
// Hata nesnesinin tamamı istek gövdesini ve cevap başlıklarını
|
// Hata nesnesinin tamamı istek gövdesini ve cevap başlıklarını
|
||||||
// taşır; loga yalnız durum kodu ve mesaj gider.
|
// taşır; loga yalnız durum kodu ve mesaj gider.
|
||||||
|
|||||||
Reference in New Issue
Block a user