diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml new file mode 100644 index 0000000..931d0ea --- /dev/null +++ b/.forgejo/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # requires-python = ">=3.10"; test the floor and a recent version. + python-version: ["3.10", "3.12"] + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install package with dev extras + run: pip install -e ".[dev]" + + - name: Run test suite + run: pytest -q diff --git a/.gitignore b/.gitignore index 8eb6f02..75228bf 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,7 @@ venv/ # Runtime lock files *.lock + +# Local runtime config (machine-specific; may hold an api_key). +# The tracked template is llama.cpp.config.example — copy it to get started. +llama.cpp.config diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8e611ff --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Dieter Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/llama.cpp.config b/llama.cpp.config deleted file mode 100644 index f743890..0000000 --- a/llama.cpp.config +++ /dev/null @@ -1,79 +0,0 @@ -# llama.cpp.config.example -# -# Copy this file to llama.cpp.config and adjust it for your host before -# running llamacppctl. See docs/SECURITY_AND_OPERATIONS.md for details on -# every field and on the security model for --system-url/--prompt-url. -# -# Section types: -# [default] global defaults, merged over the built-in fallbacks -# [model.] a model profile, selected via --profile -# [prompt.] a system-prompt profile, selected via --system-prompt-profile -# -# container_name is MANDATORY and must be unique per profile you intend to -# run concurrently: it is the single identity anchor for Docker naming, -# locking (--change), and --stop/--check targeting. - -[default] -image = ghcr.io/ggml-org/llama.cpp:server-cuda -hf_home = ${HF_HOME} -model_path = models/qwen3/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf -container_name = llama_cpp_server -host_port = 8001 -container_port = 8000 -model_alias = default_llm -gpu_device = 1 -restart_policy = unless-stopped -# Groß-Profil für literarische Texte / durchdachte Reden: volles -# 256k-Kontextfenster (= n_ctx_train des Modells) und sehr lange Antworten. -# Empirisch gemessen passt der q4_0-KV-Cache dafür knapp auf EINE 24-GB-3090 -# (~22,6 GB inkl. 21-GB-Modell). Bei Bedarf auf 131072/65536 senken. -ctx_size = 262144 -n_predict = 32768 -temp = 0.65 -top_p = 0.80 -top_k = 20 -min_p = 0.01 -repeat_penalty = 1.05 -main_gpu = 0 -ngl = 999 -fa = true -kv_unified = true -jinja = true -reasoning = on -no_context_shift = true -cache_type_k = q4_0 -cache_type_v = q4_0 -batch_size = 1024 -ubatch_size = 512 -parallel = 1 -cont_batching = true -health_endpoint = /health -models_endpoint = /v1/models -chat_endpoint = /v1/chat/completions -timeout = 300 -poll_interval = 2 -# Chat-Antwortbudget (Reasoning-Modell braucht viel; für lange Texte hoch): -max_tokens = 32768 -# chat_temperature leer lassen -> Server-Temp (temp oben) gilt. -chat_temperature = - -# Modell-Profile: erben ALLES aus [default] (Port 8001, Container -# llama_cpp_server, Alias default_llm, gpu_device 1, ctx_size 262144) und -# überschreiben NUR das Modell. Es läuft also immer ein Modell auf dem -# Standard-Port; --start/--change tauscht es aus. Wer Modelle GLEICHZEITIG -# betreiben will, gibt dem Profil zusätzlich einen eigenen container_name + -# host_port (Muster siehe llama.cpp.config.example). -[model.carnice] -model_path = models/qwen3/Carnice-Qwen3.6-MoE-35B-A3B-Q4_K_M.gguf - -[model.qwen27b] -model_path = models/qwen3/Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ4_XS.gguf - -[model.qwopus] -model_path = models/qwen3/Qwopus3.6-35B-A3B-v1-Q4_K_M.gguf - -[prompt.concise] -system_prompt = Du antwortest kurz, präzise und technisch. - -[prompt.coding] -system_prompt = Du bist ein erfahrener Linux-, Python- und LLM-Infrastruktur-Engineer.