Skocz do zawartości

LiteLLM


SeeM

Rekomendowane odpowiedzi

LiteLLM to jest takie jakby HAProxy dla klientów modeli językowych. Żeby nie łączyły się od razu do API Ollamy, ani do chmury, ale żeby było coś po drodze. Pełni rolę ogranicznika oraz wystawia swoje własne klucze, dzięki czemu ryzyko wklejenia wrażliwego klucza API przez użytkownika maleje do zera. 

Potrzebuje to bazy na Postgresie. Trzeba utworzyć bazę, rolę i nadać poniższe uprawnienia.

# \c litellm
You are now connected to database "litellm" as user "postgres".
# grant all ON database litellm to litellm;
# grant CONNECT on database litellm to litellm;
# GRANT ALL PRIVILEGES ON SCHEMA public TO litellm;
# ALTER ROLE "litellm" WITH LOGIN;

Na razie testuję to sobie na venv w Pythonie 3.12 i takich oto zależnościach:

aiohappyeyeballs==2.7.1
aiohttp==3.14.3
aiosignal==1.4.0
annotated-doc==0.0.5
annotated-types==0.8.0
anyio==4.15.1  
APScheduler==3.11.3
attrs==26.1.0 
azure-core==1.41.0       
azure-identity==1.25.3
azure-storage-blob==12.30.1
backoff==2.2.1  
boto3==1.43.89
botocore==1.43.89
certifi==2026.7.22       
cffi==2.1.1          
charset-normalizer==3.5.1
click==8.5.0 
croniter==6.2.4
cryptography==50.0.1
distro==1.9.0               
dnspython==2.8.0    
email-validator==2.3.0  
Expression==5.7.0
fastapi==0.141.1
fastapi-sso==0.22.0
fastuuid==0.14.0
filelock==3.32.5
frozenlist==1.8.0    
fsspec==2026.7.0
granian==2.8.2   
gunicorn==23.0.0
h11==0.16.0       
hf-xet==1.6.0
hiredis==3.4.1
httpcore==1.0.9  
httpx==0.28.1        
httpx-sse==0.4.3
huggingface_hub==1.30.0
idna==3.19        
importlib_metadata==8.9.0
inquirerpy==0.3.4
isodate==0.7.2          
Jinja2==3.1.6            
jiter==0.16.0 
jmespath==1.1.0
jsonschema==4.26.0
jsonschema-specifications==2025.9.1
litellm==1.99.0
litellm-enterprise==0.1.59
litellm-proxy-extras==0.4.89
markdown-it-py==4.2.0
MarkupSafe==3.0.3                                                                          
mcp==1.29.1
mdurl==0.1.2
msal==1.38.0
msal-extensions==1.3.1
multidict==6.7.1
nodeenv==1.10.0
numpy==2.5.2
oauthlib==3.3.1
openai==2.54.0
orjson==3.12.0
packaging==26.3
pfzy==0.3.4
polars==1.44.1
polars-runtime-32==1.44.1
prisma==0.13.0
prompt_toolkit==3.0.53
propcache==0.5.2
pycparser==3.0
pydantic==2.13.5
pydantic-settings==2.15.0
pydantic_core==2.46.5
Pygments==2.21.0
PyJWT==2.13.0
PyNaCl==1.6.2
pyroscope-io==0.8.16
python-dateutil==2.9.0.post0
python-dotenv==1.2.3
python-multipart==0.0.32
PyYAML==6.0.3
redis==8.1.0
referencing==0.37.0
regex==2026.9.3
requests==2.34.2
RestrictedPython==8.5
rich==13.9.4
rpds-py==2026.6.3
rq==2.12.0
s3transfer==0.19.2
six==1.17.0
sniffio==1.3.1
soundfile==0.14.0
sse-starlette==3.4.11
starlette==1.6.0
tiktoken==0.14.0
tokenizers==0.23.2
tomlkit==0.15.1
tqdm==4.70.0
typing-inspection==0.4.4
typing_extensions==4.16.0
tzlocal==5.4.4
urllib3==2.7.0
uvicorn==0.52.4
uvloop==0.22.1
wcwidth==0.8.3
websockets==15.0.1
yarl==1.24.5
zipp==4.1.0

Co potem? Konfiguracja jest trochę zakręcona. Trzeba sobie najpierw zorganizować Ollamę z jakimiś modelami. Potem trzeba napisać plik konfiguracyjny litellm_config.yaml dla LiteLLM:

model_list:
  - model_name: granite
    litellm_params:
      model: ollama/granite4.2:8b
      api_base: http://host.local:11434
 
  - model_name: gemma
    litellm_params:
      model: ollama/gemma4:12b
      api_base: http://host.local:11434
 
  - model_name: qwen
    litellm_params:
      model: ollama/qwen3.5:9b
      api_base: http://host.local:11434
 
  - model_name: bielik
    litellm_params:
      model: ollama/bielik-11b:Q5_K_M
      api_base: http://host.local:11434
 
router_settings:
  routing_strategy: latency-based-routing
  num_retries: 2
  timeout: 601
  fallbacks:
    - granite: ["qwen"]
    - bielik: ["gemma"]

general_settings:
  master_key: admin
  store_prompts_in_spend_logs: true
  ###disable_env_credential_login: true
  database_url: "postgresql://litellm:[haslo_uzytkownika]@[host.bazodanowy.local]:5432/litellm"

Teraz trzeba - ręcznie, bo LiteLLM sam tego nie robi - utworzyć tabele w bazie danych:

prisma generate --schema lib/python3.12/site-packages/litellm/proxy/schema.prisma

Zajmuje to zadziwiająco dużo czasu. Wygląda, jakby coś się zawiesiło, ale w końcu przejdzie.

Uruchomienie LiteLLM:

litellm --config litellm_config.yaml --port 4040

To również zajmuje bardzo dużo czasu. W końcu przejdzie.

W przeglądarce trzeba wejść na stronę http://127.0.0.1:4040/ui/login/ i zalogować się:

  • użytkownik: admin
  • hasło: admin

Hasło wynika z ustawienia general_settings.master_key z pliku litellm_config.yaml . Najważniejsze ustawienia są na stronie http://127.0.0.1:4040/ui/api-keys/ , gdzie można dodać nowy klucz, przypisać go do użytkowników, modeli i ustawić różne ograniczenia. Potem ten właśnie klucz podaje się na kliencie. Poniżej przykład uruchomienia aider:

AIDER_ANALYTICS_DISABLE=true AIDER_CHECK_UPDATE=false AIDER_YES_ALWAYS=true AIDER_DARK_MODE=true LITELLM_PROXY_API_BASE=http://127.0.0.1:4040 LITELLM_PROXY_API_KEY=sk-[token_w_litellm] aider --model=litellm_proxy/granite

Najlepiej byłoby uruchomić LiterLLM na zdalnym hoście, którym nie jest host z Ollamą. Wówczas można ładnie odseparować sieciowo klientów od Ollamy i zwyczajnie zmusić użytkowników do przechodzenia przez proxy. 

Pracuję jeszcze nad ukonteneryzowaniem tego LiteLLM na bazie CentOS, czy innym RHEL. Z jednej strony wydaje się to żadnym problemem, ale procedura przechodzenia przez migrację bazy danych oraz ustawienie master_key, a później jego odwołanie za pomocą ustawienia disable_env_credential_login: true i późniejsza konieczność zrestartowania aplikacji nie pomagają. Dodatkowo wszystkie ustawienia z pliku konfiguracyjnego są jakby "zamrożone" i nie można ich zmienić, klikając po panelu administracyjnym. Z jednej strony fajne, bo nikt niechcący nie zepsuje. Gorzej, kiedy na hoście z Ollamą aktualizuje się modele i wówczas trzeba poprawić plik konfiguracyjny LiteLLM i oczywiście restartować aplikację. 

---------------------------------------------------------------------------------------

Podsumowując. Bardzo mi się to podoba, ale widać, że projekt nie wyszedł z bety. Wersja z powyższego requirements.txt mi działa, ale na poprzedniej nie mogłem zrobić migracji bazy, z powodu jakiegoś błędu nawet nie w LiteLLM, tylko w prisma. Czuć trochę, że autorzy LiteLLM do Postgresa wolą się nie dotykać.

Nawet u siebie w mieszkaniu ustawię to sobie na domowym serwerku chociażby po to, żeby mieć w logach aplikacji wszystkie prompty.

Powodzenia!

litellm_02.jpg

litellm_03.jpg

litellm_06.jpg

litellm_04.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

Być może zadam pytanie, godne najbardziej niekumatego lamera. Ale czy aby TO odpalić potrzeba czegoś takiego jak NPU czy GPU z CUDA ?

w pliku konfiguracyjnym widzę odniesienie do mi. Bielika, więc wnioskuję że ... chyba tak

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie jest jak najbardziej na miejscu. Stos technologiczny do obsługi SI puchnie w zastraszającym tempie. Instaluje się to łatwo, bo są obrazy kontenerowe, ale one pięknie ukrywają, jak niektóre rzeczy są drutowane. Utrzymanie i aktualizowanie tego, to już zupełnie inny temat.

LiteLLM Proxy to zwykła aplikacja w Pythonie i będzie działać na byle drewniaku. Nie będą za to działać modele SI. Nawet tycie Gemma, Granit, Qwen, czy Bielik właśnie, bez vram-u są tragicznie wolne. Model z rozumowaniem (to znaczy pisaniem promptów i liczeniem na nie odpowiedzi kilkanaście razy przed odowiedzią na prompt użytkownika) na samym CPU potrzebuje jakiś 20 minut na przepis do naleśników. To jak granie w Cyberpunka na Playstation 4, co może udawać jakiś rodzaj zabawy. 

Nawet GPU z 8 gigabajtami pamięci - tylko takie z 2023 roku najdalej, bo architektura scalaków też ma znaczenie - robi niesamowitą rożnicę. Wspomniane malutkie modele prototypowanie html, Pythona, Javy, czy redagowanie CV (w przypadku Bielika nawet po polsku) to ogarniają.

To oczywiście zabawka w porównaniu z chmurowymi potworami, ale mi właśnie idzie o zabawę. Zapłacić zawsze zdążę. 

Odnośnik do komentarza
Udostępnij na innych stronach

Oki doki ! To jeszcze jedno, krótkie pytanie. Czy LLM na dedykowanych Radeonach - oczywiście pod Linuksem (z tego względu właśnie mam na mysli team czerwonych) - ma w ogóle sens - choć są takie projekty jak choćby ZLUDA, które w pewien sposób rzucają pozytywne światło. Chyba że są LLM które nawiązują w API do Radeonów - wówczas pytanie jest zbędne.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Sztuczna inteligencja to na dzisiaj Nvidia, Nvidia, Nvidia, jakieś mocne minikomputery Apple, potem Radeon. Intel ma bardzo pog górkę, bo niektóre aplikacje musieli forkować, żeby w ogóle zadziałały.

Spróbuj, nic nie zaszkodzi. https://docs.ollama.com/linux Link "manual install" prowadzi do instrukcji zawierającej dodatkowe informacje o Radeonach.

Kiedy archiwa z Ollamą będą rozpakowane i 

ollama serve

zadziała, pobierz chyba najmniejszy sensowny model językowy https://ollama.com/library/gemma3 . To trochę starsza technologia i trzeba mu promptować po angielsku, ale to i tak tylko do testów.

Jeżeli będzie działać szybko, to będzie jak na jutubowych filmach o sztucznej. Jeżeli będzie działać wolno... to będziesz wiedział, bo zobaczysz jakieś 2-4 tokeny na sekundę. 

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję za bardzo klarowną esencję. Na notebooku będzie dużo wolniej... GPU na piecyku ~140 W w lapku ~40 W. Różnica musi być widoczna. Osobiście wolałbym machnąć używanego lapka z >=2023r., ponieważ niespecjalnie mam miejsce na desktop. 

Odnośnik do komentarza
Udostępnij na innych stronach

Poborem prądu nie musisz się aż tak sugerować. Bywały krótkie serie powiedzmy specjalistycznych GPU dla stacji roboczych z AutoCAD i innych w rodzaju - to się może renderować całą noc, poza tym tego komputera i tak nigdy nie wyłączam. Na przykład nvidia A1000, czyli laptopowa grafika upchana na kartę pci. Nie bardzo się to przyjęło ze względu na wysoką cenę, ale pobór mocy ma max 50 watów na obciążeniu. A kiedy nic nie robi, to kilka watów idzie pewnie glównie na wentylator. Jeżeli host nie ma zainstalowanego pulpitu, tylko Ollamę, to stosownie odchudzona i przedestylowana Gemma4 chodzi szybko.

Nie polecam kupowania używanych GPU. To bywają bardzo przepracowane egzemplarze z koparek, johntheripper-a, czy ostatnio komputerów z LLM w kącie biura. Wiele życia przed nimi już nie ma. Te wszystkie filmiki, jak to starsze nvidia 3060 są świetne jako tani wstęp do SI traktuj z ostrożnością. Zwłaszcza, jeżeli pod filmem są linki afiliacyjne. 

Odnośnik do komentarza
Udostępnij na innych stronach

W co ja wdepnąłem ?

time=2026-09-29T09:31:39.746+02:00 level=INFO source=runner.go:60 msg="discovering available GPUs..."
time=2026-09-29T09:31:39.862+02:00 level=INFO source=runner.go:405 msg="dropping integrated GPU; to enable, set OLLAMA_IGPU_ENABLE=1" id=0 library=Vulkan compute=0.0 name=Vulkan0 description="Intel(R) Iris(R) Xe Graphics (TGL GT2)" pci_id=0000:00:02.0
time=2026-09-29T09:31:39.862+02:00 level=INFO source=types.go:50 msg="inference compute" id=cpu library=cpu compute="" name=cpu description=cpu libdirs=ollama driver="" pci_id="" type="" total="7.5 GiB" available="4.2 GiB"
time=2026-09-29T09:31:39.862+02:00 level=INFO source=routes.go:2058 msg="vram-based default context" total_vram="0 B" default_num_ctx=4096
time=2026-09-29T09:31:39.986+02:00 level=INFO source=model_recommendations.go:177 msg="model recommendations cache sleep scheduled" wait=4h27m51.864024096s consecutive_failures=0

time=2026-09-29T13:59:32.173+02:00 level=INFO source=model_recommendations.go:177 msg="model recommendations cache sleep scheduled" wait=4h1m12.316846794s consecutive_failures=0
time=2026-09-29T18:00:44.777+02:00 level=INFO source=model_recommendations.go:177 msg="model recommendations cache sleep scheduled" wait=3h12m3.195615383s consecutive_failures=0

to już ponad 8 godzin. A tu jeszcze tyle ... i to tylko konfiguracja :)

Ale ze mnie łosiu... A zdemnizować przed użyciem, niełaska ?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...