84 lines
1.9 KiB
Python
84 lines
1.9 KiB
Python
"""
|
|
LiteLLM module tests
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import unittest
|
|
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
from threading import Thread
|
|
|
|
import numpy as np
|
|
|
|
from txtai.vectors import VectorsFactory
|
|
|
|
|
|
class RequestHandler(BaseHTTPRequestHandler):
|
|
"""
|
|
Test HTTP handler.
|
|
"""
|
|
|
|
def do_POST(self):
|
|
"""
|
|
POST request handler.
|
|
"""
|
|
|
|
# Generate mock response
|
|
response = [[0.0] * 768]
|
|
response = json.dumps(response).encode("utf-8")
|
|
|
|
self.send_response(200)
|
|
self.send_header("content-type", "application/json")
|
|
self.send_header("content-length", len(response))
|
|
self.end_headers()
|
|
|
|
self.wfile.write(response)
|
|
self.wfile.flush()
|
|
|
|
|
|
class TestLiteLLM(unittest.TestCase):
|
|
"""
|
|
LiteLLM vectors tests
|
|
"""
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
"""
|
|
Create mock http server.
|
|
"""
|
|
|
|
cls.httpd = HTTPServer(("127.0.0.1", 8004), RequestHandler)
|
|
|
|
server = Thread(target=cls.httpd.serve_forever, daemon=True)
|
|
server.start()
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
"""
|
|
Shutdown mock http server.
|
|
"""
|
|
|
|
cls.httpd.shutdown()
|
|
|
|
def testIndex(self):
|
|
"""
|
|
Test indexing with LiteLLM vectors
|
|
"""
|
|
|
|
# LiteLLM vectors instance
|
|
model = VectorsFactory.create(
|
|
{"path": "huggingface/sentence-transformers/all-MiniLM-L6-v2", "vectors": {"api_base": "http://127.0.0.1:8004"}}, None
|
|
)
|
|
|
|
ids, dimension, batches, stream = model.index([(0, "test", None)])
|
|
|
|
self.assertEqual(len(ids), 1)
|
|
self.assertEqual(dimension, 768)
|
|
self.assertEqual(batches, 1)
|
|
self.assertIsNotNone(os.path.exists(stream))
|
|
|
|
# Test shape of serialized embeddings
|
|
with open(stream, "rb") as queue:
|
|
self.assertEqual(np.load(queue).shape, (1, 768))
|