File size: 3,965 Bytes
6328d10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2af870d
 
 
 
 
 
 
 
57ce88d
 
 
 
6328d10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57ce88d
6328d10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57ce88d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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!"}