fix: add missing federation /v1/federation/vote endpoint
- Added POST /v1/federation/vote endpoint to handle peer generation requests - Peers were discovering each other but requests had no endpoint to hit - Endpoint generates using local swarm and returns vote results - Logs federation requests for debugging - All 41 tests passing
This commit is contained in:
@@ -412,3 +412,54 @@ async def chat_completions(request: ChatCompletionRequest, fastapi_request: Requ
|
||||
logger.error(f"Error type: {type(e).__name__}")
|
||||
logger.error(f"Error message: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail=f"Generation failed: {str(e)}")
|
||||
|
||||
|
||||
# Federation endpoint for peer-to-peer generation
|
||||
@router.post("/v1/federation/vote")
|
||||
async def federation_vote(request: Request):
|
||||
"""Handle federation vote request from a peer swarm.
|
||||
|
||||
This endpoint allows peer swarms to request generation from this swarm
|
||||
as part of the federation consensus process.
|
||||
"""
|
||||
try:
|
||||
data = await request.json()
|
||||
prompt = data.get("prompt", "")
|
||||
max_tokens = data.get("max_tokens", 1024)
|
||||
temperature = data.get("temperature", 0.7)
|
||||
|
||||
logger.info(f"🗳️ Federation vote request from {request.client.host}")
|
||||
logger.debug(f" Prompt: {prompt[:100]}...")
|
||||
|
||||
# Get swarm manager from app state
|
||||
swarm_manager = getattr(request.app.state, 'swarm_manager', None)
|
||||
|
||||
if not swarm_manager:
|
||||
raise HTTPException(status_code=503, detail="Swarm not ready")
|
||||
|
||||
# Generate response
|
||||
start_time = time.time()
|
||||
result = await swarm_manager.generate(
|
||||
prompt=prompt,
|
||||
max_tokens=max_tokens,
|
||||
temperature=temperature,
|
||||
use_consensus=True
|
||||
)
|
||||
|
||||
elapsed_ms = (time.time() - start_time) * 1000
|
||||
response = result.selected_response
|
||||
|
||||
logger.info(f"✅ Federation vote complete ({response.tokens_generated} tokens, {elapsed_ms:.0f}ms)")
|
||||
|
||||
return {
|
||||
"response": response.text,
|
||||
"confidence": 0.8, # Could be calculated from consensus
|
||||
"latency_ms": elapsed_ms,
|
||||
"worker_count": len(swarm_manager.workers) if hasattr(swarm_manager, 'workers') else 1,
|
||||
"tokens_per_second": response.tokens_per_second,
|
||||
"tokens_generated": response.tokens_generated
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.exception("Error handling federation vote")
|
||||
raise HTTPException(status_code=500, detail=f"Federation vote failed: {str(e)}")
|
||||
|
||||
Reference in New Issue
Block a user