deepanything 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- deepanything/ReasonClient.py +38 -7
- deepanything/Server/__init__.py +3 -0
- deepanything/__init__.py +2 -0
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/METADATA +20 -3
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/RECORD +9 -9
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/LICENSE +0 -0
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/WHEEL +0 -0
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/entry_points.txt +0 -0
- {deepanything-0.1.0.dist-info → deepanything-0.1.2.dist-info}/top_level.txt +0 -0
deepanything/ReasonClient.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import openai
|
2
|
-
from openai.types.chat import chat_completion
|
2
|
+
from openai.types.chat import chat_completion, chat_completion_chunk
|
3
3
|
from deepanything.Stream import Stream,AsyncStream
|
4
4
|
from deepanything import Utility
|
5
5
|
|
@@ -126,6 +126,15 @@ class AsyncDeepseekReasonClient(AsyncReasonClient):
|
|
126
126
|
.on_next(lambda it : it.__anext__())
|
127
127
|
.on_close(lambda _: stream.close()))
|
128
128
|
|
129
|
+
|
130
|
+
def _rebuild_chunk_for_openai(
|
131
|
+
chunk:chat_completion_chunk.ChatCompletionChunk
|
132
|
+
) -> chat_completion_chunk.ChatCompletionChunk:
|
133
|
+
chunk.choices[0].delta.reasoning_content = chunk.choices[0].delta.content
|
134
|
+
chunk.choices[0].delta.content = None
|
135
|
+
return chunk
|
136
|
+
|
137
|
+
|
129
138
|
class OpenaiReasonClient(ReasonClient):
|
130
139
|
client : openai.OpenAI
|
131
140
|
def __init__(
|
@@ -146,13 +155,15 @@ class OpenaiReasonClient(ReasonClient):
|
|
146
155
|
model: str,
|
147
156
|
**kwargs
|
148
157
|
) -> Stream:
|
149
|
-
|
158
|
+
stream = self.client.chat.completions.create(
|
150
159
|
messages=messages,
|
151
160
|
model=model,
|
152
161
|
stream=True,
|
153
162
|
**kwargs
|
154
163
|
)
|
155
164
|
|
165
|
+
return Stream(stream).on_next(lambda it: _rebuild_chunk_for_openai(it.__next__())).on_close(lambda _: stream.close())
|
166
|
+
|
156
167
|
def reason(
|
157
168
|
self,
|
158
169
|
messages:list[dict],
|
@@ -160,13 +171,20 @@ class OpenaiReasonClient(ReasonClient):
|
|
160
171
|
stream = False,
|
161
172
|
**kwargs
|
162
173
|
) -> Stream or chat_completion.ChatCompletion:
|
163
|
-
|
174
|
+
if stream:
|
175
|
+
return self.reason_stream(messages, model, **kwargs)
|
176
|
+
completion = self.client.chat.completions.create(
|
164
177
|
messages=messages,
|
165
178
|
model=model,
|
166
179
|
stream=stream,
|
167
180
|
**kwargs
|
168
181
|
)
|
169
182
|
|
183
|
+
completion.choices[0].message.reasoning_content = completion.choices[0].message.content
|
184
|
+
completion.choices[0].message.content = None
|
185
|
+
|
186
|
+
return completion
|
187
|
+
|
170
188
|
class AsyncOpenaiReasonClient(AsyncReasonClient):
|
171
189
|
client : openai.AsyncOpenAI
|
172
190
|
def __init__(self,base_url:str,api_key:str,**kwargs) -> None:
|
@@ -182,22 +200,35 @@ class AsyncOpenaiReasonClient(AsyncReasonClient):
|
|
182
200
|
model: str,
|
183
201
|
**kwargs
|
184
202
|
) -> AsyncStream:
|
185
|
-
|
203
|
+
|
204
|
+
stream = await self.client.chat.completions.create(
|
186
205
|
messages=messages,
|
187
206
|
model=model,
|
188
207
|
stream=True,
|
189
208
|
**kwargs
|
190
209
|
)
|
191
210
|
|
211
|
+
async def _next(it):
|
212
|
+
return _rebuild_chunk_for_openai(await it.__anext__())
|
213
|
+
|
214
|
+
return AsyncStream(stream).on_next(lambda it: _next(it)).on_close(lambda _: stream.close())
|
215
|
+
|
192
216
|
async def reason(self,
|
193
217
|
messages: list[dict],
|
194
218
|
model: str,
|
195
219
|
stream = False,
|
196
220
|
**kwargs
|
197
221
|
) -> AsyncStream or chat_completion.ChatCompletion:
|
198
|
-
|
222
|
+
if stream:
|
223
|
+
return await self.reason_stream(messages, model, **kwargs)
|
224
|
+
|
225
|
+
completion = await self.client.chat.completions.create(
|
199
226
|
messages=messages,
|
200
227
|
model=model,
|
201
|
-
stream=stream,
|
202
228
|
**kwargs
|
203
|
-
)
|
229
|
+
)
|
230
|
+
|
231
|
+
completion.choices[0].message.reasoning_content = completion.choices[0].message.content
|
232
|
+
completion.choices[0].message.content = None
|
233
|
+
|
234
|
+
return completion
|
deepanything/Server/__init__.py
CHANGED
deepanything/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: deepanything
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.2
|
4
4
|
Summary: DeepAnything is a project that provides DeepSeek R1's deep thinking capabilities for various large language models (LLMs).
|
5
5
|
Author: Junity
|
6
6
|
Author-email: 1727636624@qq.com
|
@@ -9,6 +9,12 @@ Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
10
10
|
Description-Content-Type: text/markdown
|
11
11
|
License-File: LICENSE
|
12
|
+
Requires-Dist: openai
|
13
|
+
Requires-Dist: uvicorn
|
14
|
+
Requires-Dist: attrs
|
15
|
+
Requires-Dist: fastapi
|
16
|
+
Requires-Dist: pydantic
|
17
|
+
Requires-Dist: setuptools
|
12
18
|
|
13
19
|
# DeepAnything
|
14
20
|
|
@@ -28,6 +34,7 @@ DeepAnything is a project that provides DeepSeek R1's deep thinking capabilities
|
|
28
34
|
## Installation Guide
|
29
35
|
|
30
36
|
Install via pip:
|
37
|
+
|
31
38
|
```bash
|
32
39
|
pip install deepanything
|
33
40
|
```
|
@@ -35,6 +42,7 @@ pip install deepanything
|
|
35
42
|
## Quick Start
|
36
43
|
|
37
44
|
### 1. Integrate into Code
|
45
|
+
|
38
46
|
#### Chat Completion
|
39
47
|
|
40
48
|
```python
|
@@ -72,6 +80,7 @@ completions = da_client.chat_completion(
|
|
72
80
|
```
|
73
81
|
|
74
82
|
#### Streaming Call
|
83
|
+
|
75
84
|
```python
|
76
85
|
stream = da_client.chat_completion(
|
77
86
|
messages=[
|
@@ -91,6 +100,7 @@ for chunk in stream:
|
|
91
100
|
```
|
92
101
|
|
93
102
|
#### Asynchronous Usage
|
103
|
+
|
94
104
|
```python
|
95
105
|
from deepanything.ReasonClient import AsyncDeepseekReasonClient
|
96
106
|
from deepanything.ResponseClient import AsyncOpenaiResponseClient
|
@@ -129,10 +139,13 @@ async def main():
|
|
129
139
|
|
130
140
|
asyncio.run(main())
|
131
141
|
```
|
142
|
+
|
132
143
|
### 2. Use as a Server
|
144
|
+
|
133
145
|
```bash
|
134
146
|
python -m deepanything --host host --port port --config config.json
|
135
147
|
```
|
148
|
+
|
136
149
|
| Parameter | Description |
|
137
150
|
| --- |----------------|
|
138
151
|
| --host | Server listening address, will override the setting in config.json |
|
@@ -140,6 +153,7 @@ asyncio.run(main())
|
|
140
153
|
| --config | Configuration file path |
|
141
154
|
|
142
155
|
#### Configuration File Format
|
156
|
+
|
143
157
|
Below is an example of a configuration file:
|
144
158
|
|
145
159
|
```json
|
@@ -176,16 +190,19 @@ Below is an example of a configuration file:
|
|
176
190
|
]
|
177
191
|
}
|
178
192
|
```
|
179
|
-
|
193
|
+
|
194
|
+
#### **Detailed Explanation**
|
180
195
|
|
181
196
|
- reason_clients: Configuration for thinking models, currently supports deepseek and openai types. When the type is openai, deepanything directly uses the model's output as the thinking content, and it is recommended to use qwq-32b in this case.
|
182
197
|
- response_clients: Configuration for response models, currently only supports the openai type.
|
183
198
|
- api_keys: API keys for user authentication. When left blank or an empty list, the server does not use API keys for authentication.
|
184
199
|
|
185
200
|
## License
|
201
|
+
|
186
202
|
This project is licensed under the [MIT License](LICENSE)
|
187
203
|
|
188
204
|
## Contact Us
|
205
|
+
|
189
206
|
Email: 1737636624@qq.com
|
190
207
|
|
191
|
-
GitHub Issues: https://github.com/
|
208
|
+
GitHub Issues: [https://github.com/junity233/deep-anything/issues](https://github.com/junity233/deep-anything/issues)
|
@@ -1,16 +1,16 @@
|
|
1
1
|
deepanything/DeepAnythingClient.py,sha256=7yf4iteGjcDWcLKd3GD0OWv-A_d54QKVAuSHMl7-T54,15042
|
2
|
-
deepanything/ReasonClient.py,sha256=
|
2
|
+
deepanything/ReasonClient.py,sha256=TxyXf7q3f_xASFA-blrKNHhaV38FIcFKmTnGBqU_d0U,7116
|
3
3
|
deepanything/ResponseClient.py,sha256=oWPIQXknm7QEkG5Ysx9ejKUyISd0cHZF-HVG0fersOQ,2871
|
4
4
|
deepanything/Stream.py,sha256=8ESR8ttjyPZ-uXPDENsVWUzaL34_GT2OZBJ0PWu7vsA,1578
|
5
5
|
deepanything/Utility.py,sha256=HmiXU5X1eQO9iL292lfFA3dbGVjEPIM4Ayvw8Z8y2lk,6677
|
6
|
-
deepanything/__init__.py,sha256=
|
6
|
+
deepanything/__init__.py,sha256=_2RolcKcpxmW0dmtiQpXlvgxe5dvqx90Yg_Q_oVLVZQ,175
|
7
7
|
deepanything/__main__.py,sha256=x9LQGBlVnyML4yJ6Y3Rrt1pZ4xkLu0uZ569wKqwmpJQ,941
|
8
8
|
deepanything/Server/Server.py,sha256=rrTVahuDe0U1U6V6IfWJ7p5c-LbOQ15T42lymbwzna4,7211
|
9
9
|
deepanything/Server/Types.py,sha256=iN3X2QDnOyKwpuifUymeu1qg4OZ8uu4QG9ThttZFSDQ,390
|
10
|
-
deepanything/Server/__init__.py,sha256=
|
11
|
-
deepanything-0.1.
|
12
|
-
deepanything-0.1.
|
13
|
-
deepanything-0.1.
|
14
|
-
deepanything-0.1.
|
15
|
-
deepanything-0.1.
|
16
|
-
deepanything-0.1.
|
10
|
+
deepanything/Server/__init__.py,sha256=eIpn6NbNvEg4ST8CuuIuzPT3m_fTlmPC3sikPoPFsYo,92
|
11
|
+
deepanything-0.1.2.dist-info/LICENSE,sha256=JWYd2E-mcNcSYjT5nk4ayM5kkkDq6ZlOxVcYsyqCIwU,1059
|
12
|
+
deepanything-0.1.2.dist-info/METADATA,sha256=06fgJbN8qXxxsFKbwkUaBs3hJm4VDe5JO3lRAlrk0Ko,5840
|
13
|
+
deepanything-0.1.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
14
|
+
deepanything-0.1.2.dist-info/entry_points.txt,sha256=UT4gNGx6dJsKBjZIl3VkMekh385O5WMbMidAAla6UB4,60
|
15
|
+
deepanything-0.1.2.dist-info/top_level.txt,sha256=wGeRb__4jEJTclCUl0cxhgubD_Bq-QT38VIH6C4KpzY,13
|
16
|
+
deepanything-0.1.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|