litellm-mirror/tests/openai_endpoints_tests/test_openai_files_endpoints.py
2025-03-13 15:13:48 -07:00

104 lines
3.6 KiB
Python

# What this tests ?
## Tests /chat/completions by generating a key and then making a chat completions request
import pytest
import asyncio
import aiohttp, openai
from openai import OpenAI, AsyncOpenAI
from typing import Optional, List, Union
BASE_URL = "http://localhost:4000" # Replace with your actual base URL
API_KEY = "sk-1234" # Replace with your actual API key
@pytest.mark.asyncio
async def test_file_operations():
openai_client = AsyncOpenAI(api_key=API_KEY, base_url=BASE_URL)
file_content = b'{"prompt": "Hello", "completion": "Hi"}'
uploaded_file = await openai_client.files.create(
purpose="fine-tune",
file=file_content,
)
list_files = await openai_client.files.list()
print("list_files=", list_files)
get_file = await openai_client.files.retrieve(file_id=uploaded_file.id)
print("get_file=", get_file)
get_file_content = await openai_client.files.content(file_id=uploaded_file.id)
print("get_file_content=", get_file_content.content)
assert get_file_content.content == file_content
# try get_file_content.write_to_file
get_file_content.write_to_file("get_file_content.jsonl")
delete_file = await openai_client.files.delete(file_id=uploaded_file.id)
print("delete_file=", delete_file)
async def upload_file(session, purpose="fine-tune"):
url = f"{BASE_URL}/v1/files"
headers = {"Authorization": f"Bearer {API_KEY}"}
data = aiohttp.FormData()
data.add_field("purpose", purpose)
data.add_field(
"file", b'{"prompt": "Hello", "completion": "Hi"}', filename="mydata.jsonl"
)
async with session.post(url, headers=headers, data=data) as response:
assert response.status == 200
result = await response.json()
assert "id" in result
print(f"File upload successful. File ID: {result['id']}")
return result["id"]
async def list_files(session):
url = f"{BASE_URL}/v1/files"
headers = {"Authorization": f"Bearer {API_KEY}"}
async with session.get(url, headers=headers) as response:
assert response.status == 200
result = await response.json()
assert "data" in result
print("List files successful")
async def get_file(session, file_id):
url = f"{BASE_URL}/v1/files/{file_id}"
headers = {"Authorization": f"Bearer {API_KEY}"}
async with session.get(url, headers=headers) as response:
assert response.status == 200
result = await response.json()
assert result["id"] == file_id
assert result["object"] == "file"
assert "bytes" in result
assert "created_at" in result
assert "filename" in result
assert result["purpose"] == "fine-tune"
print(f"Get file successful for file ID: {file_id}")
async def get_file_content(session, file_id):
url = f"{BASE_URL}/v1/files/{file_id}/content"
headers = {"Authorization": f"Bearer {API_KEY}"}
async with session.get(url, headers=headers) as response:
assert response.status == 200
content = await response.text()
print("content from /files/{file_id}/content=", content)
assert content # Check if content is not empty
print(f"Get file content successful for file ID: {file_id}")
async def delete_file(session, file_id):
url = f"{BASE_URL}/v1/files/{file_id}"
headers = {"Authorization": f"Bearer {API_KEY}"}
async with session.delete(url, headers=headers) as response:
assert response.status == 200
result = await response.json()
assert "deleted" in result
assert result["id"] == file_id
print(f"Delete file successful for file ID: {file_id}")