| import ast |
| import httpx |
| import json |
| import re |
|
|
| |
| chat_api = "http://127.0.0.1:23333" |
| api_key = "sk-xxxxx" |
| requests_headers = {} |
| requests_payload = { |
| "model": "nous-mixtral-8x7b", |
| "messages": [ |
| { |
| "role": "user", |
| "content": "what is your model", |
| } |
| ], |
| "stream": True, |
| } |
|
|
| with httpx.stream( |
| "POST", |
| chat_api + "/chat/completions", |
| headers=requests_headers, |
| json=requests_payload, |
| timeout=httpx.Timeout(connect=20, read=60, write=20, pool=None), |
| ) as response: |
| |
| |
| response_content = "" |
| for line in response.iter_lines(): |
| remove_patterns = [r"^\s*data:\s*", r"^\s*\[DONE\]\s*"] |
| for pattern in remove_patterns: |
| line = re.sub(pattern, "", line).strip() |
|
|
| if line: |
| try: |
| line_data = json.loads(line) |
| except Exception as e: |
| try: |
| line_data = ast.literal_eval(line) |
| except: |
| print(f"Error: {line}") |
| raise e |
| |
| delta_data = line_data["choices"][0]["delta"] |
| finish_reason = line_data["choices"][0]["finish_reason"] |
| if "role" in delta_data: |
| role = delta_data["role"] |
| if "content" in delta_data: |
| delta_content = delta_data["content"] |
| response_content += delta_content |
| print(delta_content, end="", flush=True) |
| if finish_reason == "stop": |
| print() |
|
|