tushare 1.4.9__py3-none-any.whl → 1.4.11__py3-none-any.whl
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.
- tushare/__init__.py +1 -1
- tushare/pro/client.py +3 -2
- tushare/pro/llm.py +124 -0
- tushare/subs/ts_subs/subscribe.py +1 -1
- {tushare-1.4.9.dist-info → tushare-1.4.11.dist-info}/METADATA +1 -1
- {tushare-1.4.9.dist-info → tushare-1.4.11.dist-info}/RECORD +9 -8
- {tushare-1.4.9.dist-info → tushare-1.4.11.dist-info}/LICENSE +0 -0
- {tushare-1.4.9.dist-info → tushare-1.4.11.dist-info}/WHEEL +0 -0
- {tushare-1.4.9.dist-info → tushare-1.4.11.dist-info}/top_level.txt +0 -0
tushare/__init__.py
CHANGED
tushare/pro/client.py
CHANGED
@@ -17,7 +17,8 @@ import requests
|
|
17
17
|
class DataApi:
|
18
18
|
|
19
19
|
__token = ''
|
20
|
-
__http_url = 'http://api.waditu.com'
|
20
|
+
__http_url = 'http://api.waditu.com/dataapi'
|
21
|
+
# __http_url = 'http://127.0.0.1:8000/dataapi'
|
21
22
|
|
22
23
|
def __init__(self, token, timeout=30):
|
23
24
|
"""
|
@@ -37,7 +38,7 @@ class DataApi:
|
|
37
38
|
'fields': fields
|
38
39
|
}
|
39
40
|
|
40
|
-
res = requests.post(self.__http_url, json=req_params, timeout=self.__timeout)
|
41
|
+
res = requests.post(f"{self.__http_url}/{api_name}", json=req_params, timeout=self.__timeout)
|
41
42
|
if res:
|
42
43
|
result = json.loads(res.text)
|
43
44
|
if result['code'] != 0:
|
tushare/pro/llm.py
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
import requests
|
4
|
+
try:
|
5
|
+
import sseclient
|
6
|
+
except:
|
7
|
+
raise ImportError("sseclient not found, please install it using 'pip install sseclient-py'.")
|
8
|
+
|
9
|
+
|
10
|
+
from tushare import get_token
|
11
|
+
|
12
|
+
BASE_URL = "http://api.waditu.com/dataapi"
|
13
|
+
# BASE_URL = "http://127.0.0.1:8000/dataapi"
|
14
|
+
API_KEY_PREFIX = "tsgpt-"
|
15
|
+
|
16
|
+
|
17
|
+
class LlmClent:
|
18
|
+
def __init__(self, token=None, timetout=120):
|
19
|
+
if not token:
|
20
|
+
token = get_token()
|
21
|
+
self.token = token
|
22
|
+
self.timeout = timetout
|
23
|
+
|
24
|
+
def chat_query(self, model, messages, temperature=None, max_tokens=None, pretty=False):
|
25
|
+
"""
|
26
|
+
model string 模型名称, doubao-pro-128k
|
27
|
+
messages list 消息列表
|
28
|
+
[
|
29
|
+
{
|
30
|
+
"role": "user",
|
31
|
+
"content": "Hello World"
|
32
|
+
}
|
33
|
+
]
|
34
|
+
pretty bool 是否只返回回答内容文本
|
35
|
+
"""
|
36
|
+
resp = requests.post(
|
37
|
+
f'{BASE_URL}/llm/{model}',
|
38
|
+
json={"params": {
|
39
|
+
"stream": False,
|
40
|
+
"messages": messages,
|
41
|
+
"temperature": temperature,
|
42
|
+
"max_tokens": max_tokens
|
43
|
+
}},
|
44
|
+
headers={"Authorization": f"tstoken-{self.token}"},
|
45
|
+
timeout=self.timeout
|
46
|
+
)
|
47
|
+
if resp.status_code != 200:
|
48
|
+
raise Exception(f"请求出现错误,{resp.content}")
|
49
|
+
|
50
|
+
resp_data = resp.json()
|
51
|
+
if resp_data.get('code') not in (0, None):
|
52
|
+
raise Exception(resp_data['msg'])
|
53
|
+
if pretty:
|
54
|
+
return resp_data['choices'][0]["message"]["content"]
|
55
|
+
else:
|
56
|
+
return resp_data
|
57
|
+
|
58
|
+
def chat_stream(self, model, messages, temperature=None, max_tokens=None, pretty=False):
|
59
|
+
"""
|
60
|
+
model string 模型名称, doubao-pro-128k
|
61
|
+
messages list 消息列表
|
62
|
+
[
|
63
|
+
{
|
64
|
+
"role": "user",
|
65
|
+
"content": "Hello World"
|
66
|
+
}
|
67
|
+
]
|
68
|
+
pretty bool 是否只返回回答内容文本
|
69
|
+
"""
|
70
|
+
resp = requests.post(
|
71
|
+
f'{BASE_URL}/llm/{model}',
|
72
|
+
json={"params": {
|
73
|
+
"stream": True,
|
74
|
+
"messages": messages,
|
75
|
+
"temperature": temperature,
|
76
|
+
"max_tokens": max_tokens
|
77
|
+
}},
|
78
|
+
headers={"Authorization": f"tstoken-{self.token}"},
|
79
|
+
timeout=self.timeout, stream=True
|
80
|
+
)
|
81
|
+
if resp.status_code != 200:
|
82
|
+
raise Exception(f"请求出现错误,{resp.content}")
|
83
|
+
|
84
|
+
for e in sseclient.SSEClient(resp).events():
|
85
|
+
e_data = json.loads(e.data)
|
86
|
+
if pretty:
|
87
|
+
yield e_data["choices"][0]["delta"]["content"]
|
88
|
+
else:
|
89
|
+
yield e_data
|
90
|
+
|
91
|
+
|
92
|
+
def test_chart_query():
|
93
|
+
c = LlmClent()
|
94
|
+
dd = c.chat_query("doubao-pro-128k", [{
|
95
|
+
"role": "user",
|
96
|
+
"content": "你好"
|
97
|
+
}])
|
98
|
+
print(dd)
|
99
|
+
dd = c.chat_query("doubao-pro-128k", [{
|
100
|
+
"role": "user",
|
101
|
+
"content": "你好"
|
102
|
+
}], pretty=True)
|
103
|
+
print(dd)
|
104
|
+
|
105
|
+
|
106
|
+
def test_chart_stream():
|
107
|
+
c = LlmClent()
|
108
|
+
dd = c.chat_stream("doubao-pro-128k", [
|
109
|
+
{
|
110
|
+
"role": "user",
|
111
|
+
"content": "你好"
|
112
|
+
}
|
113
|
+
])
|
114
|
+
for d in dd:
|
115
|
+
print(d)
|
116
|
+
|
117
|
+
dd = c.chat_stream("doubao-pro-128k", [
|
118
|
+
{
|
119
|
+
"role": "user",
|
120
|
+
"content": "你好"
|
121
|
+
}
|
122
|
+
], pretty=True)
|
123
|
+
for d in dd:
|
124
|
+
print(d)
|
@@ -28,7 +28,7 @@ logger = logging.getLogger(__name__)
|
|
28
28
|
class TsSubscribe(object):
|
29
29
|
|
30
30
|
def __init__(self, token='', callback_mode='multi-thread', debug=False):
|
31
|
-
self.url = 'ws
|
31
|
+
self.url = 'wss://ws.tushare.pro/listening'
|
32
32
|
self.token = token
|
33
33
|
self.debug = debug
|
34
34
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
tushare/__init__.py,sha256=
|
1
|
+
tushare/__init__.py,sha256=0pbsHHIjb5rX0pfMWnvQJW2suebAN9kh8pHagccYoGE,4765
|
2
2
|
tushare/bond/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
tushare/bond/bonds.py,sha256=PJM0xDiWZDpOPwDtbEU9PdP0M_Gu0c599YuB1rbZ3r8,232
|
4
4
|
tushare/coins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -17,8 +17,9 @@ tushare/internet/boxoffice.py,sha256=NaAJYg8e6vldIG7vF2fXOcQSqFrNQ_2z9bLx5-TyMYY
|
|
17
17
|
tushare/internet/caixinnews.py,sha256=IwNOB5F1q_CxfuP93-jgUpTW5yY5NANPRJXySm_bj2A,4178
|
18
18
|
tushare/internet/indexes.py,sha256=oteQCv0k2X0pbhXRHwMSviD1AowJWE6xRjKkqr5RNCo,3595
|
19
19
|
tushare/pro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
|
-
tushare/pro/client.py,sha256=
|
20
|
+
tushare/pro/client.py,sha256=w7LfXtlmSd4Aiq7Bz5-tPFfkfjrPS_7jroUiRs7BUWw,1388
|
21
21
|
tushare/pro/data_pro.py,sha256=SOHbK-j9CmZguuv0CLIT-Z3hUynEy96mbvvhrGN6y9I,10883
|
22
|
+
tushare/pro/llm.py,sha256=OB0LL6YUbGSeat2nA-gP78kPiRCjgQzgIYNc4OJIDFI,3558
|
22
23
|
tushare/stock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
24
|
tushare/stock/billboard.py,sha256=vCrbN7-NGXSpXMc8jq7NcjjHyu9pTcr4uXp559iA1wA,12833
|
24
25
|
tushare/stock/classifying.py,sha256=3yWqlLhgj2irk-9ksKWFFS5HY-SnjfEr5erwJxBidG8,10539
|
@@ -50,7 +51,7 @@ tushare/subs/tgw_subs/convert.py,sha256=VWsDOv_rmz3a9YjQ-ZThXerc1HqcWPlBYAOF6A9S
|
|
50
51
|
tushare/subs/tgw_subs/login.py,sha256=z7laiscTx50LzOB0cM2hypv5E78DvWx-2Ip5kDE7uNk,903
|
51
52
|
tushare/subs/tgw_subs/subscribe.py,sha256=OwLKcSTN2xrge33hBkio_S188viMeGuicDj_x0VaR2A,3336
|
52
53
|
tushare/subs/ts_subs/__init__.py,sha256=AyX957j8DDjdpIYcNR7dyRaMfxusa6d2VeunMEB6RAc,107
|
53
|
-
tushare/subs/ts_subs/subscribe.py,sha256=
|
54
|
+
tushare/subs/ts_subs/subscribe.py,sha256=vy0PA3g6jBQE5f2vSofLNq0zaZy3pJf89KMBfbB1xA8,6205
|
54
55
|
tushare/trader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
56
|
tushare/trader/trader.py,sha256=O2WJkIKGuUFK_hiQj83N5j971VW-TNAgKaCE0O4oFwg,11360
|
56
57
|
tushare/trader/utils.py,sha256=CG-TCyeu5WqYjnBARxft2lEnLD3xvhHLU40hPSL_CCw,752
|
@@ -71,8 +72,8 @@ tushare/util/verify_token.py,sha256=cuV3RErWbOC318NANCYL6K1LKZ3wSAL2yMwZHA7tD3s,
|
|
71
72
|
tushare/util/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
73
|
tushare/util/protobuf/funcs.py,sha256=UCdK8FxTyjPZsNzoEeXqYzqrQXUmRMvW5hua6GPA66A,779
|
73
74
|
tushare/util/protobuf/response_pb2.py,sha256=vJH9ONkDuJlg6y-q1PvuDZoviKrK7hzNtMieQHK45DI,11347
|
74
|
-
tushare-1.4.
|
75
|
-
tushare-1.4.
|
76
|
-
tushare-1.4.
|
77
|
-
tushare-1.4.
|
78
|
-
tushare-1.4.
|
75
|
+
tushare-1.4.11.dist-info/LICENSE,sha256=C2j55UI0Ul-1-wA1-rn7OaY6b3vGl4YukiyvYzHsU9o,1503
|
76
|
+
tushare-1.4.11.dist-info/METADATA,sha256=yKFizbLlZ3y5RnGGiMw6CkJTqTwSL4ZTYVcLD20MPN4,2839
|
77
|
+
tushare-1.4.11.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
78
|
+
tushare-1.4.11.dist-info/top_level.txt,sha256=HHOxMuqc31KuAIcxpE0t5dAPMKbaiRtjsjTMFd7FlXI,8
|
79
|
+
tushare-1.4.11.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|