发送流式请求并打印增量输出(示例用)
(host, headers, method, path, data=None, files=None)
| 485 | # ================================================================ |
| 486 | |
| 487 | def stream_request_example(host, headers, method, path, data=None, files=None): |
| 488 | """发送流式请求并打印增量输出(示例用)""" |
| 489 | url = f"{host}{path}" |
| 490 | if method == "POST" and files: |
| 491 | h = {k: v for k, v in headers.items() if k != "Content-Type"} |
| 492 | resp = requests.post(url, headers=h, files=files, stream=True, timeout=120) |
| 493 | elif method == "POST": |
| 494 | resp = requests.post(url, headers=headers, json=data, stream=True, timeout=120) |
| 495 | else: |
| 496 | resp = requests.get(url, headers=headers, params=data, timeout=30) |
| 497 | return resp.json().get("data") if resp.status_code == 200 else None |
| 498 | |
| 499 | if resp.status_code != 200: |
| 500 | print(f"HTTP {resp.status_code}: {resp.text[:200]}") |
| 501 | return None |
| 502 | |
| 503 | result_text = "" |
| 504 | for line in resp.iter_lines(): |
| 505 | if not line: |
| 506 | continue |
| 507 | line_str = line.decode("utf-8") if isinstance(line, bytes) else line |
| 508 | if not line_str.startswith("data:"): |
| 509 | continue |
| 510 | json_str = line_str[5:].strip() |
| 511 | if json_str == "[DONE]": |
| 512 | break |
| 513 | try: |
| 514 | obj = json.loads(json_str) |
| 515 | stage = obj.get("stage", "") |
| 516 | delta = obj.get("data", {}).get("delta", "") |
| 517 | if delta and stage in ("generate", "image"): |
| 518 | print(delta, end="", flush=True) |
| 519 | result_text += delta |
| 520 | except json.JSONDecodeError: |
| 521 | pass |
| 522 | print() |
| 523 | return result_text |
| 524 | |
| 525 | |
| 526 | def example_data_analysis_flow(): |
no outgoing calls
no test coverage detected