# Jedyne źródło prawdy o backendach LLM i modelach per rola. # # Kontrakt jest jeden: endpoint zgodny z API OpenAI pod CODEMOD_LLM_BASE_URL. # Backendy różnią się tym, jak ten endpoint powstaje - nie tym, co widzi silnik. # # `task llm:env` renderuje z tego pliku zmienne środowiskowe, # `task llm:up` uruchamia wskazany backend. default_backend: auto # auto = wykrycie platformy (macOS -> vllm-metal, Linux+NVIDIA -> vllm-gpu) backends: vllm-gpu: description: vLLM w kontenerze, Linux z GPU NVIDIA. Ścieżka najbliższa produkcji na OpenShifcie. platforms: [linux] requires: [docker, nvidia-gpu] provider: vllm base_url: http://localhost:8000/v1 api_key: not-required serve: model: Qwen/Qwen3-4B-Instruct-2507 # --enable-auto-tool-choice + parser są konieczne: agenci wołają narzędzia, # bez tego vLLM zwróci opis wywołania w treści zamiast tool_calls. args: - --max-model-len=16384 - --enable-auto-tool-choice - --tool-call-parser=hermes - --gpu-memory-utilization=0.90 models: planner: Qwen/Qwen3-4B-Instruct-2507 coder: Qwen/Qwen3-4B-Instruct-2507 reviewer: Qwen/Qwen3-4B-Instruct-2507 scribe: Qwen/Qwen3-4B-Instruct-2507 vllm-metal: description: > vLLM natywnie na Apple Silicon przez plugin vllm-project/vllm-metal (backend MLX). Docker na macOS nie ma dostępu do Metala, więc kontener nie jest tu opcją. platforms: [darwin] requires: [python3.12-arm64, xcode-cli] provider: vllm base_url: http://localhost:8000/v1 api_key: not-required serve: model: mlx-community/Qwen3-4B-Instruct-2507-4bit args: - --max-model-len=16384 - --enable-auto-tool-choice - --tool-call-parser=hermes models: planner: mlx-community/Qwen3-4B-Instruct-2507-4bit coder: mlx-community/Qwen3-4B-Instruct-2507-4bit reviewer: mlx-community/Qwen3-4B-Instruct-2507-4bit scribe: mlx-community/Qwen3-4B-Instruct-2507-4bit ollama: description: > Wariant awaryjny na obie platformy. Nie jest vLLM, ale wystawia /v1 zgodne z OpenAI i wstaje jedną komendą. Na macOS instaluj natywnie (Metal) - w Dockerze liczy na CPU. platforms: [linux, darwin] requires: [ollama] provider: openai_like base_url: http://localhost:11434/v1 api_key: ollama serve: model: qwen3:4b-instruct args: [] models: planner: qwen3:4b-instruct coder: qwen3:4b-instruct reviewer: qwen3:4b-instruct scribe: qwen3:4b-instruct mock: description: > Atrapa z llm/mock_server.py. Zero pobierania, zero GPU, deterministyczne odpowiedzi zestrojone z fixture'em acme-app. Do testów ścieżki agentowej w CI, nie do pracy. platforms: [linux, darwin, windows] requires: [] provider: openai_like base_url: http://127.0.0.1:8077/v1 api_key: mock serve: model: mock/agentic-codemod args: [] models: planner: mock/agentic-codemod coder: mock/agentic-codemod reviewer: mock/agentic-codemod scribe: mock/agentic-codemod # Rekomendacje przy dobieraniu większych modeli (rola -> czego wymaga): # coder - najważniejszy: stabilne tool-calling i trzymanie się formatu edycji # planner - rozumowanie o zakresie zmiany; zysk z większego modelu jest tu wyraźny # reviewer - może być ten sam co planner; osobny model bywa lepszy (inny punkt widzenia) # scribe - najmniejszy wystarczy, to redakcja tekstu