Fix Claude response reception logic
Browse files- .gitignore +2 -1
- main.py +3 -1
- response.py +8 -4
- test/launch_with_clear.py +8 -0
.gitignore
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
api.json
|
2 |
api.yaml
|
3 |
.env
|
4 |
-
__pycache__
|
|
|
|
1 |
api.json
|
2 |
api.yaml
|
3 |
.env
|
4 |
+
__pycache__
|
5 |
+
.vscode
|
main.py
CHANGED
@@ -64,13 +64,15 @@ async def process_request(request: RequestModel, provider: Dict):
|
|
64 |
print("provider: ", provider['provider'])
|
65 |
url = provider['base_url']
|
66 |
parsed_url = urlparse(url)
|
|
|
67 |
engine = None
|
68 |
if parsed_url.netloc == 'generativelanguage.googleapis.com':
|
69 |
engine = "gemini"
|
70 |
-
elif parsed_url.netloc == 'api.anthropic.com':
|
71 |
engine = "claude"
|
72 |
else:
|
73 |
engine = "gpt"
|
|
|
74 |
|
75 |
url, headers, payload = await get_payload(request, engine, provider)
|
76 |
|
|
|
64 |
print("provider: ", provider['provider'])
|
65 |
url = provider['base_url']
|
66 |
parsed_url = urlparse(url)
|
67 |
+
# print(parsed_url)
|
68 |
engine = None
|
69 |
if parsed_url.netloc == 'generativelanguage.googleapis.com':
|
70 |
engine = "gemini"
|
71 |
+
elif parsed_url.netloc == 'api.anthropic.com' or parsed_url.path.endswith("v1/message"):
|
72 |
engine = "claude"
|
73 |
else:
|
74 |
engine = "gpt"
|
75 |
+
print(engine)
|
76 |
|
77 |
url, headers, payload = await get_payload(request, engine, provider)
|
78 |
|
response.py
CHANGED
@@ -83,12 +83,16 @@ async def fetch_claude_response_stream(client, url, headers, payload, model):
|
|
83 |
try:
|
84 |
timestamp = datetime.timestamp(datetime.now())
|
85 |
async with client.stream('POST', url, headers=headers, json=payload) as response:
|
|
|
86 |
async for chunk in response.aiter_bytes():
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
|
|
|
|
91 |
print(line)
|
|
|
92 |
resp: dict = json.loads(line)
|
93 |
message = resp.get("message")
|
94 |
if message:
|
|
|
83 |
try:
|
84 |
timestamp = datetime.timestamp(datetime.now())
|
85 |
async with client.stream('POST', url, headers=headers, json=payload) as response:
|
86 |
+
buffer = ""
|
87 |
async for chunk in response.aiter_bytes():
|
88 |
+
buffer += chunk.decode('utf-8')
|
89 |
+
while "\n" in buffer:
|
90 |
+
line, buffer = buffer.split("\n", 1)
|
91 |
+
print(line)
|
92 |
+
|
93 |
+
if line.startswith("data:"):
|
94 |
print(line)
|
95 |
+
line = line[6:]
|
96 |
resp: dict = json.loads(line)
|
97 |
message = resp.get("message")
|
98 |
if message:
|
test/launch_with_clear.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import subprocess
|
3 |
+
|
4 |
+
# 清理终端
|
5 |
+
subprocess.call('clear' if os.name == 'posix' else 'cls', shell=True)
|
6 |
+
|
7 |
+
# 运行主程序
|
8 |
+
os.system(os.environ['PYTHONPATH'] + ' main.py')
|