Update dependencies, enhance AI integration, and improve email content
Some checks failed
Deploy / deploy (push) Failing after 1h35m43s

- Added @google/genai dependency for enhanced AI capabilities.
- Updated CI workflow to include new environment variables for AI integration.
- Refactored AI client to support multiple providers and improved key management.
- Enhanced email templates for better user engagement and clarity.
- Updated error handling in AI-related functions to provide clearer feedback.
- Made various improvements to the application structure and code clarity.
This commit is contained in:
bilalgursen
2026-08-02 21:37:25 +03:00
parent 2278d2a218
commit c2aba25814
12 changed files with 548 additions and 98 deletions

View File

@@ -1,6 +1,6 @@
import { z } from "zod";
import { zodOutputFormat } from "@anthropic-ai/sdk/helpers/zod";
import { getAnthropic, RAPOR_MODEL } from "./client";
import { anahtarVar } from "./client";
import { yapilandirilmisUret } from "./cagri";
import {
havuzOlustur,
havuzuKompaktJson,
@@ -88,11 +88,7 @@ function programBilgisi(p: AdayProgram): RaporSonuc["programlar"][string] {
// gerçek Yapay Zeka olmadan uçtan uca test edilebilsin diye. Prod'da asla çalışmaz.
function mockAktif(): boolean {
return (
process.env.NODE_ENV !== "production" &&
!process.env.ANTHROPIC_API_KEY &&
!process.env.ANTHROPIC_AUTH_TOKEN
);
return process.env.NODE_ENV !== "production" && !anahtarVar();
}
function mockRapor(
@@ -140,7 +136,7 @@ function mockRapor(
return {
tercihler,
genelDegerlendirme: `(Dev mock — ANTHROPIC_API_KEY tanımlı değil, bu rapor gerçek Yapay Zeka çıktısı değildir.) ${params.sira.toLocaleString(
genelDegerlendirme: `(Dev mock — Yapay Zeka anahtarı tanımlı değil, bu rapor gerçek Yapay Zeka çıktısı değildir.) ${params.sira.toLocaleString(
"tr-TR",
)}. sıra için hayal/dengeli/garanti dağılımlı 24 tercihlik örnek liste kuruldu.${
revizyonNotu ? ` Revizyon isteğin not alındı: "${revizyonNotu}".` : ""
@@ -189,7 +185,6 @@ export async function raporUret(
return mockRapor(havuz, params, revizyonNotu);
}
const client = getAnthropic();
const havuzJson = havuzuKompaktJson(havuz);
const kullaniciMesaji = [
`Aday bilgisi: başarı sıralaması ${params.sira.toLocaleString("tr-TR")}, puan türü ${turLabel(params.tur)}.`,
@@ -215,24 +210,16 @@ export async function raporUret(
let sonuc: z.infer<typeof RaporSchema> | null = null;
let sonHata = "";
for (let deneme = 0; deneme < 2; deneme++) {
const response = await client.messages.parse({
model: RAPOR_MODEL,
max_tokens: 16000,
thinking: { type: "adaptive" },
const parsed = await yapilandirilmisUret({
system: SISTEM,
messages: [
{
role: "user",
content:
deneme === 0
? kullaniciMesaji
: `${kullaniciMesaji}\n\nÖNCEKİ DENEMENDE HATA VARDI: ${sonHata} Kurallara tam uy.`,
},
],
output_config: { format: zodOutputFormat(RaporSchema) },
kullanici:
deneme === 0
? kullaniciMesaji
: `${kullaniciMesaji}\n\nÖNCEKİ DENEMENDE HATA VARDI: ${sonHata} Kurallara tam uy.`,
sema: RaporSchema,
maxTokens: 16000,
});
const parsed = response.parsed_output;
if (!parsed) {
sonHata = "Çıktı şemaya uymadı.";
continue;