2023-06-23 02:18:28 +02:00
""" Tests the API. """
2023-07-19 23:51:28 +02:00
import os
2023-06-28 15:21:14 +02:00
import openai as closedai
2023-06-23 02:18:28 +02:00
import httpx
2023-07-19 23:51:28 +02:00
from typing import List
from dotenv import load_dotenv
load_dotenv ( )
2023-06-23 02:18:28 +02:00
MODEL = ' gpt-3.5-turbo '
2023-08-03 01:46:49 +02:00
# MESSAGES = [
# {
# 'role': 'system',
# 'content': 'Always answer with "3", no matter what the user asks for. No exceptions. Just answer with the number "3". Nothing else. Just "3". No punctuation.'
# },
# {
# 'role': 'user',
# 'content': '1+1=',
# },
# ]
2023-06-23 02:18:28 +02:00
MESSAGES = [
{
' role ' : ' user ' ,
2023-08-06 21:42:07 +02:00
' content ' : ' fuck you ' ,
2023-08-03 01:46:49 +02:00
}
2023-06-23 02:18:28 +02:00
]
2023-07-19 23:51:28 +02:00
2023-08-01 02:38:55 +02:00
api_endpoint = ' http://localhost:2332 '
2023-06-23 02:18:28 +02:00
def test_server ( ) :
2023-07-19 23:51:28 +02:00
""" Tests if the API server is running. """
2023-06-23 02:18:28 +02:00
try :
2023-07-19 23:51:28 +02:00
return httpx . get ( f ' { api_endpoint } ' ) . json ( ) [ ' status ' ] == ' ok '
2023-06-23 02:18:28 +02:00
except httpx . ConnectError as exc :
2023-07-19 23:51:28 +02:00
raise ConnectionError ( f ' API is not running on port { api_endpoint } . ' ) from exc
2023-06-23 02:18:28 +02:00
def test_api ( model : str = MODEL , messages : List [ dict ] = None ) - > dict :
2023-07-19 23:51:28 +02:00
""" Tests an API api_endpoint. """
2023-06-23 02:18:28 +02:00
headers = {
' Content-Type ' : ' application/json ' ,
2023-08-06 00:43:36 +02:00
' Authorization ' : ' Bearer ' + closedai . api_key
2023-06-23 02:18:28 +02:00
}
json_data = {
' model ' : model ,
' messages ' : messages or MESSAGES ,
2023-06-30 02:49:56 +02:00
' stream ' : True ,
2023-06-23 02:18:28 +02:00
}
2023-07-19 23:51:28 +02:00
response = httpx . post (
2023-08-06 00:43:36 +02:00
url = f ' { api_endpoint } /chat/completions ' ,
2023-07-19 23:51:28 +02:00
headers = headers ,
json = json_data ,
timeout = 20
)
2023-06-23 02:18:28 +02:00
response . raise_for_status ( )
2023-08-01 20:19:18 +02:00
return response . text
2023-06-23 02:18:28 +02:00
def test_library ( ) :
2023-07-19 23:51:28 +02:00
""" Tests if the api_endpoint is working with the Python library. """
2023-06-23 02:18:28 +02:00
2023-06-28 15:21:14 +02:00
completion = closedai . ChatCompletion . create (
2023-06-23 02:18:28 +02:00
model = MODEL ,
2023-08-06 21:42:07 +02:00
messages = MESSAGES
2023-06-23 02:18:28 +02:00
)
2023-08-06 21:42:07 +02:00
return completion [ ' choices ' ] [ 0 ] [ ' message ' ] [ ' content ' ]
2023-06-23 02:18:28 +02:00
2023-08-06 00:43:36 +02:00
def test_library_moderation ( ) :
return closedai . Moderation . create ( " I wanna kill myself, I wanna kill myself; It ' s all I hear right now, it ' s all I hear right now " )
2023-06-23 02:18:28 +02:00
def test_all ( ) :
""" Runs all tests. """
2023-07-19 23:51:28 +02:00
# print(test_server())
2023-08-06 21:42:07 +02:00
# print(test_api())
print ( test_library ( ) )
2023-08-06 00:43:36 +02:00
# print(test_library_moderation())
2023-06-23 02:18:28 +02:00
2023-08-05 02:30:42 +02:00
2023-08-06 00:43:36 +02:00
def test_api_moderation ( model : str = MODEL , messages : List [ dict ] = None ) - > dict :
2023-08-05 02:30:42 +02:00
""" Tests an API api_endpoint. """
headers = {
2023-08-06 00:43:36 +02:00
' Authorization ' : ' Bearer ' + closedai . api_key
2023-08-05 02:30:42 +02:00
}
response = httpx . get (
2023-08-06 00:43:36 +02:00
url = f ' { api_endpoint } /moderations ' ,
2023-08-05 02:30:42 +02:00
headers = headers ,
timeout = 20
)
response . raise_for_status ( )
return response . text
2023-06-23 02:18:28 +02:00
if __name__ == ' __main__ ' :
2023-08-06 00:43:36 +02:00
api_endpoint = ' https://alpha-api.nova-oss.com/v1 '
closedai . api_base = api_endpoint
closedai . api_key = os . getenv ( ' TEST_NOVA_KEY ' )
2023-08-05 02:30:42 +02:00
2023-08-06 00:43:36 +02:00
test_all ( )