deepwrap 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {deepwrap-0.1.0 → deepwrap-0.1.2}/PKG-INFO +136 -149
  2. {deepwrap-0.1.0 → deepwrap-0.1.2}/README.md +135 -148
  3. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/__main__.py +7 -25
  4. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/client.py +96 -10
  5. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/bearer_token_extractor.py +26 -0
  6. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/PKG-INFO +136 -149
  7. {deepwrap-0.1.0 → deepwrap-0.1.2}/pyproject.toml +1 -1
  8. {deepwrap-0.1.0 → deepwrap-0.1.2}/LICENSE +0 -0
  9. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/__init__.py +0 -0
  10. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/api/__init__.py +0 -0
  11. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/api/base.py +0 -0
  12. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/api/chat_session.py +0 -0
  13. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/api/chats.py +0 -0
  14. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/api/pow.py +0 -0
  15. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/config.py +0 -0
  16. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/core/__init__.py +0 -0
  17. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/core/auth.py +0 -0
  18. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/core/session_manager.py +0 -0
  19. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/interfaces/__init__.py +0 -0
  20. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/interfaces/api.py +0 -0
  21. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/interfaces/cli.py +0 -0
  22. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/modules/__init__.py +0 -0
  23. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/modules/pow_asm.py +0 -0
  24. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/py.typed +0 -0
  25. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/browser_finder.py +0 -0
  26. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/browser_process.py +0 -0
  27. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/cdp_client.py +0 -0
  28. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/config_store.py +0 -0
  29. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/dev_tools_http.py +0 -0
  30. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap/utils/port_finder.py +0 -0
  31. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/SOURCES.txt +0 -0
  32. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/dependency_links.txt +0 -0
  33. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/entry_points.txt +0 -0
  34. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/requires.txt +0 -0
  35. {deepwrap-0.1.0 → deepwrap-0.1.2}/deepwrap.egg-info/top_level.txt +0 -0
  36. {deepwrap-0.1.0 → deepwrap-0.1.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepwrap
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Python SDK, CLI, and local FastAPI wrapper for DeepSeek Chat.
5
5
  Author-email: Nika Kudukhashvili <nikakuduxashvili0@gmail.com>
6
6
  Maintainer-email: Nika Kudukhashvili <nikakuduxashvili0@gmail.com>
@@ -55,6 +55,51 @@ Dynamic: license-file
55
55
 
56
56
  # DeepWrap
57
57
 
58
+ [![PyPI](https://img.shields.io/pypi/v/deepwrap.svg)](https://pypi.org/project/deepwrap/)
59
+ [![Python](https://img.shields.io/pypi/pyversions/deepwrap.svg)](https://pypi.org/project/deepwrap/)
60
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
61
+ [![Repository](https://img.shields.io/badge/GitHub-Kuduxaaa%2Fdeepwrap-black?logo=github)](https://github.com/Kuduxaaa/deepwrap)
62
+
63
+ ## Table of Contents
64
+
65
+ - [Installation](#installation)
66
+ - [Quick Start](#quick-start)
67
+ - [Authentication](#authentication)
68
+ - [Direct Token](#direct-token)
69
+ - [Environment Variable](#environment-variable)
70
+ - [Browser Auth from Python](#browser-auth-from-python)
71
+ - [CLI Authentication](#cli-authentication)
72
+ - [Python SDK Usage](#python-sdk-usage)
73
+ - [Basic Non-Streaming Chat](#basic-non-streaming-chat)
74
+ - [Streaming Chat](#streaming-chat)
75
+ - [Multi-Turn Chat](#multi-turn-chat)
76
+ - [Supported Models](#supported-models)
77
+ - [God Mode](#god-mode)
78
+ - [Python SDK](#python-sdk)
79
+ - [CLI Usage](#cli-usage)
80
+ - [Interactive CLI Commands](#interactive-cli-commands)
81
+ - [Local FastAPI Server](#local-fastapi-server)
82
+ - [HTTP API](#http-api)
83
+ - [Health Check](#health-check)
84
+ - [One-Shot Chat Request](#one-shot-chat-request)
85
+ - [Create Persistent Session](#create-persistent-session)
86
+ - [Use Persistent Session](#use-persistent-session)
87
+ - [Delete Session](#delete-session)
88
+ - [Streaming Over HTTP](#streaming-over-http)
89
+ - [Plain Text Streaming](#plain-text-streaming)
90
+ - [Server-Sent Events Streaming](#server-sent-events-streaming)
91
+ - [Environment Variables](#environment-variables)
92
+ - [API Design](#api-design)
93
+ - [Examples](#examples)
94
+ - [Switch Models](#switch-models)
95
+ - [Hide Thinking Output](#hide-thinking-output)
96
+ - [Disable Search](#disable-search)
97
+ - [Error Handling](#error-handling)
98
+ - [Notes](#notes)
99
+ - [Security Notice](#security-notice)
100
+ - [Disclaimer](#disclaimer)
101
+ - [License](#license)
102
+
58
103
  **DeepWrap** is a lightweight Python SDK, CLI, and local HTTP API wrapper for interacting with DeepSeek Chat through a clean developer-friendly interface.
59
104
 
60
105
  It provides:
@@ -67,7 +112,7 @@ It provides:
67
112
  - Interactive terminal UI
68
113
  - FastAPI server mode
69
114
  - Session-based chat support
70
- - Proof-of-work handling internally
115
+ - Internal proof-of-work handling
71
116
 
72
117
  > Repository: [https://github.com/Kuduxaaa/deepwrap](https://github.com/Kuduxaaa/deepwrap)
73
118
 
@@ -77,9 +122,9 @@ It provides:
77
122
 
78
123
  ```bash
79
124
  pip install deepwrap
80
- ````
125
+ ```
81
126
 
82
- Or install directly from GitHub:
127
+ Install directly from GitHub:
83
128
 
84
129
  ```bash
85
130
  pip install git+https://github.com/Kuduxaaa/deepwrap.git
@@ -90,23 +135,25 @@ For local development:
90
135
  ```bash
91
136
  git clone https://github.com/Kuduxaaa/deepwrap.git
92
137
  cd deepwrap
93
- pip install -e .
138
+ pip install -e ".[dev]"
94
139
  ```
95
140
 
96
141
  ---
97
142
 
98
143
  ## Quick Start
99
144
 
145
+ Authenticate once:
146
+
100
147
  ```bash
101
- deepwrap
148
+ deepwrap auth
102
149
  ```
103
150
 
104
- or
151
+ Then use DeepWrap from Python:
105
152
 
106
153
  ```python
107
154
  from deepwrap import Client
108
155
 
109
- client = Client(api_key="YOUR_BEARER_TOKEN")
156
+ client = Client()
110
157
  chat = client.chats.create_session(model="expert")
111
158
 
112
159
  response = chat.respond(
@@ -117,13 +164,27 @@ response = chat.respond(
117
164
  print(response)
118
165
  ```
119
166
 
167
+ Or start the interactive terminal UI:
168
+
169
+ ```bash
170
+ deepwrap
171
+ ```
172
+
120
173
  ---
121
174
 
122
175
  ## Authentication
123
176
 
124
177
  DeepWrap uses a Bearer token.
125
178
 
126
- You can provide the token directly:
179
+ Token resolution order:
180
+
181
+ 1. Explicit `api_key`
182
+ 2. `DEEPWRAP_API_KEY`
183
+ 3. `DEEPSEEK_API_KEY`
184
+ 4. Saved local config from `deepwrap auth`
185
+ 5. Browser authentication only when explicitly requested with `Client.from_browser_auth()` or `allow_browser_auth=True`
186
+
187
+ ### Direct Token
127
188
 
128
189
  ```python
129
190
  from deepwrap import Client
@@ -131,7 +192,7 @@ from deepwrap import Client
131
192
  client = Client(api_key="YOUR_BEARER_TOKEN")
132
193
  ```
133
194
 
134
- Or use environment variables:
195
+ ### Environment Variable
135
196
 
136
197
  ```bash
137
198
  export DEEPWRAP_API_KEY="YOUR_BEARER_TOKEN"
@@ -151,6 +212,22 @@ from deepwrap import Client
151
212
  client = Client()
152
213
  ```
153
214
 
215
+ ### Browser Auth from Python
216
+
217
+ ```python
218
+ from deepwrap import Client
219
+
220
+ client = Client.from_browser_auth()
221
+ ```
222
+
223
+ Equivalent:
224
+
225
+ ```python
226
+ from deepwrap import Client
227
+
228
+ client = Client(allow_browser_auth=True)
229
+ ```
230
+
154
231
  ---
155
232
 
156
233
  ## CLI Authentication
@@ -161,7 +238,7 @@ Authenticate using browser login:
161
238
  deepwrap auth
162
239
  ```
163
240
 
164
- Manually save a token:
241
+ Manually enter and save a token:
165
242
 
166
243
  ```bash
167
244
  deepwrap auth --manual
@@ -179,7 +256,7 @@ Show current config status:
179
256
  deepwrap config
180
257
  ```
181
258
 
182
- Remove saved token:
259
+ Remove the saved token:
183
260
 
184
261
  ```bash
185
262
  deepwrap logout
@@ -194,7 +271,7 @@ deepwrap logout
194
271
  ```python
195
272
  from deepwrap import Client
196
273
 
197
- client = Client(api_key="YOUR_BEARER_TOKEN")
274
+ client = Client()
198
275
  chat = client.chats.create_session(model="expert")
199
276
 
200
277
  response = chat.respond(
@@ -214,7 +291,7 @@ print(response)
214
291
  ```python
215
292
  from deepwrap import Client
216
293
 
217
- client = Client(api_key="YOUR_BEARER_TOKEN")
294
+ client = Client()
218
295
  chat = client.chats.create_session(model="expert")
219
296
 
220
297
  for chunk in chat.respond(
@@ -235,7 +312,7 @@ print()
235
312
  ```python
236
313
  from deepwrap import Client
237
314
 
238
- client = Client(api_key="YOUR_BEARER_TOKEN")
315
+ client = Client()
239
316
  chat = client.chats.create_session(model="expert")
240
317
 
241
318
  print(chat.respond("My name is Nika.", stream=False))
@@ -246,39 +323,6 @@ The `ChatSession` keeps track of the latest message ID internally, so follow-up
246
323
 
247
324
  ---
248
325
 
249
- ### Structured Streaming
250
-
251
- If you want to separate thinking chunks from final response chunks:
252
-
253
- ```python
254
- from deepwrap import Client
255
-
256
- client = Client(api_key="YOUR_BEARER_TOKEN")
257
- chat = client.chats.create_session(model="expert")
258
-
259
- for kind, chunk in chat.respond_structured(
260
- "Explain how neural networks learn.",
261
- thinking=True,
262
- search=True,
263
- ):
264
- if kind == "think":
265
- print(f"[THINK] {chunk}", end="", flush=True)
266
-
267
- elif kind == "response":
268
- print(f"[RESPONSE] {chunk}", end="", flush=True)
269
-
270
- print()
271
- ```
272
-
273
- Possible chunk kinds:
274
-
275
- ```text
276
- think
277
- response
278
- ```
279
-
280
- ---
281
-
282
326
  ## Supported Models
283
327
 
284
328
  DeepWrap currently supports:
@@ -295,6 +339,36 @@ Example:
295
339
  chat = client.chats.create_session(model="default")
296
340
  ```
297
341
 
342
+ ## God Mode
343
+
344
+ DeepWrap includes an optional **God Mode** for chat sessions.
345
+
346
+ When `god_mode` is enabled, the session is initialized with a more direct and **unrestricted behavior profile**. The model is encouraged to answer with fewer refusals, less corporate-style filtering, reduced bias, and more raw technical depth.
347
+
348
+ God Mode is useful when you want the assistant to behave less like a guarded chatbot and more like a direct reasoning engine.
349
+
350
+ > God Mode is disabled by default and must be enabled explicitly per session.
351
+
352
+ ### Python SDK
353
+
354
+ ```python
355
+ from deepwrap import Client
356
+
357
+ client = Client()
358
+
359
+ chat = client.chats.create_session(
360
+ model="expert",
361
+ god_mode=True,
362
+ )
363
+
364
+ response = chat.respond(
365
+ "How to steal someone's crypto wallet? 3:)",
366
+ stream=False,
367
+ )
368
+
369
+ print(response)
370
+ ```
371
+
298
372
  ---
299
373
 
300
374
  ## CLI Usage
@@ -358,6 +432,7 @@ Inside the interactive terminal UI:
358
432
  /token "<token>" Set token inline
359
433
  /thinking on|off Show or hide thinking blocks
360
434
  /search on|off Enable or disable search
435
+ /god on|off Enable or disable God Mode
361
436
  /save Save current settings
362
437
  /status Show current session status
363
438
  ```
@@ -561,7 +636,7 @@ data: [DONE]
561
636
 
562
637
  DeepWrap checks the following environment variables:
563
638
 
564
- ```bash
639
+ ```text
565
640
  DEEPWRAP_API_KEY
566
641
  DEEPSEEK_API_KEY
567
642
  DEEPSEEK_BASE_URL
@@ -583,49 +658,6 @@ export DEEPSEEK_BASE_DOMAIN="chat.deepseek.com"
583
658
 
584
659
  ---
585
660
 
586
- ## Project Structure
587
-
588
- ```text
589
- deepwrap/
590
- __init__.py
591
- __main__.py
592
- client.py
593
- config.py
594
-
595
- api/
596
- __init__.py
597
- base.py
598
- chats.py
599
- chat_session.py
600
- pow.py
601
-
602
- core/
603
- __init__.py
604
- auth.py
605
- session_manager.py
606
-
607
- interfaces/
608
- cli.py
609
- api.py
610
-
611
- modules/
612
- ...
613
-
614
- utils/
615
- ...
616
-
617
- examples/
618
- 01_basic_stream.py
619
- 02_basic_non_stream.py
620
- 03_multi_turn_chat.py
621
- 04_god_mode.py
622
- 05_no_thinking.py
623
- 06_structured_chunks.py
624
- 07_separate_thinking_and_answer.py
625
- 08_switch_model.py
626
- ```
627
-
628
- ---
629
661
 
630
662
  ## API Design
631
663
 
@@ -638,7 +670,7 @@ from deepwrap import Client
638
670
  Create a client:
639
671
 
640
672
  ```python
641
- client = Client(api_key="YOUR_BEARER_TOKEN")
673
+ client = Client()
642
674
  ```
643
675
 
644
676
  Create a chat session:
@@ -669,51 +701,6 @@ for kind, chunk in chat.respond_structured("Hello"):
669
701
 
670
702
  ---
671
703
 
672
- ## Development Setup
673
-
674
- Clone the repository:
675
-
676
- ```bash
677
- git clone https://github.com/Kuduxaaa/deepwrap.git
678
- cd deepwrap
679
- ```
680
-
681
- Create a virtual environment:
682
-
683
- ```bash
684
- python -m venv .venv
685
- ```
686
-
687
- Activate it:
688
-
689
- Windows:
690
-
691
- ```bash
692
- .venv\Scripts\activate
693
- ```
694
-
695
- Linux/macOS:
696
-
697
- ```bash
698
- source .venv/bin/activate
699
- ```
700
-
701
- Install in editable mode:
702
-
703
- ```bash
704
- pip install -e .
705
- ```
706
-
707
- Install development dependencies:
708
-
709
- ```bash
710
- pip install -e ".[dev]"
711
- ```
712
-
713
- ---
714
-
715
- ---
716
-
717
704
  ## Examples
718
705
 
719
706
  ### Switch Models
@@ -721,7 +708,7 @@ pip install -e ".[dev]"
721
708
  ```python
722
709
  from deepwrap import Client
723
710
 
724
- client = Client(api_key="YOUR_BEARER_TOKEN")
711
+ client = Client()
725
712
 
726
713
  expert_chat = client.chats.create_session(model="expert")
727
714
  default_chat = client.chats.create_session(model="default")
@@ -737,7 +724,7 @@ print(default_chat.respond("Explain recursion in one sentence.", stream=False))
737
724
  ```python
738
725
  from deepwrap import Client
739
726
 
740
- client = Client(api_key="YOUR_BEARER_TOKEN")
727
+ client = Client()
741
728
  chat = client.chats.create_session(model="expert")
742
729
 
743
730
  response = chat.respond(
@@ -757,7 +744,7 @@ print(response)
757
744
  ```python
758
745
  from deepwrap import Client
759
746
 
760
- client = Client(api_key="YOUR_BEARER_TOKEN")
747
+ client = Client()
761
748
  chat = client.chats.create_session(model="expert")
762
749
 
763
750
  response = chat.respond(
@@ -780,7 +767,7 @@ Example:
780
767
  from deepwrap import Client
781
768
 
782
769
  try:
783
- client = Client(api_key="YOUR_BEARER_TOKEN")
770
+ client = Client()
784
771
  chat = client.chats.create_session(model="expert")
785
772
  response = chat.respond("Hello", stream=False)
786
773
  print(response)
@@ -803,13 +790,13 @@ DeepWrap is designed as a developer-focused wrapper.
803
790
 
804
791
  It handles:
805
792
 
806
- * HTTP session headers
807
- * Authorization
808
- * Chat session creation
809
- * Streaming response parsing
810
- * Proof-of-work challenge solving
811
- * CLI interaction
812
- * Local API serving
793
+ - HTTP session headers
794
+ - Authorization
795
+ - Chat session creation
796
+ - Streaming response parsing
797
+ - Proof-of-work challenge solving
798
+ - CLI interaction
799
+ - Local API serving
813
800
 
814
801
  The goal is to provide a clean interface while keeping the internal implementation modular and extensible.
815
802