Safetensors
GGUF
Turkish
llama
Llama-3
instruct
finetune
chatml
gpt4
synthetic data
distillation
function calling
json mode
axolotl
roleplaying
chat
Instructions to use tda45/TdAI with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- llama-cpp-python
How to use tda45/TdAI with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="tda45/TdAI", filename="llama.cpp/models/ggml-vocab-aquila.gguf", )
output = llm( "Once upon a time,", max_tokens=512, echo=True ) print(output)
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use tda45/TdAI 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 tda45/TdAI # Run inference directly in the terminal: llama cli -hf tda45/TdAI
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf tda45/TdAI # Run inference directly in the terminal: llama cli -hf tda45/TdAI
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 tda45/TdAI # Run inference directly in the terminal: ./llama-cli -hf tda45/TdAI
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 tda45/TdAI # Run inference directly in the terminal: ./build/bin/llama-cli -hf tda45/TdAI
Use Docker
docker model run hf.co/tda45/TdAI
- LM Studio
- Jan
- Ollama
How to use tda45/TdAI with Ollama:
ollama run hf.co/tda45/TdAI
- Unsloth Studio
How to use tda45/TdAI 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 tda45/TdAI 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 tda45/TdAI to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for tda45/TdAI to start chatting
- Atomic Chat new
- Docker Model Runner
How to use tda45/TdAI with Docker Model Runner:
docker model run hf.co/tda45/TdAI
- Lemonade
How to use tda45/TdAI with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull tda45/TdAI
Run and chat with the model
lemonade run user.TdAI-{{QUANT_TAG}}List all available models
lemonade list
| import { ServerModelStatus } from '$lib/enums'; | |
| import { apiFetch, apiPost, normalizeModelName } from '$lib/utils'; | |
| import type { ParsedModelId } from '$lib/types/models'; | |
| import { | |
| MODEL_QUANTIZATION_SEGMENT_RE, | |
| MODEL_CUSTOM_QUANTIZATION_PREFIX_RE, | |
| MODEL_PARAMS_RE, | |
| MODEL_ACTIVATED_PARAMS_RE, | |
| MODEL_IGNORED_SEGMENTS, | |
| MODEL_WEIGHT_EXTENSION_RE, | |
| MODEL_ID_NOT_FOUND, | |
| MODEL_ID_ORG_SEPARATOR, | |
| MODEL_ID_SEGMENT_SEPARATOR, | |
| MODEL_ID_QUANTIZATION_SEPARATOR, | |
| API_MODELS | |
| } from '$lib/constants'; | |
| export class ModelsService { | |
| /** | |
| * | |
| * | |
| * Listing | |
| * | |
| * | |
| */ | |
| /** | |
| * Fetch list of models from OpenAI-compatible endpoint. | |
| * Works in both MODEL and ROUTER modes. | |
| * | |
| * @returns List of available models with basic metadata | |
| */ | |
| static async list(): Promise<ApiModelListResponse> { | |
| return apiFetch<ApiModelListResponse>(API_MODELS.LIST); | |
| } | |
| /** | |
| * Fetch list of all models with detailed metadata (ROUTER mode). | |
| * Returns models with load status, paths, and other metadata | |
| * beyond what the OpenAI-compatible endpoint provides. | |
| * | |
| * @returns List of models with detailed status and configuration info | |
| */ | |
| static async listRouter(): Promise<ApiRouterModelsListResponse> { | |
| return apiFetch<ApiRouterModelsListResponse>(API_MODELS.LIST); | |
| } | |
| /** | |
| * | |
| * | |
| * Load/Unload | |
| * | |
| * | |
| */ | |
| /** | |
| * Load a model (ROUTER mode only). | |
| * Sends POST request to `/models/load`. Note: the endpoint returns success | |
| * before loading completes — use polling to await actual load status. | |
| * | |
| * @param modelId - Model identifier to load | |
| * @param extraArgs - Optional additional arguments to pass to the model instance | |
| * @returns Load response from the server | |
| */ | |
| static async load(modelId: string, extraArgs?: string[]): Promise<ApiRouterModelsLoadResponse> { | |
| const payload: { model: string; extra_args?: string[] } = { model: modelId }; | |
| if (extraArgs && extraArgs.length > 0) { | |
| payload.extra_args = extraArgs; | |
| } | |
| return apiPost<ApiRouterModelsLoadResponse>(API_MODELS.LOAD, payload); | |
| } | |
| /** | |
| * Unload a model (ROUTER mode only). | |
| * Sends POST request to `/models/unload`. Note: the endpoint returns success | |
| * before unloading completes — use polling to await actual unload status. | |
| * | |
| * @param modelId - Model identifier to unload | |
| * @returns Unload response from the server | |
| */ | |
| static async unload(modelId: string): Promise<ApiRouterModelsUnloadResponse> { | |
| return apiPost<ApiRouterModelsUnloadResponse>(API_MODELS.UNLOAD, { model: modelId }); | |
| } | |
| /** | |
| * | |
| * | |
| * Status | |
| * | |
| * | |
| */ | |
| /** | |
| * Check if a model is loaded based on its metadata. | |
| * | |
| * @param model - Model data entry from the API response | |
| * @returns True if the model status is LOADED | |
| */ | |
| static isModelLoaded(model: ApiModelDataEntry): boolean { | |
| return model.status.value === ServerModelStatus.LOADED; | |
| } | |
| /** | |
| * Check if a model is currently loading. | |
| * | |
| * @param model - Model data entry from the API response | |
| * @returns True if the model status is LOADING | |
| */ | |
| static isModelLoading(model: ApiModelDataEntry): boolean { | |
| return model.status.value === ServerModelStatus.LOADING; | |
| } | |
| /** | |
| * | |
| * | |
| * Parsing | |
| * | |
| * | |
| */ | |
| /** | |
| * Parse a model ID string into its structured components. | |
| * | |
| * Handles conventions like: | |
| * `<org>/<ModelName>-<Parameters>(-<ActivatedParameters>)(-<Tags>)(-<Quantization>):<Quantization>` | |
| * `<ModelName>.<Quantization>` (dot-separated quantization, e.g. `model.Q4_K_M`) | |
| * | |
| * @param modelId - Raw model identifier string | |
| * @returns Structured {@link ParsedModelId} with all detected fields | |
| */ | |
| static parseModelId(modelId: string): ParsedModelId { | |
| const result: ParsedModelId = { | |
| raw: modelId, | |
| orgName: null, | |
| modelName: null, | |
| params: null, | |
| activatedParams: null, | |
| quantization: null, | |
| tags: [] | |
| }; | |
| // strip directory path and weight extension so a bare `-m /path/file.gguf` | |
| // parses like a clean repo id; the HF `org/model` form is preserved | |
| const source = normalizeModelName(modelId).replace(MODEL_WEIGHT_EXTENSION_RE, ''); | |
| // 1. Extract colon-separated quantization (e.g. `model:Q4_K_M`) | |
| const colonIdx = source.indexOf(MODEL_ID_QUANTIZATION_SEPARATOR); | |
| let modelPath: string; | |
| if (colonIdx !== MODEL_ID_NOT_FOUND) { | |
| result.quantization = source.slice(colonIdx + 1) || null; | |
| modelPath = source.slice(0, colonIdx); | |
| } else { | |
| modelPath = source; | |
| } | |
| // 2. Extract org name (e.g. `org/model` -> org = "org") | |
| const slashIdx = modelPath.indexOf(MODEL_ID_ORG_SEPARATOR); | |
| let modelStr: string; | |
| if (slashIdx !== MODEL_ID_NOT_FOUND) { | |
| result.orgName = modelPath.slice(0, slashIdx); | |
| modelStr = modelPath.slice(slashIdx + 1); | |
| } else { | |
| modelStr = modelPath; | |
| } | |
| // 3. Handle dot-separated quantization (e.g. `model-name.Q4_K_M`) | |
| const dotIdx = modelStr.lastIndexOf('.'); | |
| if (dotIdx !== MODEL_ID_NOT_FOUND && !result.quantization) { | |
| const afterDot = modelStr.slice(dotIdx + 1); | |
| if (MODEL_QUANTIZATION_SEGMENT_RE.test(afterDot)) { | |
| result.quantization = afterDot; | |
| modelStr = modelStr.slice(0, dotIdx); | |
| } | |
| } | |
| const segments = modelStr.split(MODEL_ID_SEGMENT_SEPARATOR); | |
| // 4. Detect trailing quantization from dash-separated segments | |
| // Handle UD-prefixed quantization (e.g. `UD-Q8_K_XL`) and | |
| // standalone quantization (e.g. `Q4_K_M`, `BF16`, `F16`, `MXFP4`) | |
| if (!result.quantization && segments.length > 1) { | |
| const last = segments[segments.length - 1]; | |
| const secondLast = segments.length > 2 ? segments[segments.length - 2] : null; | |
| if (MODEL_QUANTIZATION_SEGMENT_RE.test(last)) { | |
| if (secondLast && MODEL_CUSTOM_QUANTIZATION_PREFIX_RE.test(secondLast)) { | |
| result.quantization = `${secondLast}-${last}`; | |
| segments.splice(segments.length - 2, 2); | |
| } else { | |
| result.quantization = last; | |
| segments.pop(); | |
| } | |
| } | |
| } | |
| // 5. Find params and activated params | |
| let paramsIdx = MODEL_ID_NOT_FOUND; | |
| let activatedParamsIdx = MODEL_ID_NOT_FOUND; | |
| for (let i = 0; i < segments.length; i++) { | |
| const seg = segments[i]; | |
| if (paramsIdx === MODEL_ID_NOT_FOUND && MODEL_PARAMS_RE.test(seg)) { | |
| paramsIdx = i; | |
| result.params = seg.toUpperCase(); | |
| } else if (paramsIdx !== MODEL_ID_NOT_FOUND && MODEL_ACTIVATED_PARAMS_RE.test(seg)) { | |
| activatedParamsIdx = i; | |
| result.activatedParams = seg.toUpperCase(); | |
| } | |
| } | |
| // 6. Model name = segments before params; tags = remaining segments after params | |
| const pivotIdx = paramsIdx !== MODEL_ID_NOT_FOUND ? paramsIdx : segments.length; | |
| result.modelName = segments.slice(0, pivotIdx).join(MODEL_ID_SEGMENT_SEPARATOR) || null; | |
| if (paramsIdx !== MODEL_ID_NOT_FOUND) { | |
| result.tags = segments.slice(paramsIdx + 1).filter((_, relIdx) => { | |
| const absIdx = paramsIdx + 1 + relIdx; | |
| if (absIdx === activatedParamsIdx) return false; | |
| return !MODEL_IGNORED_SEGMENTS.has(segments[absIdx].toUpperCase()); | |
| }); | |
| } | |
| return result; | |
| } | |
| } | |