Skip to content

Commit 7ef8ac8

Browse files
update
1 parent 3431c58 commit 7ef8ac8

File tree

2 files changed

+41
-27
lines changed

2 files changed

+41
-27
lines changed

pyalgotrading/algobulls/api.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
from ..constants import TradingType, TradingReportType
1414
from ..utils.func import get_raw_response
1515

16+
GENAI_SESSION_SIZE = 100
17+
1618

1719
class AlgoBullsAPI:
1820
"""
@@ -476,7 +478,7 @@ def get_reports(self, strategy_code: str, trading_type: TradingType, report_type
476478

477479
return response
478480

479-
def get_genai(self, user_prompt: str, session_id: int, chat_gpt_model: str = ''):
481+
def get_genai_response(self, user_prompt: str, session_id: int, chat_gpt_model: str = ''):
480482
"""
481483
Fetch GenAI response.
482484
@@ -493,10 +495,11 @@ def get_genai(self, user_prompt: str, session_id: int, chat_gpt_model: str = '')
493495
endpoint = 'v1/build/python/genai'
494496
params = {"userPrompt": user_prompt, 'sessionId': self.genai_session_id, 'openaiApiKey': self.genai_api_key, 'chat_gpt_model': chat_gpt_model}
495497
response = self._send_request(endpoint=endpoint, params=params)
496-
498+
if self.genai_session_id is None and 'session_id' in response:
499+
self.genai_session_id = response['session_id']
497500
return response
498501

499-
def get_genai_response(self):
502+
def handle_genai_response_timeout(self):
500503
"""
501504
Fetch GenAI response.
502505
@@ -513,9 +516,9 @@ def get_genai_response(self):
513516

514517
return response
515518

516-
def get_genai_sessions(self, page_no):
519+
def get_genai_sessions(self):
517520
endpoint = 'v1/build/python/genai/sessions'
518-
params = {'sessionId': self.genai_session_id}
521+
params = {'sessionId': self.genai_session_id, 'pageSize': GENAI_SESSION_SIZE}
519522
response = self._send_request(endpoint=endpoint, params=params)
520523

521524
return response

pyalgotrading/algobulls/connection.py

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from ..strategy.strategy_base import StrategyBase
2020
from ..utils.func import get_valid_enum_names, get_datetime_with_tz
2121

22+
GENAI_RESPONSE_POOLING_LIMIT = 20
23+
2224

2325
class AlgoBullsConnection:
2426
"""
@@ -94,48 +96,57 @@ def set_generative_ai_keys(self, api_key, secret_key, token_key):
9496
self.api.openai_key = api_key
9597
return 'SUCCESS' or 'FAILURE'
9698

99+
def get_genai_response_pooling(self, no_of_tries, user_prompt, chat_gpt_model):
100+
if no_of_tries < GENAI_RESPONSE_POOLING_LIMIT:
101+
try:
102+
if no_of_tries > 1:
103+
response = self.api.get_genai_response(user_prompt, chat_gpt_model)
104+
else:
105+
response = self.api.handle_genai_response_timeout()
106+
107+
except AlgoBullsAPIGatewayTimeoutErrorException:
108+
response = self.get_genai_response_pooling(no_of_tries + 1)
109+
else:
110+
response = {'message': 'Somthing went wrong please try again'}
111+
return response
112+
97113
def start_chat(self, chat_gpt_model):
98114
while True:
99115
user_prompt = str(input())
100116
if user_prompt.lower() == 'exit':
101117
print("Thanks for the chat")
102118
return
103-
104-
response = self.api.get_genai(user_prompt, chat_gpt_model)
105-
while response['status_code'] == 504:
106-
response = self.api.get_genai_response()
107-
119+
response = self.get_genai_response_pooling(1, user_prompt, chat_gpt_model)
108120
print(f"GenAI: {response['message']}")
109121

110-
def continue_from_previous_session(self, page_no):
122+
def continue_from_previous_sessions(self):
111123
"""
112124
display previous sessions
113125
Returns:
114126
115127
"""
116-
customer_genai_sessions = self.api.get_genai_sessions(page_no)
128+
customer_genai_sessions = self.api.get_genai_sessions()
117129
for i, session in enumerate(customer_genai_sessions):
118-
print(f"Session {i}: ID: {session['id']}, Started: {session['last_user_prompt']}")
119-
120-
if len(customer_genai_sessions) < 20:
121-
print("End")
122-
else:
123-
print(f"Type 'next' to view the next 20 sessions.")
130+
print(f"Session {i}: Started: {session['timestamp_created']}, Title: {session['first_user_prompt']}")
124131

125-
user_input = input("Enter session number or 'next': ")
126-
if user_input.lower() == "next" and len(customer_genai_sessions) > 20:
127-
self.continue_from_previous_session(page_no=page_no + 1)
128-
elif user_input.isdigit() and 1 <= int(user_input) <= len(customer_genai_sessions):
129-
selected_session_index = page_no + int(user_input) - 1
130-
selected_session_id = customer_genai_sessions[selected_session_index]["id"]
131-
self.api.genai_api_key = selected_session_id
132+
while True:
133+
user_input = int(input("Enter session number"))
134+
if not isinstance(user_input, int):
135+
print('Argument "user_input" should be a int')
136+
elif 1 <= int(user_input) <= len(customer_genai_sessions):
137+
selected_session_index = int(user_input) - 1
138+
selected_session_id = customer_genai_sessions[selected_session_index]["id"]
139+
self.api.genai_session_id = selected_session_id
140+
break
141+
else:
142+
print("Please select a valid session number.")
132143

133144
def initiate_chat(self, start_fresh=None, chat_gpt_model=None):
134145
if start_fresh:
135146
# reset session
136-
self.api.genai_api_key = None
147+
self.api.genai_session_id = None
137148
elif start_fresh is not None:
138-
self.continue_from_previous_session(page_no=1)
149+
self.continue_from_previous_sessions()
139150

140151
self.start_chat(chat_gpt_model)
141152

0 commit comments

Comments
 (0)