Text Generation
Transformers
Safetensors
English
Chinese
qwen3
ksa
ksa-v1
custom_code
long-context
conversational
text-generation-inference
Instructions to use OpenOneRec/KSA-1.9B-base with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use OpenOneRec/KSA-1.9B-base with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="OpenOneRec/KSA-1.9B-base", trust_remote_code=True) messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("OpenOneRec/KSA-1.9B-base", trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained("OpenOneRec/KSA-1.9B-base", trust_remote_code=True, 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=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use OpenOneRec/KSA-1.9B-base with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "OpenOneRec/KSA-1.9B-base" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OpenOneRec/KSA-1.9B-base", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/OpenOneRec/KSA-1.9B-base
- SGLang
How to use OpenOneRec/KSA-1.9B-base 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 "OpenOneRec/KSA-1.9B-base" \ --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": "OpenOneRec/KSA-1.9B-base", "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 "OpenOneRec/KSA-1.9B-base" \ --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": "OpenOneRec/KSA-1.9B-base", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use OpenOneRec/KSA-1.9B-base with Docker Model Runner:
docker model run hf.co/OpenOneRec/KSA-1.9B-base
Download summary_context.py from OpenOneRec/KSA-1.9B-base: direct link, hf CLI and curl.
- Browser
- Download file 4.28 kB
-
https://huggingface.co/OpenOneRec/KSA-1.9B-base/resolve/main/summary_context.py
- Command line
-
hf download hf://OpenOneRec/KSA-1.9B-base/summary_context.py
-
curl -L -o summary_context.py https://huggingface.co/OpenOneRec/KSA-1.9B-base/resolve/main/summary_context.py
4.28 kB
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from typing import List | |
| import torch | |
| __all__ = [ | |
| "SummaryChunkMeta", | |
| "SummarySampleContext", | |
| "SummaryBatchContext", | |
| "build_summary_context", | |
| "build_summary_sliding_context", | |
| ] | |
| class SummaryChunkMeta: | |
| text_positions: torch.Tensor | |
| summary_positions: torch.Tensor | |
| prefix_summary_positions: torch.Tensor | |
| def window_positions(self) -> torch.Tensor: | |
| if self.prefix_summary_positions.numel() == 0: | |
| if self.summary_positions.numel() == 0: | |
| return self.text_positions | |
| return torch.cat((self.text_positions, self.summary_positions), dim=0) | |
| if self.summary_positions.numel() == 0: | |
| return torch.cat((self.prefix_summary_positions, self.text_positions), dim=0) | |
| return torch.cat( | |
| (self.prefix_summary_positions, self.text_positions, self.summary_positions), | |
| dim=0, | |
| ) | |
| class SummarySampleContext: | |
| chunks: List[SummaryChunkMeta] | |
| class SummaryBatchContext: | |
| samples: List[SummarySampleContext] | |
| position_ids: torch.Tensor | |
| summary_mask: torch.Tensor | |
| def enabled(self) -> bool: | |
| return self.summary_mask.numel() > 0 | |
| def build_summary_context( | |
| input_ids: torch.Tensor, | |
| position_ids: torch.Tensor, | |
| summary_chunk_size: int, | |
| summary_token_num: int, | |
| summary_token_begin: int, | |
| ) -> SummaryBatchContext: | |
| """ | |
| Build SummaryBatchContext from already-expanded sequences: each chunk should | |
| be text tokens (<= chunk_size) followed by summary_token_num summary tokens. | |
| """ | |
| batch_size, seq_len = input_ids.shape | |
| block_size = summary_chunk_size + summary_token_num | |
| summary_mask = torch.zeros_like(input_ids, dtype=torch.bool) | |
| samples: List[SummarySampleContext] = [] | |
| for b in range(batch_size): | |
| chunks: List[SummaryChunkMeta] = [] | |
| prefix_summary_positions: List[torch.Tensor] = [] | |
| cursor = 0 | |
| while cursor < seq_len: | |
| text_len = min(summary_chunk_size, seq_len - cursor) | |
| if text_len <= 0: | |
| break | |
| text_positions = torch.arange(cursor, cursor + text_len, device=input_ids.device) | |
| summary_start = cursor + text_len | |
| summary_end = min(cursor + block_size, seq_len) | |
| # Keep only true summary tokens (in case of ragged last block). | |
| summary_positions = torch.arange(summary_start, summary_end, device=input_ids.device) | |
| if summary_positions.numel() > 0: | |
| summary_tokens = input_ids[b, summary_positions] | |
| valid = (summary_tokens >= summary_token_begin) & ( | |
| summary_tokens < summary_token_begin + summary_token_num | |
| ) | |
| summary_positions = summary_positions[valid] | |
| if summary_positions.numel() > 0: | |
| summary_mask[b, summary_positions] = True | |
| prefix_tensor = ( | |
| torch.cat(prefix_summary_positions, dim=0) | |
| if prefix_summary_positions | |
| else torch.empty(0, device=input_ids.device, dtype=torch.long) | |
| ) | |
| chunk_meta = SummaryChunkMeta( | |
| text_positions=text_positions, | |
| summary_positions=summary_positions, | |
| prefix_summary_positions=prefix_tensor, | |
| ) | |
| chunks.append(chunk_meta) | |
| if summary_positions.numel() > 0: | |
| prefix_summary_positions.append(summary_positions) | |
| cursor += block_size | |
| samples.append(SummarySampleContext(chunks=chunks)) | |
| return SummaryBatchContext( | |
| samples=samples, | |
| position_ids=position_ids, | |
| summary_mask=summary_mask, | |
| ) | |
| def build_summary_sliding_context( | |
| input_ids: torch.Tensor, | |
| position_ids: torch.Tensor, | |
| summary_token_num: int, | |
| summary_token_begin: int, | |
| ) -> SummaryBatchContext: | |
| summary_mask = (input_ids >= summary_token_begin) & ( | |
| input_ids < summary_token_begin + summary_token_num | |
| ) | |
| return SummaryBatchContext( | |
| samples=[], | |
| position_ids=position_ids, | |
| summary_mask=summary_mask, | |
| ) | |