Spaces:
Sleeping
Sleeping
File size: 1,657 Bytes
71276a4 f871d2e 71276a4 d754586 71276a4 d754586 71276a4 f871d2e 71276a4 f871d2e d754586 f871d2e | 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 | from __future__ import annotations
import os
import requests
import modal
from fastapi import Request
app = modal.App("paper2lab-nemotron")
image = (
modal.Image.debian_slim(python_version="3.11")
.pip_install("requests", "fastapi")
)
secret = modal.Secret.from_name("nvidia-api-key")
NVIDIA_CHAT_URL = "https://integrate.api.nvidia.com/v1/chat/completions"
DEFAULT_MODEL = "nvidia/nemotron-3-nano-30b-a3b"
@app.function(image=image, secrets=[secret], timeout=300)
@modal.fastapi_endpoint(method="POST")
async def refine_remote(request: Request):
body = await request.json()
prompt = body.get("prompt")
model = body.get("model", DEFAULT_MODEL)
if not prompt:
return {"status": "error", "error": "Missing prompt"}
api_key = os.environ["NVIDIA_API_KEY"]
response = requests.post(
NVIDIA_CHAT_URL,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json={
"model": model,
"messages": [
{
"role": "system",
"content": "You are a precise scientific JSON refiner. Return only valid JSON. No markdown.",
},
{"role": "user", "content": prompt},
],
"temperature": 0.1,
"top_p": 0.7,
"max_tokens": 8192,
},
timeout=180,
)
if not response.ok:
return {"status": "error", "error": response.text[:1000]}
data = response.json()
return {
"status": "ok",
"content": data["choices"][0]["message"]["content"],
} |