|
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()
|
|
|