|
44 | 44 | create_investor_agent_toolkit, |
45 | 45 | create_analytics_agent_toolkit, |
46 | 46 | ) |
| 47 | +from subnet.subnet_methods import subnet_evaluation |
| 48 | +from subnet.api_types import QuantQuery, QuantResponse |
47 | 49 | from langchain_openai import ChatOpenAI |
48 | 50 | from server.invitecode import InviteCodeManager |
49 | 51 | from server.activity_tracker import ActivityTracker |
@@ -390,6 +392,63 @@ async def get_activity_stats( |
390 | 392 | ) |
391 | 393 | raise HTTPException(status_code=500, detail="Internal server error") |
392 | 394 |
|
| 395 | + @app.post("/api/subnet/evaluate") |
| 396 | + async def evaluate_subnet_response( |
| 397 | + request: Request, |
| 398 | + user: FirebaseIDTokenData = Depends(get_current_user), |
| 399 | + ): |
| 400 | + """ |
| 401 | + Evaluate a subnet miner response using the subnet evaluation model. |
| 402 | + |
| 403 | + Expected request body: |
| 404 | + { |
| 405 | + "quant_query": { |
| 406 | + "query": "string", |
| 407 | + "userID": "string", |
| 408 | + "metadata": {} |
| 409 | + }, |
| 410 | + "quant_response": { |
| 411 | + "response": "string", |
| 412 | + "signature": "bytes", |
| 413 | + "proofs": [], |
| 414 | + "metadata": {} |
| 415 | + } |
| 416 | + } |
| 417 | + |
| 418 | + Returns: |
| 419 | + { |
| 420 | + "score": float // Score between 0 and 1 |
| 421 | + } |
| 422 | + """ |
| 423 | + try: |
| 424 | + request_data = await request.json() |
| 425 | + |
| 426 | + # Validate required fields |
| 427 | + if "quant_query" not in request_data or "quant_response" not in request_data: |
| 428 | + raise HTTPException( |
| 429 | + status_code=400, |
| 430 | + detail="Both quant_query and quant_response are required" |
| 431 | + ) |
| 432 | + |
| 433 | + # Parse the request data into QuantQuery and QuantResponse objects |
| 434 | + quant_query = QuantQuery(**request_data["quant_query"]) |
| 435 | + quant_response = QuantResponse(**request_data["quant_response"]) |
| 436 | + |
| 437 | + # Call the subnet evaluation function |
| 438 | + score = await asyncio.to_thread( |
| 439 | + subnet_evaluation, quant_query, quant_response |
| 440 | + ) |
| 441 | + |
| 442 | + return {"score": score} |
| 443 | + |
| 444 | + except ValidationError as e: |
| 445 | + logging.error(f"Validation error in subnet evaluation: {e}") |
| 446 | + raise HTTPException(status_code=400, detail=str(e)) |
| 447 | + except Exception as e: |
| 448 | + logging.error(f"Error in subnet evaluation: {e}") |
| 449 | + logging.error(f"Traceback: {traceback.format_exc()}") |
| 450 | + raise HTTPException(status_code=500, detail="Internal server error") |
| 451 | + |
393 | 452 | # @app.post("/api/sentient/assist") |
394 | 453 | async def sentient_assist( |
395 | 454 | request: Request, |
|
0 commit comments