Büyük Dil Modelleri (LLM'ler) uygulamalarımızı oluşturma şeklimizi dönüştürüyor, ancak yalnızca bulut tabanlı API'lere güvenmek her zaman ideal değildir. Gecikme süresi, maliyet, veri gizliliği ve çevrimdışı yeteneklere duyulan ihtiyaç, genellikle geliştiricileri modelleri yerel olarak çalıştırmaya yöneltir. Ollama, Llama 3, Mistral ve Phi-3 gibi güçlü açık kaynaklı LLM'leri doğrudan makinenizde (macOS, Linux, Windows) kolayca çalıştırmak için harika bir araç olarak ortaya çıktı.
Ancak, yerel veya uzaktan olsun, farklı LLM'lerle etkileşim kurmak genellikle modele özgü kod yazmayı gerektirir. İşte bu noktada LiteLLM devreye giriyor. LiteLLM, Ollama, OpenAI, Anthropic, Cohere ve daha birçokları dahil olmak üzere 100'den fazla farklı LLM API'si ile etkileşim kurmak için standartlaştırılmış, hafif bir arayüz sağlar. LiteLLM'yi kullanarak, bir kez kod yazabilir ve yerel olarak çalışan Ollama modelleriniz dahil olmak üzere, farklı modeller ve sağlayıcılar arasında minimum değişiklikle sorunsuz bir şekilde geçiş yapabilirsiniz.
Bu eğitim, yerel makinenizde çalışan Ollama modelleriyle etkileşim kurmak için LiteLLM'yi nasıl kuracağınız ve kullanacağınız konusunda ayrıntılı, adım adım bir rehber sunmaktadır. Kurulum ve temel yapılandırmadan API çağrıları yapmaya, yanıtları yayınlamaya ve daha gelişmiş LiteLLM özelliklerinden yararlanmaya kadar her şeyi ele alacağız.
Maksimum verimlilikle birlikte çalışmak için Geliştirici Ekibiniz için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?
Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
Giriş: Neden LiteLLM ve Ollama?
Teknik adımlara dalmadan önce, birlikte çalıştığımız araçları ve bunların kombinasyonunun neden güçlü olduğunu anlayalım.
LiteLLM Nedir?
LiteLLM, çok çeşitli LLM API'leriyle etkileşim kurmak için birleşik bir arayüz görevi gören hafif bir Python kütüphanesidir. OpenAI, Anthropic, Cohere, Google Gemini, Azure OpenAI, Replicate, Hugging Face ve ve Ollama gibi yerel modeller için farklı SDK'lar veya API istek formatları öğrenip uygulamak yerine, tek, tutarlı bir işlev çağrısı kullanırsınız: litellm.completion()
. LiteLLM, isteğinizi hedef model sağlayıcısının gerektirdiği belirli formata çevirmenin altında yatan karmaşıklığı yönetir.
LiteLLM'nin Temel Özellikleri:
- Birleşik Arayüz: 100'den fazla LLM sağlayıcısı genelinde tutarlı API çağrıları (
litellm.completion
,litellm.embedding
). - Sağlayıcıdan Bağımsız: Tek bir model dizesini değiştirerek modeller arasında (örneğin,
gpt-4o
'danollama/llama3
'e) kolayca geçiş yapın. - Sağlamlık: Zaman aşımı, yeniden denemeler ve yedeklemeler için yerleşik destek.
- Gözlemlenebilirlik: Langfuse, Helicone ve PromptLayer gibi platformlar için entegre günlük kaydı, geri aramalar ve destek.
- Proxy Sunucusu: Merkezi API anahtar yönetimi, yük dengeleme, yönlendirme ve farklı uygulamalar veya hizmetler arasında tutarlı erişim için bağımsız bir proxy sunucusu sunar.
- Maliyet Takibi: Çeşitli LLM API'leri genelinde harcamaları izlemeye yardımcı olur.
Neden LiteLLM'yi Ollama ile Kullanmalısınız?
Ollama ve LiteLLM'yi birleştirmek çeşitli avantajlar sunar:
- Standardizasyon: LiteLLM'nin standart arayüzünü kullanarak uygulama mantığı yazın, bu da yerel bir Ollama modeli (geliştirme, gizlilik, çevrimdışı kullanım için) ve güçlü bir bulut modeli (üretim, belirli yetenekler için) arasında temel kodu yeniden yazmadan sorunsuz bir şekilde geçiş yapmanızı sağlar.
- Basitleştirilmiş Yerel Entegrasyon: LiteLLM, Ollama'nın API'siyle Python uygulamalarınız içinde etkileşim kurmayı, istek biçimlendirmeyi ve yanıt ayrıştırmayı kolaylaştırır.
- Esneklik: LiteLLM çağrınızda model adını değiştirerek (örneğin,
ollama/llama3
yerineollama/mistral
) Ollama aracılığıyla kullanılabilen farklı yerel modellerle kolayca deneyler yapın. - LiteLLM Özelliklerinden Yararlanın: Yerel Ollama modellerini kullanırken bile, yeniden denemeler, yedeklemeler, günlük kaydı ve maliyet takibi gibi LiteLLM özelliklerinden yararlanın.
- Hibrit Yaklaşımlar: Maliyet, gecikme süresi veya görev gereksinimleri gibi faktörlere bağlı olarak istekleri yerel Ollama modellerine veya uzaktaki API'lere akıllıca yönlendirebilen uygulamalar oluşturun; bunların tümü LiteLLM aracılığıyla yönetilir (özellikle proxy'si aracılığıyla).
LiteLLM ve Ollama'yı Kullanmaya Hazırlanma
Başlamadan önce, gerekli araçların yüklü ve kurulu olduğundan emin olun.
LiteLLM bir Python kütüphanesidir, bu nedenle sisteminizde Python'un yüklü olması gerekir. LiteLLM, Python 3.8 veya daha yüksek bir sürüm gerektirir.
- Kurulumu Doğrulayın: Terminalinizi veya komut isteminizi açın ve şunu çalıştırın:
python --version
# veya
python3 --version
- Kurulum: Python'unuz yoksa veya daha yeni bir sürüme ihtiyacınız varsa, onu resmi Python web sitesinden (python.org) indirin veya Homebrew (macOS), apt (Debian/Ubuntu) veya Chocolatey (Windows) gibi bir paket yöneticisi kullanın.
- Pip: Python paket yükleyicisi olan
pip
'e sahip olduğunuzdan emin olun. Genellikle Python ile birlikte gelir.pip --version
veyapip3 --version
ile kontrol edebilirsiniz.
Ollama'yı Yükleyin ve Kurun
LiteLLM Python kodunuzu çalıştırmayı planladığınız makinede (veya farklı bir makinede çalışıyorsa ağ üzerinden erişilebilir) Ollama'nın yüklü ve çalışır durumda olması gerekir.
- İndirin ve Kurun: Ollama web sitesini (ollama.com) ziyaret edin ve işletim sisteminiz (macOS, Linux, Windows) için yükleyiciyi indirin. Kurulum talimatlarını izleyin.
- Kurulumu Doğrulayın: Kurulumdan sonra, yeni bir terminal penceresi açın ve şunu çalıştırın:
ollama --version
Bu, yüklü Ollama sürümünü görüntülemelidir.
Bir Ollama Modeli Çekme
Ollama'nın istekleri sunabilmesi için en az bir modelin indirilmesi gerekir. Llama 3 (8B instruct varyantı) gibi popüler bir model çekelim.
- Çekme Komutu: Terminalinizde şunu çalıştırın:
ollama pull llama3
Bu, Llama 3 model dosyalarını indirecektir. İnternet bağlantınıza ve model boyutuna bağlı olarak biraz zaman alabilir. llama3
'ü Ollama kütüphanesinde bulunan diğer modellerle değiştirebilirsiniz (örneğin, mistral
, phi3
, gemma:2b
). Tam liste için Ollama web sitesini kontrol edin.
LiteLLM'yi Yükleyin
Python ve Ollama hazır olduğunda, pip kullanarak LiteLLM'yi yükleyin.
- Kurulum Komutu: Terminalinizi veya komut isteminizi açın ve şunu çalıştırın:
pip install litellm
# veya pip3 kullanıyorsanız
# pip3 install litellm
- Doğrulama (İsteğe Bağlı): Bir Python yorumlayıcısında LiteLLM'yi içe aktararak kurulumu doğrulayabilirsiniz:
python # veya python3
>>> import litellm
>>> litellm.__version__
# Bu, hatalar olmadan yüklü sürümü yazdırmalıdır.
>>> exit()
Ollama'yı Yerel Olarak Çalıştırın
LiteLLM'nin Ollama API sunucusuna bağlanması gerekir. Ollama'nın çalıştığından emin olmanız gerekir.
Ollama'nın Çalıştığını Doğrulama
- macOS/Windows Masaüstü Uygulamaları: Masaüstü uygulamasını yüklediyseniz, Ollama genellikle kurulumdan sonra arka planda otomatik olarak çalışır. Menü çubuğunuzda (macOS) veya sistem tepsisinde (Windows) bir Ollama simgesi görmelisiniz.
- Linux / Manuel Başlatma: Linux'ta veya manuel kontrolü tercih ediyorsanız, Ollama sunucusunu açıkça başlatmanız gerekebilir. Bir terminal açın ve şunu çalıştırın:
ollama serve
Bu komut sunucuyu başlatır ve genellikle siz durdurana kadar (Ctrl+C) o terminal penceresinde çalışmaya devam eder. Bunu arka planda veya uzun süreli kullanım için bir sistem hizmeti olarak çalıştırmak isteyebilirsiniz.
- Durumu Kontrol Edin:
curl
(varsa) veya bir web tarayıcısı kullanarak varsayılan uç noktasına erişmeyi deneyerek sunucunun yanıt verip vermediğini kontrol edebilirsiniz:
curl http://localhost:11434
Ollama is running
gibi bir yanıt almalısınız. "connection refused" hatası alırsanız, Ollama büyük olasılıkla çalışmıyor veya farklı bir bağlantı noktası/adreste yapılandırılmış demektir.
Varsayılan olarak, Ollama API'sini şurada sunar:
- URL:
http://localhost:11434
LiteLLM, bu varsayılan adresi bilmek için önceden yapılandırılmıştır. Ollama örneğiniz farklı bir ana bilgisayarda veya bağlantı noktasında çalışıyorsa (örneğin, bağlantı noktası eşlemesi olan bir Docker kapsayıcısının içinde veya uzaktaki bir sunucuda), LiteLLM'ye onu nerede bulacağını söylemeniz gerekir (Yapılandırma bölümünde ele alınmıştır). Çoğu standart yerel kurulum için, varsayılan kutudan çıkar.
Ollama'ya İlk LiteLLM Çağrınızı Yapın
Şimdi, LiteLLM kullanarak Ollama aracılığıyla çalışan llama3
modeline bir istek göndermek için basit bir Python betiği yazalım.
Temel Python Betiği
Yeni bir Python dosyası oluşturun (örneğin, ollama_test.py
) ve aşağıdaki kodu ekleyin:
import litellm
import os
# İsteğe bağlı: Neler olduğunu görmek için LiteLLM için ayrıntılı günlük kaydı ayarlayın
# litellm.set_verbose = True
# Model adını tanımlayın - önemli: "ollama/" ile önek ekleyin
# 'llama3'ün `ollama pull llama3` ile çektiğiniz model olduğundan emin olun
model_name = "ollama/llama3"
# Sohbet tamamlaması için mesajları tanımlayın
messages = [
{"role": "system", "content": "Yardımsever bir asistansınız."},
{"role": "user", "content": "Gökyüzü neden mavi?"}
]
try:
print(f"--- {model_name} modeline istek gönderiliyor ---")
# litellm.completion işlevini çağırın
response = litellm.completion(
model=model_name,
messages=messages
)
# Yanıtı yazdırın
print("--- Yanıt ---")
# Yanıt nesnesi OpenAI yapısını yansıtır
# Mesaj içeriğine şu şekilde erişin:
message_content = response.choices[0].message.content
print(message_content)
# İnceleme için tüm yanıt nesnesini de yazdırabilirsiniz
# print("\n--- Tam Yanıt Nesnesi ---")
# print(response)
except Exception as e:
print(f"Bir hata oluştu: {e}")
İşlevi parçalayalım:
litellm.completion()
: Bu, metin tamamlamaları (sohbet tarzı tamamlamalar dahil) oluşturmak için LiteLLM'deki temel işlevdir.model
: Bu parametre, hangi modeli/sağlayıcıyı kullanacağınızı belirtir. Kritik olarak, Ollama modelleri için, model adının (Ollama tarafından bilindiği gibi) önüneollama/
eklemelisiniz. Böylece,llama3
ollama/llama3
olur,mistral
ollama/mistral
olur, vb. Bu, LiteLLM'ye isteği Ollama uyumlu bir uç noktaya yönlendirmesini söyler.messages
: Bu, standart OpenAI sohbet tamamlama formatını izler; her biri birrole
(system
,user
veyaassistant
) vecontent
içeren bir sözlük listesi.- Dönüş Değeri:
litellm.completion
tarafından döndürülenresponse
nesnesi, OpenAI API yanıt nesnesinin yapısını taklit eder. Bu tutarlılık, LiteLLM'nin temel bir faydasıdır. Genellikle oluşturulan metneresponse.choices[0].message.content
aracılığıyla erişirsiniz.
Bu noktaları göz önünde bulundurarak, işlevi çalıştıralım:
Ollama'nın çalıştığından (Adım 4'te doğrulandığı gibi) ve llama3
modelini çektiğinizden emin olun. Ardından, betiği terminalinizden çalıştırın:
python ollama_test.py
Şuna benzer bir çıktı görmelisiniz (tam metin modelin yanıtına göre değişecektir):
--- ollama/llama3 modeline istek gönderiliyor ---
--- Yanıt ---
Gökyüzü, Rayleigh saçılması adı verilen bir olgu nedeniyle mavi görünür. Dünyanın atmosferine ulaşan güneş ışığı, farklı dalga boylarına sahip farklı renklerden oluşur. Mavi ve mor ışık daha kısa dalga boylarına sahipken, kırmızı ve turuncu ışık daha uzun dalga boylarına sahiptir.
Güneş ışığı atmosferden geçerken, küçük gaz molekülleriyle (çoğunlukla azot ve oksijen) çarpışır. Bu moleküller güneş ışığını her yöne saçar. Daha kısa dalga boyları (mavi ve mor), daha uzun dalga boylarından (kırmızı ve turuncu) daha etkili bir şekilde saçılır.
Gözlerimiz mora göre maviye daha duyarlıdır ve bazı mor ışık atmosferin üst kısımlarında emilir, bu nedenle güneş yüksekteyken gündüzleri gökyüzünü öncelikle mavi olarak algılarız.
Gün doğumu ve gün batımına yakın, güneş ışığı gözlerimize ulaşmak için daha fazla atmosferden geçer. Mavi ışığın çoğu dağılır ve daha uzun dalga boylu kırmızı ve turuncu ışığın bize ulaşmasına izin verir, bu nedenle gün doğumu ve gün batımları genellikle kırmızımsı veya turuncumsu görünür.
Tebrikler! Yerel Ollama modelinizle iletişim kurmak için LiteLLM'yi başarıyla kullandınız.
Yayın Yanıtları Oluşturun
Etkileşimli uygulamalar (sohbet botları gibi) veya uzun yanıtlar oluştururken, tüm tamamlamanın tamamlanmasını beklemek kötü bir kullanıcı deneyimine yol açabilir. Yayın, yanıtı oluşturulduğu gibi token token almayı sağlar. LiteLLM bunu kolaylaştırır.
Neden Yayın?
- Algılanan Performansı İyileştirildi: Kullanıcılar çıktıyı hemen görür, bu da uygulamanın daha duyarlı hissetmesini sağlar.
- Uzun Yanıtları İşleme: Yanıtın tamamını beklemeden yanıtın bölümlerini işleyin, çok uzun metin oluşturma için kullanışlıdır.
- Gerçek Zamanlı Etkileşim: Gerçek zamanlı konuşma arayüzleri oluşturmayı sağlar.
LiteLLM ile Yayın Uygulama
Önceki betiği (ollama_test.py
) yayını etkinleştirmek için değiştirin:
import litellm
import os
# litellm.set_verbose = True # Hata ayıklama için isteğe bağlı
model_name = "ollama/llama3"
messages = [
{"role": "system", "content": "Öz bir şairsiniz."},
{"role": "user", "content": "Bir kedi hakkında kısa bir haiku yazın."}
]
try:
print(f"--- {model_name} modeline yayın isteği gönderiliyor ---")
# stream=True'yi ayarlayın
response_stream = litellm.completion(
model=model_name,
messages=messages,
stream=True # Yayını etkinleştir
)
print("--- Yayın Yanıtı ---")
full_response = ""
# Yayın parçacıklarını yineleyin
for chunk in response_stream:
# Her bir parçacık, OpenAI yayın parçacık yapısını taklit eder
# İçerik deltasına şu şekilde erişin:
content_delta = chunk.choices[0].delta.content
if content_delta: # Bu parçacıkta yeni içerik olup olmadığını kontrol edin
print(content_delta, end="", flush=True) # Yeni satır eklemeden hemen yazdırın
full_response += content_delta
print("\n--- Yayın Sonu ---")
# print(f"\nTamamen yeniden yapılandırılmış yanıt:\n{full_response}") # İsteğe bağlı: sonunda tam yanıtı gösterin
except Exception as e:
print(f"\nBir hata oluştu: {e}")
Değişiklikler:
stream=True
: Bu parametre,litellm.completion
çağrısına eklendi.- Yineleme: İşlev artık bir yineleyici (
response_stream
) döndürür. Bu yineleyici üzerinde döngü yapıyoruz. - Parçacık İşleme: Döngüdeki her
chunk
, yanıtın küçük bir bölümünü temsil eder. Yeni metin parçasınıchunk.choices[0].delta.content
kullanarak erişiyoruz.delta
özniteliği, önceki parçacıktan (genellikle birkaç karakter veya bir kelime) farkı içerir. print(..., end="", flush=True)
: Parçacık içeriğini hemen, yeni bir satır eklemeden yazdırır, çıktıyı hemen terminalde görünmesini sağlamak için çıktı arabelleğini temizler.
Bu güncellenmiş betiği çalıştırın:
python ollama_test.py
Haiku'nun kelime kelime veya karakter karakter terminalinizde göründüğünü göreceksiniz, bu da yayın davranışını gösterir.
LiteLLM + Ollama Kurulumunu Yapılandırma
LiteLLM, varsayılan Ollama kurulumlarıyla kutudan çıktığı gibi çalışırken, kurulumunuz standart http://localhost:11434
'ten farklıysa yapılandırmanız gerekebilir.
Varsayılan Davranış (Yerel Ana Bilgisayar)
Belirtildiği gibi, ollama/
önekini kullandığınızda LiteLLM otomatik olarak Ollama'nın http://localhost:11434
adresinde çalıştığını varsayar. Bu sizin kurulumunuzsa, ek yapılandırmaya gerek yoktur.
Ortam Değişkenlerini Kullanma (İsteğe Bağlı)
Ollama farklı bir ana bilgisayarda veya bağlantı noktasında çalışıyorsa, LiteLLM'ye onu nerede bulacağını ortam değişkenlerini kullanarak söyleyebilirsiniz. LiteLLM, API uç noktalarını yapılandırmak için belirli ortam değişkenlerini kontrol eder. Belirli bir Ollama modeli (veya genel bir geçersiz kılma istiyorsanız tüm Ollama modelleri) için, temel URL'sini ayarlayabilirsiniz.
Örneğin, Ollama örneğiniz http://192.168.1.100:11434
adresinde çalışıyorsa, Python betiğinizi çalıştırmadan önce bir ortam değişkeni ayarlayabilirsiniz:
Linux/macOS:
export OLLAMA_API_BASE="http://192.168.1.100:11434"
python your_script.py
Windows (Komut İstemi):
set OLLAMA_API_BASE=http://192.168.1.100:11434
python your_script.py
Windows (PowerShell):
$env:OLLAMA_API_BASE = "http://192.168.1.100:11434"
python your_script.py
Şimdi, betiğiniz litellm.completion(model="ollama/llama3", ...)
çağrısı yaptığında, LiteLLM OLLAMA_API_BASE
ortam değişkenini arayacak ve varsayılan localhost
yerine o URL'yi kullanacaktır.
Not: OLLAMA_API_BASE
'i ayarlamak, ollama/
ile başlayan tüm modeller için temel URL'yi geçersiz kılar. Gerekirse daha ayrıntılı ortam değişkeni kontrolleri için LiteLLM belgelerine bakın (örneğin, belirli bir model takma adı için temel URL'yi ayarlama).
Bir Yapılandırma Dosyası Kullanma (İsteğe Bağlı)
Birden fazla model, özel ayarlar veya ortam değişkenlerinden kaçınma içeren daha karmaşık yapılandırmalar için, LiteLLM bir yapılandırma dosyasını (config.yaml
veya belirtilen yol) destekler.
Betiğinizle aynı dizinde (veya başka bir yerde) bir config.yaml
dosyası oluşturun ve LiteLLM'yi ona yönlendirin:
# config.yaml
model_list:
- model_name: ollama/llama3 # litellm.completion'da kullandığınız ad
litellm_params:
model: ollama/llama3 # Sağlayıcı için gerçek model tanımlayıcısı
api_base: "http://localhost:11434" # Varsayılan, gerekirse değiştirin
- model_name: ollama/mistral-remote # Örnek: Uzak bir Ollama için takma ad
litellm_params:
model: ollama/mistral # Ollama 'mistral' bekliyor
api_base: "http://192.168.1.100:11434"
- model_name: gpt-4o-mini # Örnek: Ollama olmayan bir model dahil etme
litellm_params:
model: gpt-4o-mini
api_key: "os.environ/OPENAI_API_KEY" # Güvenli bir şekilde env var'dan okuyun
general_settings:
# İsteğe bağlı: Zaman aşımları gibi genel ayarları ayarlayın
# timeout: 300 # 5 dakika
# Yapılandırmada özel ortam değişkenleri de tanımlayabilirsiniz
environment_variables:
OPENAI_API_KEY: "" # Yer tutucular veya gerçek anahtarlar tanımlayın (daha az güvenli)
Bu yapılandırma dosyasını kullanmak için, LiteLLM'ye onu yüklemesini söylemeniz gerekir; genellikle uygulamanızın başında:
import litellm
import os
# Yapılandırmayı geçerli dizindeki config.yaml dosyasından yükleyin
# Ayrıca mutlak bir yol da sağlayabilirsiniz: litellm.load_config("path/to/your/config.yaml")
try:
litellm.load_config()
print("LiteLLM yapılandırması başarıyla yüklendi.")
except Exception as e:
print(f"Uyarı: LiteLLM yapılandırması yüklenemedi. Varsayılanlar kullanılıyor. Hata: {e}")
# Artık yapılandırmada tanımlanan model adlarını kullanabilirsiniz
try:
# Yapılandırmadan api_base'i alabilecek standart ollama/llama3'ü kullanma
response_local = litellm.completion(model="ollama/llama3", messages=[{"role": "user", "content": "Yerel testi"}])
print("Yerel Llama3 Yanıtı:", response_local.choices[0].message.content[:50], "...") # Parçacık yazdırın
# Uzak mistral modeli için tanımlanan takma adı kullanma
# response_remote = litellm.completion(model="ollama/mistral-remote", messages=[{"role": "user", "content": "Uzak testi"}])
# print("Uzak Mistral Yanıtı:", response_remote.choices[0].message.content[:50], "...")
except Exception as e:
print(f"Tamamlama sırasında bir hata oluştu: {e}")
Yapılandırma dosyası, potansiyel olarak farklı makinelerde çalışan Ollama örnekleri dahil olmak üzere, birden fazla model için ayarları yönetmek için yapılandırılmış bir yol sunar.
Temel çağrılar ve yayın ötesinde, LiteLLM, Ollama ile sorunsuz bir şekilde çalışan sağlamlığı ve gözlemlenebilirliği artıran özellikler sunar.
Model Takma Adı Verme
Yapılandırma dosyası takma ad tanımlamaya izin verirken, bunları programlı olarak da kaydedebilirsiniz. Bu, model adlarını basitleştirmek veya genel adları belirli Ollama modellerine eşlemek için kullanışlıdır.
import litellm
# Bir takma ad tanımlayın: "my-local-llm"yi "ollama/llama3"e eşleyin
litellm.register_model({
"my-local-llm": {
"model": "ollama/llama3",
# Bu takma ad için gerekirse burada api_base'i de belirleyebilirsiniz
# "api_base": "http://localhost:11434"
}
})
# Artık tamamlama çağrınızda takma adı kullanın
messages = [{"role": "user", "content": "Model takma adı verme hakkında bana bilgi verin."}]
response = litellm.completion(model="my-local-llm", messages=messages)
print(response.choices[0].message.content)
Hata İşleme ve Yeniden Denemeler
Ağ arızaları veya geçici Ollama sorunları meydana gelebilir. LiteLLM'nin yerleşik yeniden deneme mantığı vardır.
import litellm
import time
# Örnek: Ollama'yı geçici olarak kullanılamaz hale getirin (örneğin, `ollama serve`'ü durdurun)
print("Ollama'yı 10 saniye durdurma (mümkünse)... Bunu manuel olarak yapmanız gerekebilir.")
# os.system("ollama stop") # Bu komut mevcut olmayabilir; manuel durdurma daha güvenlidir
# time.sleep(10)
# print("Ollama'yı yeniden başlatma... Bunu manuel olarak yapmanız gerekebilir.")
# os.system("ollama serve &") # Arka planda başlat
# time.sleep(5) # Başlaması için zaman tanıyın
messages = [{"role": "user", "content": "Yeniden deneme çalışıyor mu?"}]
try:
# LiteLLM, belirli bağlantı hatalarında otomatik olarak yeniden deneyecektir
# Yeniden deneme sayısını, geri alma faktörünü vb. yapılandırabilirsiniz.
response = litellm.completion(
model="ollama/llama3",
messages=messages,
num_retries=3, # En fazla 3 yeniden deneme girişimi
timeout=10 # Her istek denemesi için bir zaman aşımı ayarlayın (saniye)
)
print("Yeniden denemelerden sonra (veya ilk denemede) başarı:")
print(response.choices[0].message.content)
except Exception as e:
# Bu, yeniden denemelerden sonra devam eden hataları (örneğin, model bulunamadı, yapılandırma hatası) yakalar
# Veya bağlantı hataları için tüm yeniden denemeler başarısız olursa.
print(f"Yeniden denemelerden sonra bir hata oluştu: {e}")
LiteLLM, yaygın geçici ağ hatalarını akıllıca yeniden dener. Yeniden deneme davranışını genel olarak veya çağrı başına özelleştirebilirsiniz.
Günlük Kaydı ve Geri Aramalar
LiteLLM, istek/yanıt verilerini kaydetmek veya başarılı çağrılarda veya hatalarda özel işlevleri (geri aramalar) tetiklemek için kancalar sağlar. Bu, izleme, hata ayıklama ve maliyet takibi için paha biçilmezdir (ancak maliyet takibi, sanal maliyetler atamadığınız sürece yerel Ollama için daha az alakalıdır).
import litellm
import logging
# Temel günlük kaydını yapılandırın
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
logger = logging.getLogger(__name__)
# Basit bir başarı geri arama işlevi tanımlayın
def log_success(kwargs, completion_response, start_time, end_time):
"""Başarılı bir LLM çağrısı hakkında ayrıntıları kaydeder."""
model = kwargs.get("model", "unknown_model")
input_text = kwargs.get("messages", [])[-1]['content'] if kwargs.get("messages") else "N/A"
output_text = completion_response.choices[0].message.content[:50] + "..." # Parçacık
duration = (end_time - start_time).total_seconds()
logger.info(f"Başarılı! Model: {model}, Süre: {duration:.2f}s, Giriş: '{input_text[:30]}...', Çıkış: '{output_text}'")
# Basit bir başarısızlık geri arama işlevi tanımlayın
def log_failure(kwargs, exception, start_time, end_time):
"""Başarısız bir LLM çağrısı hakkında ayrıntıları kaydeder."""
model = kwargs.get("model", "unknown_model")
duration = (end_time - start_time).total_seconds()
logger.error(f"Başarısız! Model: {model}, Süre: {duration:.2f}s, Hata: {exception}")
# Geri aramaları LiteLLM'ye kaydedin
litellm.success_callback = [log_success]
litellm.failure_callback = [log_failure]
# Şimdi bir çağrı yapın - geri aramalar otomatik olarak tetiklenecektir
messages = [{"role": "user", "content": "LiteLLM'de geri aramalar nasıl çalışır?"}]
try:
response = litellm.completion(model="ollama/llama3", messages=messages)
# print(response.choices[0].message.content) # Yine de yanıtı kullanabilirsiniz
except Exception as e:
pass # Başarısızlık geri araması zaten günlük kaydını işledi
# Başarısız olabilecek bir çağrı örneği (örne