Her alanın anlamı
İstek, soru ve cevap formatlarını tanımlar. Yanıt her biri için bir sonuç döndürür. Örnekte kullanılan JSON alanları aşağıda verilmiştir.
Talep alanları
model- Model kimliği. Bu örnek Jev 1.13'ü sabitliyor, böylece sürümü açıkça görülüyor.
state- Destek mesajı gibi değerlendirilecek metin veya yapılandırılmış veriler.
questions- Adlandırılmış kararlar kümesi. Aynı adlar yanıttaki answers alanında kullanılır.
<question_id>- action veya urgency gibi bir ad; yanıt da aynı adı kullanır.
type- Yanıt biçimi: choice bir seçenek seçer, score sıralı bir ölçeği puanlar, noul ise evet/hayır sorusunu değerlendirir.
instructions- Modelin vermesini istediğiniz spesifik karar.
criteria- Choice seçenekleri, sıralı Score düzeyleri veya Noul için false ve true değerlerinin anlamı.
Yanıt alanları
answers- Soru başına bir sonuç, aynı adla döndürülür.
choice- choice tarafından seçilen seçenek anahtarı: olasılığı en yüksek seçenek.
probabilities- Her seçenek için olasılık; bu değerlerin toplamı 1’dir.
confidence- Olasılık dağılımından hesaplanan ayrı bir güven değeri; seçilen seçeneğin olasılığı değildir.
score- Olasılıklara göre ağırlıklandırılmış sıralı ölçek konumu; iki seviye arasında olabilir.
legend- Sayısal Score konumlarının tanımladığınız düzey açıklamalarıyla eşleştirilmesi.
noul- Evet/hayır sorusu için 0'dan (hayır) 1'e (evet) kadar bir sayı.
Aynı bağlam için üç bağımsız soru: Choice, Score ve Probability. Her çalıştırma günlük hakkınızdan birini kullanır. Doğru şekillendirilmiş bir cevap yine de yanlış olabilir. Temsili durumları test edin ve kendi iş akışınız için yönlendirme eşiklerini ayarlayın.
LangChain · PythonJev’i LangChain ajan altyapısına ekleyin
Ajan altyapısı model ve araç çağrılarını yönetir. Bir karar noktasında Jev bir mesajı, önerilen araç çağrısını veya ajanın durumunu okuyup türü belirli bir yanıt döndürür. Sonraki adımı kodunuz seçer; açık uçlu işleri sohbet modeli üstlenir.
ModelRouterMiddlewarebefore_agent → wrap_model_callÇalışma başlamadan son kullanıcı mesajını sınıflandırıp bir model seçin ve bu seçimi çalışma boyunca kullanın. Seçim, olasılıklar ve güven değeri ajan durumunda da tutulur.
AutoModeMiddlewarewrap_tool_callBelirlediğiniz araç çağrısını yürütülmeden önce denetleyin. Jev risk veya yetersiz yetki saptarsa ara katman çağrıyı engelleyip hata içeren bir ToolMessage döndürür. İnsan onayı istemez.
TypeSafeClassifierChoice · Score · NoulÖzel ara katmanla kendi kontrol noktalarınızı da ekleyebilirsiniz: ajan mesajlarını veya durumunu TypeSafeClassifier’a verin; Choice, Score ya da Noul sonucuna göre kodda dallanın veya belirsiz durumları incelemeye gönderin.
LangChain · Python · ModelRouterMiddleware
# pip install "langchain-typesafe[experimental]" langchain-openai
# Set TYPESAFE_API_KEY and OPENAI_API_KEY on your server.
from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
ModelChoice, ModelRouterMiddleware,
)
router = ModelRouterMiddleware(
choices={
"fast": ModelChoice(
model="openai:gpt-5.6-terra",
criteria="Simple lookups and extraction.",
),
"powerful": ModelChoice(
model="openai:gpt-6-astra",
criteria="Complex reasoning and high-stakes decisions.",
),
},
instructions="Choose the least costly model that can do the task safely.",
)
agent = create_agent("openai:gpt-5.6-terra", middleware=[router])
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize this log."}]})
print(result["model_route"].choice)
Sunucu tarafı TypeScript
TypeScript · fetch// Run on your server. Keep the API key out of browser code.
const apiKey = process.env.OPENROUTER_API_KEY;
if (!apiKey) throw new Error("Set OPENROUTER_API_KEY");
const response = await fetch("https://openrouter.ai/api/alpha/decisions", {
method: "POST",
headers: {
Authorization: "Bearer " + apiKey,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "typesafe/jev-1.13",
state: {input: "A customer reports a duplicate charge."},
questions: {
team: {
type: "choice",
instructions: "Which team should handle this?",
criteria: {
billing: "Payments and refunds",
technical: "Bugs and integrations"
}
},
urgency: {
type: "score",
instructions: "How urgent is the issue?",
criteria: ["Can wait", "Needs attention today", "Immediate action"]
},
escalate: {
type: "noul",
instructions: "Should a human review this first?",
criteria: {false: "No review needed", true: "Review before acting"}
}
}
})
});
if (!response.ok) throw new Error("Decision request failed");
const {answers} = await response.json();
console.log(answers.team.choice, answers.urgency.score, answers.escalate.noul);