Files
llm-gateway-sub-backup/workspace/utils/checking_files.py
2025-08-11 18:56:38 +09:00

58 lines
1.7 KiB
Python

import os
from io import BytesIO
import tiktoken
from config.setting import ALLOWED_EXTENSIONS
from fastapi import HTTPException, UploadFile
def validate_all_files(*upload_files: UploadFile):
for upload_file in upload_files:
if not upload_file:
continue
_, ext = os.path.splitext(upload_file.filename.lower())
if ext not in ALLOWED_EXTENSIONS:
raise HTTPException(
status_code=400,
detail=(
f"파일 '{upload_file.filename}'은(는) 지원하지 않는 확장자입니다. "
f"허용된 확장자는 {', '.join(ALLOWED_EXTENSIONS)} 입니다."
),
)
def token_counter(prompt: str, text: str) -> int:
try:
enc = tiktoken.get_encoding("cl100k_base") # OpenAI 기반 tokenizer
token_count = len(enc.encode(prompt + text))
except Exception:
token_count = len(prompt + text) // 4 # fallback: 대략적 추정
return token_count
# ✅ UploadFile을 대신할 수 있는 간단한 래퍼 클래스
class SimpleUploadFile:
def __init__(
self,
filename: str,
content: bytes,
content_type: str = "application/octet-stream",
):
self.filename = filename
self.file = BytesIO(content)
self.content_type = content_type
# ✅ UploadFile 객체 복사 → SimpleUploadFile로 변환
def clone_upload_file(upload_file: UploadFile) -> SimpleUploadFile:
file_bytes = upload_file.file.read()
upload_file.file.seek(0)
return SimpleUploadFile(
filename=upload_file.filename,
content=file_bytes,
content_type=upload_file.content_type,
)