mirror of
https://github.com/zoo-apps/papers.git
synced 2026-10-30 14:56:54 +00:00
100 lines
2.5 KiB
TeX
100 lines
2.5 KiB
TeX
\section{Implementation}
|
|
|
|
|
|
\subsection{Rust Client (Hanzo Network)}
|
|
|
|
Located at: \texttt{/hanzo/node/crates/hanzo-zen-reranker/}
|
|
|
|
\textbf{Features:}
|
|
\begin{itemize}
|
|
\item Candle-based inference (native Rust ML)
|
|
\item Zero-copy tensor operations
|
|
\item SIMD-optimized BitDelta compression
|
|
\item Async multi-threaded API
|
|
\end{itemize}
|
|
|
|
\textbf{Example Usage:}
|
|
\begin{lstlisting}[language=Rust, basicstyle=\small\ttfamily]
|
|
use hanzo_zen_reranker::{ZenReranker, BitDelta};
|
|
|
|
let zen = ZenReranker::load("zoo/zen-reranker-8b")?;
|
|
|
|
// Encode experience
|
|
let experience = "When solving geometry, validate bounds";
|
|
let embedding = zen.encode(experience)?; // Vec<f32>, 7680
|
|
|
|
// Compress
|
|
let compressed = BitDelta::compress(&embedding)?; // 964 bytes
|
|
assert_eq!(compressed.len(), 964);
|
|
|
|
// Submit to network
|
|
hanzo_network::submit_experience(compressed)?;
|
|
\end{lstlisting}
|
|
|
|
\subsection{Python Client (Zoo Network)}
|
|
|
|
Located at: \texttt{/zoo/gym/src/gym/train/grpo/zen\_integration.py}
|
|
|
|
\textbf{Features:}
|
|
\begin{itemize}
|
|
\item HuggingFace Transformers integration
|
|
\item PyTorch-based inference
|
|
\item FAISS vector index for fast retrieval
|
|
\item Training-free GRPO compatibility
|
|
\end{itemize}
|
|
|
|
\textbf{Example Usage:}
|
|
\begin{lstlisting}[language=Python, basicstyle=\small\ttfamily]
|
|
from gym.train.grpo.zen_integration import ZenRerankerDSO
|
|
|
|
zen = ZenRerankerDSO("zoo/zen-reranker-8b")
|
|
|
|
# Encode experience
|
|
experience = "When solving geometry, validate bounds"
|
|
embedding = zen.encode_experience(experience) # [7680]
|
|
|
|
# Retrieve similar
|
|
query = "How to avoid extraneous solutions in geometry?"
|
|
similar = zen.retrieve_similar(query, library, k=5)
|
|
|
|
# Inject into context
|
|
context = "\n".join([exp.text for exp in similar])
|
|
prompt = f"{context}\n\n{query}"
|
|
\end{lstlisting}
|
|
|
|
\subsection{Docker Deployment}
|
|
|
|
\textbf{CPU Inference:}
|
|
\begin{verbatim}
|
|
docker pull zoo/zen-reranker:cpu-latest
|
|
docker run -p 8080:8080 zoo/zen-reranker:cpu-latest
|
|
\end{verbatim}
|
|
|
|
\textbf{GPU Inference (CUDA 12.1):}
|
|
\begin{verbatim}
|
|
docker pull zoo/zen-reranker:gpu-latest
|
|
docker run --gpus all -p 8080:8080 zoo/zen-reranker:gpu-latest
|
|
\end{verbatim}
|
|
|
|
\textbf{Quantized (4-bit GPTQ):}
|
|
\begin{verbatim}
|
|
docker pull zoo/zen-reranker:quantized-latest
|
|
docker run -p 8080:8080 zoo/zen-reranker:quantized-latest
|
|
\end{verbatim}
|
|
|
|
\textbf{API Endpoint:}
|
|
\begin{verbatim}
|
|
POST /embed
|
|
{
|
|
"texts": ["Experience 1", "Experience 2", ...],
|
|
"compress": true
|
|
}
|
|
|
|
Response:
|
|
{
|
|
"embeddings": ["<964 bytes>", "<964 bytes>", ...],
|
|
"latency_ms": 21.5
|
|
}
|
|
\end{verbatim}
|
|
|