Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2bf0426

Browse files
committedNov 5, 2024
add lib funcs and tests
1 parent 2107d05 commit 2bf0426

File tree

9 files changed

+243
-4
lines changed

9 files changed

+243
-4
lines changed
 

Diff for: ‎.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
dist/
2+
__pycache__
3+
.pytest_cache/
4+
*.egg-info/

Diff for: ‎main.py

-2
This file was deleted.

Diff for: ‎src/CompextAI.egg-info/PKG-INFO

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.1
22
Name: CompextAI
3-
Version: 0.0.1
3+
Version: 0.0.2
44
Summary: Python client for CompextAI
55
Author-email: burnerlee <avi.aviral140@gmail.com>
66
Project-URL: Homepage, https://github.com/burnerlee/compextAI

Diff for: ‎src/CompextAI.egg-info/SOURCES.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ src/CompextAI.egg-info/PKG-INFO
55
src/CompextAI.egg-info/SOURCES.txt
66
src/CompextAI.egg-info/dependency_links.txt
77
src/CompextAI.egg-info/top_level.txt
8-
src/compextAI/__init__.py
8+
src/compextAI/__init__.py
9+
src/compextAI/main.py

Diff for: ‎src/compextAI/api/api.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import requests
2+
3+
class APIClient:
4+
"""
5+
A class to make HTTP requests to the Compext AI API.
6+
"""
7+
def __init__(self, base_url:str, api_key:str):
8+
self.base_url = base_url + "/api/v1"
9+
self.headers = {
10+
"Content-Type": "application/json",
11+
"Authorization": f"Bearer {api_key}"
12+
}
13+
14+
def get(self, route:str, data:dict={},**kwargs):
15+
response = requests.get(self.base_url + route, headers=self.headers, json=data, **kwargs)
16+
return {
17+
"status": response.status_code,
18+
"data": response.json()
19+
}
20+
21+
def post(self, route:str, data:dict={},**kwargs):
22+
response = requests.post(self.base_url + route, headers=self.headers, json=data, **kwargs)
23+
return {
24+
"status": response.status_code,
25+
"data": response.json()
26+
}
27+
28+
def put(self, route:str, data:dict={},**kwargs):
29+
response = requests.put(self.base_url + route, headers=self.headers, json=data, **kwargs)
30+
return {
31+
"status": response.status_code,
32+
"data": response.json()
33+
}
34+
35+
def delete(self, route:str, data:dict={},**kwargs):
36+
response = requests.delete(self.base_url + route, headers=self.headers, json=data, **kwargs)
37+
response_data = {
38+
"status": response.status_code,
39+
"data": {}
40+
}
41+
42+
if response.status_code != 204:
43+
response_data["data"] = response.json()
44+
45+
return response_data

Diff for: ‎src/compextAI/messages.py

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from src.compextAI.api.api import APIClient
2+
3+
class Message:
4+
message_id: str
5+
thread_id: str
6+
content: str
7+
role: str
8+
metadata: dict
9+
10+
def __init__(self, message_id:str, thread_id:str, content:str, role:str, metadata:dict):
11+
self.message_id = message_id
12+
self.thread_id = thread_id
13+
self.content = content
14+
self.role = role
15+
self.metadata = metadata
16+
17+
def __str__(self):
18+
return f"Message(message_id={self.message_id}, thread_id={self.thread_id}, content={self.content}, role={self.role}, metadata={self.metadata})"
19+
20+
def get_message_object_from_dict(data:dict) -> Message:
21+
return Message(data["identifier"], data["thread_id"], data["content"], data["role"], data["metadata"])
22+
23+
def list(client:APIClient, thread_id:str) -> list[Message]:
24+
response = client.get(f"/message/thread/{thread_id}")
25+
26+
status_code: int = response["status"]
27+
data: dict = response["data"]
28+
29+
if status_code != 200:
30+
raise Exception(f"Failed to list messages, status code: {status_code}, response: {data}")
31+
32+
return [get_message_object_from_dict(message) for message in data]
33+
34+
def retrieve(client:APIClient, message_id:str) -> Message:
35+
response = client.get(f"/message/{message_id}")
36+
37+
status_code: int = response["status"]
38+
data: dict = response["data"]
39+
40+
if status_code != 200:
41+
raise Exception(f"Failed to retrieve message, status code: {status_code}, response: {data}")
42+
43+
return get_message_object_from_dict(data)
44+
45+
def create(client:APIClient, thread_id:str, content:str, role:str, metadata:dict={}) -> Message:
46+
response = client.post(f"/message/thread/{thread_id}", data={"content": content, "role": role, "metadata": metadata})
47+
48+
status_code: int = response["status"]
49+
data: dict = response["data"]
50+
51+
if status_code != 201:
52+
raise Exception(f"Failed to create message, status code: {status_code}, response: {data}")
53+
54+
return get_message_object_from_dict(data)
55+
56+
def update(client:APIClient, message_id:str, content:str, role:str, metadata:dict={}) -> Message:
57+
response = client.put(f"/message/{message_id}", data={"content": content, "role": role, "metadata": metadata})
58+
59+
status_code: int = response["status"]
60+
data: dict = response["data"]
61+
62+
if status_code != 200:
63+
raise Exception(f"Failed to update message, status code: {status_code}, response: {data}")
64+
65+
return get_message_object_from_dict(data)
66+
67+
def delete(client:APIClient, message_id:str) -> bool:
68+
response = client.delete(f"/message/{message_id}")
69+
return response["status"] == 204

Diff for: ‎src/compextAI/threads.py

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from src.compextAI.api.api import APIClient
2+
3+
class Thread:
4+
thread_id: str
5+
title: str
6+
metadata: dict
7+
8+
def __init__(self, thread_id:str, title:str, metadata:dict):
9+
self.thread_id = thread_id
10+
self.title = title
11+
self.metadata = metadata
12+
13+
def __str__(self):
14+
return f"Thread(thread_id={self.thread_id}, title={self.title}, metadata={self.metadata})"
15+
16+
17+
def get_thread_object_from_dict(data:dict) -> Thread:
18+
return Thread(data["identifier"], data["title"], data["metadata"])
19+
20+
def list(client:APIClient) -> list[Thread]:
21+
response = client.get("/thread")
22+
23+
status_code: int = response["status"]
24+
data: dict = response["data"]
25+
26+
if status_code != 200:
27+
raise Exception(f"Failed to list threads, status code: {status_code}, response: {data}")
28+
29+
threads = [get_thread_object_from_dict(thread) for thread in data]
30+
31+
return threads
32+
33+
def retrieve(client:APIClient, thread_id:str) -> Thread:
34+
response = client.get(f"/thread/{thread_id}")
35+
36+
status_code: int = response["status"]
37+
data: dict = response["data"]
38+
39+
if status_code != 200:
40+
raise Exception(f"Failed to retrieve thread, status code: {status_code}, response: {data}")
41+
42+
return get_thread_object_from_dict(data)
43+
44+
def create(client:APIClient, title:str=None, metadata:dict={}) -> Thread:
45+
response = client.post(f"/thread", data={"title": title, "metadata": metadata})
46+
47+
status_code: int = response["status"]
48+
data: dict = response["data"]
49+
50+
if status_code != 201:
51+
raise Exception(f"Failed to create thread, status code: {status_code}, response: {data}")
52+
53+
return get_thread_object_from_dict(data)
54+
55+
def update(client:APIClient, thread_id:str, title:str=None, metadata:dict={}) -> Thread:
56+
response = client.put(f"/thread/{thread_id}", data={"title": title, "metadata": metadata})
57+
58+
status_code: int = response["status"]
59+
data: dict = response["data"]
60+
61+
if status_code != 200:
62+
raise Exception(f"Failed to update thread, status code: {status_code}, response: {data}")
63+
64+
return get_thread_object_from_dict(data)
65+
66+
def delete(client:APIClient, thread_id:str) -> bool:
67+
response = client.delete(f"/thread/{thread_id}")
68+
return response["status"] == 204

Diff for: ‎tests/messages_test.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import src.compextAI.messages as messages
2+
import src.compextAI.threads as threads
3+
from src.compextAI.api.api import APIClient
4+
5+
client = APIClient(
6+
base_url="http://localhost:8080",
7+
api_key="",
8+
)
9+
10+
created_thread = threads.create(client, title="Test Thread", metadata={"test": "test"})
11+
12+
created_message = messages.create(client, created_thread.thread_id, "Hello, world!", "user")
13+
print("Created message:", created_message)
14+
15+
retrieved_message = messages.retrieve(client, created_message.message_id)
16+
print("Retrieved message:", retrieved_message)
17+
18+
listed_messages = messages.list(client, created_thread.thread_id)
19+
print("Listed messages:", listed_messages)
20+
21+
updated_message = messages.update(client, created_message.message_id, "Hello, world updated!", "user")
22+
print("Updated message:", updated_message)
23+
24+
deleted_message = messages.delete(client, created_message.message_id)
25+
print("Deleted message:", deleted_message)
26+
27+
listed_messages_after_delete = messages.list(client, created_thread.thread_id)
28+
print("Listed messages after delete:", listed_messages_after_delete)
29+
30+
threads.delete(client, created_thread.thread_id)

Diff for: ‎tests/threads_test.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import src.compextAI.threads as threads
2+
from src.compextAI.api.api import APIClient
3+
4+
client = APIClient(
5+
base_url="http://localhost:8080",
6+
api_key="",
7+
)
8+
9+
listed_threads = threads.list(client)
10+
print("Listed threads:", listed_threads)
11+
12+
created_thread = threads.create(client, title="Test Thread", metadata={"test": "test"})
13+
print("Created thread:", created_thread)
14+
15+
retrieved_thread = threads.retrieve(client, created_thread.thread_id)
16+
print("Retrieved thread:", retrieved_thread)
17+
18+
updated_thread = threads.update(client, created_thread.thread_id, title="Updated Thread", metadata={"test": "updated"})
19+
print("Updated thread:", updated_thread)
20+
21+
deleted_thread = threads.delete(client, created_thread.thread_id)
22+
print("Deleted thread:", deleted_thread)
23+
24+
listed_threads_after_delete = threads.list(client)
25+
print("Listed threads after delete:", listed_threads_after_delete)

0 commit comments

Comments
 (0)
Please sign in to comment.