2020 CreateNewConversationIntegrationRequest ,
2121 ConversationDetailResponse ,
2222 JoinConversationIntegrationRequest ,
23+ SpaceListResponse ,
24+ SpaceDetailResponse ,
25+ SpaceSectionsResponse ,
2326)
2427from thesis_py .research .events .event import Event
2528from thesis_py .research .base import ResearchBaseClient
@@ -44,6 +47,7 @@ def __init__(
4447 self .base_url = base_url
4548 self .client = ResearchBaseClient (api_key = api_key , base_url = base_url )
4649
50+ # Conversation APIs
4751 def create_conversation (
4852 self ,
4953 request : CreateNewConversationIntegrationRequest ,
@@ -57,14 +61,13 @@ def create_conversation(
5761 Conversation: The response containing the conversation id.
5862 """
5963 data = request .model_dump_json ()
60- print ("create_conversation data: " , data )
6164 response = self .client .request (
6265 method = "POST" ,
6366 endpoint = "/conversations" ,
6467 data = data ,
6568 )
66- if response .status_code != 200 :
67- raise ValueError ( f"❌ Error reading response: { response . text } " )
69+ if response .status_code != 200 and response . status_code != 201 :
70+ raise requests . HTTPError ( response = response )
6871
6972 return ConversationCreateResponse (** response .json ())
7073
@@ -78,8 +81,8 @@ async def create_conversation_async(
7881 endpoint = "/conversations/create-conversation" ,
7982 data = request .model_dump_json (),
8083 )
81- if response .status_code != 200 :
82- raise ValueError ( f"❌ Error reading response: { response . text } " )
84+ if response .status_code != 200 and response . status_code != 201 :
85+ raise requests . HTTPError ( response = response )
8386
8487 return ConversationCreateResponse (** response .json ())
8588
@@ -91,8 +94,8 @@ def get_conversation_by_id(
9194 method = "GET" ,
9295 endpoint = f"/conversations/{ conversation_id } " ,
9396 )
94- if response .status_code != 200 :
95- raise ValueError ( f"❌ Error reading response: { response . text } " )
97+ if response .status_code != 200 and response . status_code != 201 :
98+ raise requests . HTTPError ( response = response )
9699 return ConversationDetailResponse (** response .json ())
97100
98101 async def get_conversation_by_id_async (
@@ -103,44 +106,10 @@ async def get_conversation_by_id_async(
103106 method = "GET" ,
104107 endpoint = f"/conversations/{ conversation_id } " ,
105108 )
106- if response .status_code != 200 :
107- raise ValueError ( f"❌ Error reading response: { response . text } " )
109+ if response .status_code != 200 and response . status_code != 201 :
110+ raise requests . HTTPError ( response = response )
108111 return ConversationDetailResponse (** response .json ())
109112
110- def get_conversations (
111- self ,
112- limit : Optional [int ] = None ,
113- offset : Optional [int ] = None ,
114- ) -> List [ConversationDetailResponse ]:
115- response = self .client .request (
116- method = "GET" ,
117- endpoint = "/conversations" ,
118- params = build_pagination_params (limit , offset ),
119- )
120- if response .status_code != 200 :
121- raise ValueError (f"❌ Error reading response: { response .text } " )
122- return [
123- ConversationDetailResponse (** conversation )
124- for conversation in response .json ()
125- ]
126-
127- async def get_conversations_async (
128- self ,
129- limit : Optional [int ] = None ,
130- offset : Optional [int ] = None ,
131- ) -> List [ConversationDetailResponse ]:
132- response = await self .client .async_request (
133- method = "GET" ,
134- endpoint = "/conversations" ,
135- params = build_pagination_params (limit , offset ),
136- )
137- if response .status_code != 200 :
138- raise ValueError (f"❌ Error reading response: { response .text } " )
139- return [
140- ConversationDetailResponse (** conversation )
141- for conversation in response .json ()
142- ]
143-
144113 async def join_conversation (
145114 self ,
146115 request : JoinConversationIntegrationRequest ,
@@ -149,9 +118,10 @@ async def join_conversation(
149118 response = await self .client .async_request (
150119 method = "POST" ,
151120 endpoint = "/conversations/join-conversation" ,
152- data = request .model_dump_json (),
121+ data = request .model_dump (),
122+ params = {"stream" : "true" },
153123 )
154- if response .status_code != 200 :
124+ if response .status_code != 200 and response . status_code != 201 :
155125 error_text = await response .aread ()
156126 raise ValueError (f"❌ Error reading response: { error_text .decode ()} " )
157127
@@ -165,3 +135,80 @@ async def join_conversation(
165135 print ("⏰ Request timed out" )
166136 except Exception as e :
167137 print (f"❌ Unexpected error: { e } " )
138+
139+ # Space APIs
140+ def get_spaces (
141+ self ,
142+ limit : Optional [int ] = None ,
143+ offset : Optional [int ] = None ,
144+ ) -> SpaceListResponse :
145+ response = self .client .request (
146+ method = "GET" ,
147+ endpoint = "/spaces" ,
148+ params = build_pagination_params (limit , offset ),
149+ )
150+ if response .status_code != 200 and response .status_code != 201 :
151+ raise requests .HTTPError (response = response )
152+ return SpaceListResponse (** response .json ())
153+
154+ async def get_spaces_async (
155+ self ,
156+ limit : Optional [int ] = None ,
157+ offset : Optional [int ] = None ,
158+ ) -> SpaceListResponse :
159+ response = await self .client .async_request (
160+ method = "GET" ,
161+ endpoint = "/spaces" ,
162+ params = build_pagination_params (limit , offset ),
163+ )
164+ if response .status_code != 200 and response .status_code != 201 :
165+ raise requests .HTTPError (response = response )
166+ return SpaceListResponse (** response .json ())
167+
168+ def get_space_by_id (
169+ self ,
170+ space_id : str ,
171+ ) -> SpaceDetailResponse :
172+ response = self .client .request (
173+ method = "GET" ,
174+ endpoint = f"/spaces/{ space_id } " ,
175+ )
176+ if response .status_code != 200 and response .status_code != 201 :
177+ raise requests .HTTPError (response = response )
178+ return SpaceDetailResponse (** response .json ())
179+
180+ async def get_space_by_id_async (
181+ self ,
182+ space_id : str ,
183+ ) -> SpaceDetailResponse :
184+ response = await self .client .async_request (
185+ method = "GET" ,
186+ endpoint = f"/spaces/{ space_id } " ,
187+ )
188+ if response .status_code != 200 and response .status_code != 201 :
189+ raise requests .HTTPError (response = response )
190+ return SpaceDetailResponse (** response .json ())
191+
192+ def get_space_sections (
193+ self ,
194+ space_id : str ,
195+ ) -> SpaceSectionsResponse :
196+ response = self .client .request (
197+ method = "GET" ,
198+ endpoint = f"/spaces/{ space_id } /sections" ,
199+ )
200+ if response .status_code != 200 and response .status_code != 201 :
201+ raise requests .HTTPError (response = response )
202+ return SpaceSectionsResponse (** response .json ())
203+
204+ async def get_space_sections_async (
205+ self ,
206+ space_id : str ,
207+ ) -> SpaceSectionsResponse :
208+ response = await self .client .async_request (
209+ method = "GET" ,
210+ endpoint = f"/spaces/{ space_id } /sections" ,
211+ )
212+ if response .status_code != 200 and response .status_code != 201 :
213+ raise requests .HTTPError (response = response )
214+ return SpaceSectionsResponse (** response .json ())
0 commit comments