Metadata-Version: 2.4
Name: uip-sdk
Version: 0.2.0
Summary: UIP — Universal Inference Platform Python SDK
Author-email: Zhu Wenbo <zwb.2002@tsinghua.org.cn>
License: MIT
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: httpx>=0.27

# UIP Python SDK

Universal Inference Platform 的 Python 客户端库。

## 安装

```bash
pip install uip-sdk
```

## 快速开始

```python
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)

```python
resp = client.chat(
    messages=[{"role": "user", "content": "你好"}],
    model="qwen2.5:7b",
)
print(resp.text)
```

### 流式生成

```python
for chunk in client.generate("写一首关于春天的诗", stream=True):
    print(chunk.text, end="", flush=True)
```

### Rerank (文档重排序)

```python
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}")
```

### 批量推理

```python
batch = client.batch(
    prompts=["你好", "介绍你自己"],
    model="qwen2.5:7b",
)
for item in batch.results:
    print(f"[{item.index}] {item.response[:50]}")
```

### 指定调度策略

```python
client.with_strategy("least_queue").generate("hi")
```

### 嵌入向量

```python
resp = client.embed(input="需要向量化的文本", model="bge-m3:567m")
print(len(resp.embedding))  # 768
```

## License

MIT License. Copyright (c) 2026 Zhu Wenbo (zwb.2002@tsinghua.org.cn).

### UMR 通用推理（17 种模态）



### 训练管理



### UMR 通用推理（17 种模态）

```python
# 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"})

# BERT 编码
result = client.infer("bert-base:chinese", {"text": "hello world"})
print(result.modal_type)  # "llm"
```

### 训练管理

```python
# 提交训练任务
job = client.submit_job(
    model="qwen2.5:7b",
    name="experiment-1",
    n_gpus=1,
    epochs=3,
)
print(job["job_id"])

# 任务列表
jobs = client.list_jobs(status="running")

# 任务详情
detail = client.get_job(job["job_id"])

# 取消任务
client.cancel_job(job["job_id"])

# 训练日志
logs = client.get_job_logs(job["job_id"], tail=50)

# 断点列表
ckpts = client.list_checkpoints(job["job_id"])

# 最新断点
latest = client.get_latest_checkpoint(job["job_id"])

# 数据集列表
datasets = client.list_datasets()

# 训练指标
metrics = client.get_training_metrics(job["job_id"])

# SSE 流式训练日志
for line in client.stream_job_logs(job["job_id"]):
    print(line, end="")
```
