UIP — Universal Inference Platform Python SDK (federation + credits + multi-tenant)
Project description
UIP Python SDK
Universal Inference Platform 的 Python 客户端库。
安装
pip install uip-sdk
快速开始
from uip_sdk import UIPClient
# 方式 1: API Key
client = UIPClient(api_key="ggw-xxx...")
# 方式 2: JWT Token
client = UIPClient(token="eyJhbGciOiJIUzI1NiIs...")
# 方式 3: 环境变量 (UIP_API_KEY)
client = UIPClient()
推理
对话 (Chat Completions)
resp = client.chat(
messages=[{"role": "user", "content": "你好"}],
model="qwen2.5:7b",
)
print(resp.text)
流式生成
for chunk in client.generate("写一首关于春天的诗", stream=True):
print(chunk.text, end="", flush=True)
Rerank (文档重排序)
results = client.rerank(
query="CBA季后赛战术分析",
documents=["CBA联赛采用胜率决定排名", "篮球三分线距离为6.75米", "广东队采用全场紧逼战术"],
model="Qwen3-Reranker-0.6B",
top_n=2,
)
for r in results.results:
print(f"#{r.index}: {r.document[:30]}... score={r.relevance_score:.2f}")
批量推理
batch = client.batch(prompts=["你好", "介绍你自己"], model="qwen2.5:7b")
for item in batch.results:
print(f"[{item.index}] {item.response[:50]}")
嵌入向量
resp = client.embed(input="需要向量化的文本", model="bge-m3:567m")
print(len(resp.embedding)) # 768
UMR 通用推理(17 种模态)
# SDXL 文生图
result = client.infer("sdxl:base", {"prompt": "a cat"})
# 目标检测
result = client.infer("yolov8:m", {"image": "photo.jpg"})
# ASR 语音识别
result = client.infer("whisper:large-v3", {"audio": "speech.wav"})
print(result.modal_type)
指定调度策略
client.with_strategy("least_queue").generate("hi")
联邦推理
UIP→UIF→UIS→UIG 跨机构推理链路,需方通过 SDK 向供方发起推理请求。
# 自动选择最优供方
result = client.federated_infer(
model_id="qwen2.5:7b",
payload={"prompt": "介绍中国体育教育发展"},
)
print(result.supplier_unit) # 供方单位 ID
print(result.supplier_node) # 供方 GPU 节点名
print(result.cost_rmb) # 人民币费用
print(result.cost_credits) # 积分费用
# 指定供方 + GPU 类型偏好 + 价格上限
result = client.federated_infer(
model_id="qwen2.5:7b",
payload={"prompt": "你好"},
target_unit="tsinghua-sports", # 指定供方单位
prefer_gpu_type="rtx_5090", # GPU 类型偏好
max_price_credits=10.0, # 积分价格上限
)
训练管理
# 提交训练任务(含 gpu_type 和 unit_id 多租户隔离)
job = client.submit_job(
model="qwen2.5:7b",
name="fine-tune-v1",
n_gpus=1,
epochs=3,
gpu_type="rtx_5090", # GPU 类型追踪
unit_id="tsinghua-sports", # 多租户命名空间隔离
)
print(job["job_id"])
# 任务列表 / 详情 / 取消
jobs = client.list_jobs(status="running")
detail = client.get_job("job-xxx")
client.cancel_job("job-xxx")
# 训练日志(长轮询 / SSE 流式)
logs = client.get_job_logs("job-xxx", tail=50)
for line in client.stream_job_logs("job-xxx"):
print(line, end="")
# 断点 / 数据集 / 指标
ckpts = client.list_checkpoints("job-xxx")
latest = client.get_latest_checkpoint("job-xxx")
datasets = client.list_datasets()
metrics = client.get_training_metrics("job-xxx")
计费与余额
from uip_sdk import BalanceResponse
# 查询余额(双轨:人民币 + 积分)
bal: BalanceResponse = client.get_balance()
print(f"人民币: ¥{bal.balance_rmb:.2f}")
print(f"积分: {bal.balance_credits:.0f} credits")
print(f"冻结: ¥{bal.frozen_rmb:.2f} / {bal.frozen_credits:.0f} credits")
# 快速查询积分
credits = client.get_credits()
# 交易记录
txns = client.get_transactions(page=1, page_size=20, currency="credits")
for item in txns.items:
print(f"{item.created_at} {item.tx_type}: {item.amount} {item.currency} — {item.description}")
# 管理员充值
resp = client.recharge(user_id=42, amount=100.0, currency="credits", description="赠送积分")
print(f"充值成功: tx_id={resp.tx_id}, balance_after={resp.balance_after}")
License
Apache License 2.0. Copyright (c) 2026 Zhu Wenbo (zwb.2002@tsinghua.org.cn).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
uip_sdk-0.3.0.tar.gz
(13.7 kB
view details)
File details
Details for the file uip_sdk-0.3.0.tar.gz.
File metadata
- Download URL: uip_sdk-0.3.0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6bf23965996f980f2c9235282c282a8fbc785a56ba0edf5ee487c54d91d4eef
|
|
| MD5 |
70db301935f828aadbdbcc7a38fcd2ad
|
|
| BLAKE2b-256 |
98d92361fb7e206a4395b0a8a332d77590eddd3657886d06a20449c3e250f8fe
|