Text Generation
Transformers
Safetensors
GGUF
llama
chatbot
multilingual
arabic
french
tamazight
english
conversational
text-generation-inference
4-bit precision
bitsandbytes
Instructions to use kaisser/LLM-Maroc with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use kaisser/LLM-Maroc with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="kaisser/LLM-Maroc") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("kaisser/LLM-Maroc") model = AutoModelForCausalLM.from_pretrained("kaisser/LLM-Maroc", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use kaisser/LLM-Maroc with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf kaisser/LLM-Maroc:BF16 # Run inference directly in the terminal: llama cli -hf kaisser/LLM-Maroc:BF16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf kaisser/LLM-Maroc:BF16 # Run inference directly in the terminal: llama cli -hf kaisser/LLM-Maroc:BF16
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf kaisser/LLM-Maroc:BF16 # Run inference directly in the terminal: ./llama-cli -hf kaisser/LLM-Maroc:BF16
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf kaisser/LLM-Maroc:BF16 # Run inference directly in the terminal: ./build/bin/llama-cli -hf kaisser/LLM-Maroc:BF16
Use Docker
docker model run hf.co/kaisser/LLM-Maroc:BF16
- LM Studio
- Jan
- vLLM
How to use kaisser/LLM-Maroc with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "kaisser/LLM-Maroc" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kaisser/LLM-Maroc", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/kaisser/LLM-Maroc:BF16
- SGLang
How to use kaisser/LLM-Maroc with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "kaisser/LLM-Maroc" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kaisser/LLM-Maroc", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "kaisser/LLM-Maroc" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kaisser/LLM-Maroc", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use kaisser/LLM-Maroc with Ollama:
ollama run hf.co/kaisser/LLM-Maroc:BF16
- Unsloth Studio
How to use kaisser/LLM-Maroc with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for kaisser/LLM-Maroc to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for kaisser/LLM-Maroc to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for kaisser/LLM-Maroc to start chatting
- Docker Model Runner
How to use kaisser/LLM-Maroc with Docker Model Runner:
docker model run hf.co/kaisser/LLM-Maroc:BF16
- Lemonade
How to use kaisser/LLM-Maroc with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull kaisser/LLM-Maroc:BF16
Run and chat with the model
lemonade run user.LLM-Maroc-BF16
List all available models
lemonade list
- Atomic Chat
| import { useEffect, useState } from 'react'; | |
| import { useAppContext } from '../utils/app.context'; | |
| import { OpenInNewTab, XCloseButton } from '../utils/common'; | |
| import { CanvasType } from '../utils/types'; | |
| import { PlayIcon, StopIcon } from '@heroicons/react/24/outline'; | |
| import StorageUtils from '../utils/storage'; | |
| const canInterrupt = typeof SharedArrayBuffer === 'function'; | |
| // adapted from https://pyodide.org/en/stable/usage/webworker.html | |
| const WORKER_CODE = ` | |
| importScripts("https://cdn.jsdelivr.net/pyodide/v0.27.2/full/pyodide.js"); | |
| let stdOutAndErr = []; | |
| let pyodideReadyPromise = loadPyodide({ | |
| stdout: (data) => stdOutAndErr.push(data), | |
| stderr: (data) => stdOutAndErr.push(data), | |
| }); | |
| let alreadySetBuff = false; | |
| self.onmessage = async (event) => { | |
| stdOutAndErr = []; | |
| // make sure loading is done | |
| const pyodide = await pyodideReadyPromise; | |
| const { id, python, context, interruptBuffer } = event.data; | |
| if (interruptBuffer && !alreadySetBuff) { | |
| pyodide.setInterruptBuffer(interruptBuffer); | |
| alreadySetBuff = true; | |
| } | |
| // Now load any packages we need, run the code, and send the result back. | |
| await pyodide.loadPackagesFromImports(python); | |
| // make a Python dictionary with the data from content | |
| const dict = pyodide.globals.get("dict"); | |
| const globals = dict(Object.entries(context)); | |
| try { | |
| self.postMessage({ id, running: true }); | |
| // Execute the python code in this context | |
| const result = pyodide.runPython(python, { globals }); | |
| self.postMessage({ result, id, stdOutAndErr }); | |
| } catch (error) { | |
| self.postMessage({ error: error.message, id }); | |
| } | |
| interruptBuffer[0] = 0; | |
| }; | |
| `; | |
| let worker: Worker; | |
| const interruptBuffer = canInterrupt | |
| ? new Uint8Array(new SharedArrayBuffer(1)) | |
| : null; | |
| const startWorker = () => { | |
| if (!worker) { | |
| worker = new Worker( | |
| URL.createObjectURL(new Blob([WORKER_CODE], { type: 'text/javascript' })) | |
| ); | |
| } | |
| }; | |
| if (StorageUtils.getConfig().pyIntepreterEnabled) { | |
| startWorker(); | |
| } | |
| const runCodeInWorker = ( | |
| pyCode: string, | |
| callbackRunning: () => void | |
| ): { | |
| donePromise: Promise<string>; | |
| interrupt: () => void; | |
| } => { | |
| startWorker(); | |
| const id = Math.random() * 1e8; | |
| const context = {}; | |
| if (interruptBuffer) { | |
| interruptBuffer[0] = 0; | |
| } | |
| const donePromise = new Promise<string>((resolve) => { | |
| worker.onmessage = (event) => { | |
| const { error, stdOutAndErr, running } = event.data; | |
| if (id !== event.data.id) return; | |
| if (running) { | |
| callbackRunning(); | |
| return; | |
| } else if (error) { | |
| resolve(error.toString()); | |
| } else { | |
| resolve(stdOutAndErr.join('\n')); | |
| } | |
| }; | |
| worker.postMessage({ id, python: pyCode, context, interruptBuffer }); | |
| }); | |
| const interrupt = () => { | |
| console.log('Interrupting...'); | |
| console.trace(); | |
| if (interruptBuffer) { | |
| interruptBuffer[0] = 2; | |
| } | |
| }; | |
| return { donePromise, interrupt }; | |
| }; | |
| export default function CanvasPyInterpreter() { | |
| const { canvasData, setCanvasData } = useAppContext(); | |
| const [code, setCode] = useState(canvasData?.content ?? ''); // copy to avoid direct mutation | |
| const [running, setRunning] = useState(false); | |
| const [output, setOutput] = useState(''); | |
| const [interruptFn, setInterruptFn] = useState<() => void>(); | |
| const [showStopBtn, setShowStopBtn] = useState(false); | |
| const runCode = async (pycode: string) => { | |
| interruptFn?.(); | |
| setRunning(true); | |
| setOutput('Loading Pyodide...'); | |
| const { donePromise, interrupt } = runCodeInWorker(pycode, () => { | |
| setOutput('Running...'); | |
| setShowStopBtn(canInterrupt); | |
| }); | |
| setInterruptFn(() => interrupt); | |
| const out = await donePromise; | |
| setOutput(out); | |
| setRunning(false); | |
| setShowStopBtn(false); | |
| }; | |
| // run code on mount | |
| useEffect(() => { | |
| setCode(canvasData?.content ?? ''); | |
| runCode(canvasData?.content ?? ''); | |
| // eslint-disable-next-line react-hooks/exhaustive-deps | |
| }, [canvasData?.content]); | |
| if (canvasData?.type !== CanvasType.PY_INTERPRETER) { | |
| return null; | |
| } | |
| return ( | |
| <div className="card bg-base-200 w-full h-full shadow-xl"> | |
| <div className="card-body"> | |
| <div className="flex justify-between items-center mb-4"> | |
| <span className="text-lg font-bold">Python Interpreter</span> | |
| <XCloseButton | |
| className="bg-base-100" | |
| onClick={() => setCanvasData(null)} | |
| /> | |
| </div> | |
| <div className="grid grid-rows-3 gap-4 h-full"> | |
| <textarea | |
| className="textarea textarea-bordered w-full h-full font-mono" | |
| value={code} | |
| onChange={(e) => setCode(e.target.value)} | |
| ></textarea> | |
| <div className="font-mono flex flex-col row-span-2"> | |
| <div className="flex items-center mb-2"> | |
| <button | |
| className="btn btn-sm bg-base-100" | |
| onClick={() => runCode(code)} | |
| disabled={running} | |
| > | |
| <PlayIcon className="h-6 w-6" /> Run | |
| </button> | |
| {showStopBtn && ( | |
| <button | |
| className="btn btn-sm bg-base-100 ml-2" | |
| onClick={() => interruptFn?.()} | |
| > | |
| <StopIcon className="h-6 w-6" /> Stop | |
| </button> | |
| )} | |
| <span className="grow text-right text-xs"> | |
| <OpenInNewTab href="https://github.com/ggerganov/llama.cpp/issues/11762"> | |
| Report a bug | |
| </OpenInNewTab> | |
| </span> | |
| </div> | |
| <textarea | |
| className="textarea textarea-bordered h-full dark-color" | |
| value={output} | |
| readOnly | |
| ></textarea> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| } | |