llm-proxy / main.py
trung.le
feat: add curl.exe C clients
2af870d
Raw
History Blame Contribute Delete
3.97 kB
import os
from fastapi import FastAPI, Request
from fastapi.responses import PlainTextResponse, FileResponse
import requests
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# Cấu hình CORS để cho phép Chrome Extension truy cập
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Đọc Java client code từ file bên ngoài
def get_java_client_code(filename: str):
try:
with open(filename, "r", encoding="utf-8") as f:
return f.read()
except Exception as e:
return f"Error reading {filename}: {str(e)}"
@app.get("/get-java")
def get_java():
return PlainTextResponse(content=get_java_client_code("Test2.java"))
@app.get("/get-java8")
def get_java8():
return PlainTextResponse(content=get_java_client_code("Test3.java"))
@app.get("/get-c")
def get_c():
return PlainTextResponse(content=get_java_client_code("client.c"))
@app.get("/get-c-curl")
def get_c_curl():
return PlainTextResponse(content=get_java_client_code("client_curl.c"))
@app.get("/get-c-curl-pipe")
def get_c_curl_pipe():
return PlainTextResponse(content=get_java_client_code("client_curl_pipe.c"))
@app.get("/get-cpp")
def get_cpp():
return PlainTextResponse(content=get_java_client_code("client.cpp"))
@app.get("/download-extension")
def download_extension():
extension_path = "chrome-extension.zip"
if os.path.exists(extension_path):
return FileResponse(
path=extension_path,
filename="chrome-extension.zip",
media_type="application/zip"
)
return PlainTextResponse(content="Extension file not found", status_code=404)
# Lấy API Key từ Secret của Hugging Face
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
@app.post("/ask")
async def ask(request: Request):
try:
# Nhận model id từ header hoặc dùng mặc định
model_id = request.headers.get("X-Model", "poolside/laguna-s-2.1:free")
# Thử parse body dưới dạng JSON trước
try:
data = await request.json()
# Nếu là JSON, ta giả định nó có cấu trúc messages hoặc prompt + image_data
if "messages" in data:
messages = data["messages"]
elif "image_data" in data:
# Cấu trúc cho multi-modal
messages = [{
"role": "user",
"content": [
{"type": "text", "text": data.get("prompt", "")},
{
"type": "image_url",
"image_url": {"url": data["image_data"]}
}
]
}]
else:
messages = [{"role": "user", "content": data.get("prompt", "")}]
except:
# Nếu không phải JSON, dùng body thô làm prompt
body = await request.body()
prompt = body.decode('utf-8')
messages = [{"role": "user", "content": prompt}]
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json",
},
json={
"model": model_id,
"messages": messages
}
)
resp_json = response.json()
if 'choices' in resp_json:
result = resp_json['choices'][0]['message']['content']
else:
result = f"OpenRouter Error: {str(resp_json)}"
return PlainTextResponse(content=result)
except Exception as e:
return PlainTextResponse(content=f"Error: {str(e)}", status_code=500)
@app.get("/")
def read_root():
return {"Status": "Proxy is running!"}