Initial commit: 2125_GCE project
This commit is contained in:
Executable
+227
@@ -0,0 +1,227 @@
|
||||
"""Dual-Layer Integration for SuperDave Server.
|
||||
|
||||
Adds symbolic cognition layer to FastAPI endpoints:
|
||||
- /api/symbolic/activate - Activate glyph from intent
|
||||
- /api/symbolic/status - Get symbolic engine status
|
||||
- /api/symbolic/glyphs - List active glyphs
|
||||
- Enhanced /api/chat with glyph routing
|
||||
- Enhanced /api/generate-image with glyph routing
|
||||
|
||||
Usage:
|
||||
from dual_layer_integration import setup_dual_layer
|
||||
setup_dual_layer(app)
|
||||
"""
|
||||
|
||||
import logging
|
||||
from typing import Dict, Any, Optional
|
||||
from fastapi import FastAPI, HTTPException, Header
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def setup_dual_layer(app: FastAPI):
|
||||
"""Setup dual-layer endpoints on FastAPI app."""
|
||||
|
||||
@app.get("/api/symbolic/status")
|
||||
async def get_symbolic_status():
|
||||
"""Get symbolic engine status (glyphs, resonance, VRAM)."""
|
||||
try:
|
||||
from dual_layer.symbolic_engine import get_symbolic_engine
|
||||
|
||||
engine = get_symbolic_engine()
|
||||
status = await engine.get_status()
|
||||
|
||||
return {
|
||||
"status": "operational",
|
||||
"symbolic_layer": status,
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Symbolic status error: {e}")
|
||||
return {
|
||||
"status": "error",
|
||||
"error": str(e),
|
||||
}
|
||||
|
||||
@app.get("/api/symbolic/glyphs")
|
||||
async def get_active_glyphs():
|
||||
"""Get list of active glyphs."""
|
||||
try:
|
||||
from dual_layer.symbolic_engine import get_symbolic_engine
|
||||
|
||||
engine = get_symbolic_engine()
|
||||
active_glyphs = engine.get_active_glyphs()
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"active_glyphs": active_glyphs,
|
||||
"count": len(active_glyphs),
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Active glyphs error: {e}")
|
||||
return {
|
||||
"status": "error",
|
||||
"error": str(e),
|
||||
}
|
||||
|
||||
@app.post("/api/symbolic/activate")
|
||||
async def activate_glyph(
|
||||
request: Dict[str, Any],
|
||||
authorization: Optional[str] = Header(None)
|
||||
):
|
||||
"""Activate glyph from user intent.
|
||||
|
||||
Request:
|
||||
{
|
||||
"intent": "I need creative image generation",
|
||||
"request_type": "image", # chat, image, video, vision
|
||||
"metrics": {...} # optional, auto-calculated if omitted
|
||||
}
|
||||
|
||||
Returns:
|
||||
{
|
||||
"status": "success",
|
||||
"glyph_id": "G001",
|
||||
"specialized_type": "aether_node",
|
||||
"model": "forge",
|
||||
"priority": 10.0,
|
||||
"resonance_score": 95.5,
|
||||
"power_boost": 387.95,
|
||||
"superpower_count": 152,
|
||||
"routing": {...}
|
||||
}
|
||||
"""
|
||||
user_id = authorization.replace("Bearer ", "") if authorization else "anonymous"
|
||||
|
||||
try:
|
||||
from dual_layer.symbolic_engine import get_symbolic_engine
|
||||
|
||||
engine = get_symbolic_engine()
|
||||
|
||||
intent = request.get("intent", "")
|
||||
request_type = request.get("request_type", "chat")
|
||||
metrics = request.get("metrics")
|
||||
|
||||
if not intent:
|
||||
raise HTTPException(status_code=400, detail="intent required")
|
||||
|
||||
logger.info(
|
||||
f"Glyph activation request from {user_id}: "
|
||||
f"intent='{intent[:50]}...', type={request_type}"
|
||||
)
|
||||
|
||||
# Activate glyph (async)
|
||||
result = await engine.activate_from_intent(
|
||||
user_intent=intent,
|
||||
metrics=metrics,
|
||||
request_type=request_type
|
||||
)
|
||||
|
||||
if result is None:
|
||||
return {
|
||||
"status": "failed",
|
||||
"reason": "VRAM unavailable or activation rejected",
|
||||
}
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"glyph_id": result.glyph_id,
|
||||
"specialized_type": result.specialized_type,
|
||||
"model": result.model,
|
||||
"priority": result.priority,
|
||||
"resonance_score": result.resonance_score,
|
||||
"power_boost": result.power_boost,
|
||||
"superpower_count": len(result.superpower_ids),
|
||||
"routing": {
|
||||
"constraints": result.constraints,
|
||||
"enhancements": result.enhancements,
|
||||
"vram_budget": result.vram_budget,
|
||||
},
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Glyph activation error: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@app.post("/api/symbolic/deactivate")
|
||||
async def deactivate_glyph(
|
||||
request: Dict[str, Any],
|
||||
authorization: Optional[str] = Header(None)
|
||||
):
|
||||
"""Deactivate a glyph.
|
||||
|
||||
Request:
|
||||
{
|
||||
"glyph_id": "G001"
|
||||
}
|
||||
"""
|
||||
user_id = authorization.replace("Bearer ", "") if authorization else "anonymous"
|
||||
|
||||
try:
|
||||
from dual_layer.symbolic_engine import get_symbolic_engine
|
||||
|
||||
engine = get_symbolic_engine()
|
||||
glyph_id = request.get("glyph_id")
|
||||
|
||||
if not glyph_id:
|
||||
raise HTTPException(status_code=400, detail="glyph_id required")
|
||||
|
||||
success = await engine.deactivate_glyph(glyph_id)
|
||||
|
||||
return {
|
||||
"status": "success" if success else "failed",
|
||||
"glyph_id": glyph_id,
|
||||
"deactivated": success,
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Glyph deactivation error: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
# Enhanced endpoints with symbolic routing
|
||||
|
||||
@app.get("/api/symbolic/routing/summary")
|
||||
async def get_routing_summary():
|
||||
"""Get routing configuration summary."""
|
||||
try:
|
||||
from dual_layer.router import TYPE_ROUTING_MAP
|
||||
|
||||
# Get summary for all types
|
||||
summaries = {}
|
||||
for type_name, config in TYPE_ROUTING_MAP.items():
|
||||
summaries[type_name] = {
|
||||
"model": config.get("model"),
|
||||
"vram_budget": config.get("vram_budget"),
|
||||
"constraints": len(config.get("constraints", [])),
|
||||
"enhancements": len(config.get("enhancements", [])),
|
||||
"description": config.get("description"),
|
||||
}
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"type_summaries": summaries,
|
||||
"total_types": len(summaries),
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Routing summary error: {e}")
|
||||
return {
|
||||
"status": "error",
|
||||
"error": str(e),
|
||||
}
|
||||
|
||||
logger.info("Dual-layer symbolic endpoints installed")
|
||||
|
||||
|
||||
# Convenience function for easy integration
|
||||
def integrate_with_server(app: FastAPI):
|
||||
"""Integrate dual-layer system with existing server.
|
||||
|
||||
This enhances existing endpoints with symbolic routing:
|
||||
- /api/chat → routes through glyph activation
|
||||
- /api/generate-image → routes through glyph activation
|
||||
- /api/generate-video → routes through glyph activation
|
||||
- /api/vision → routes through glyph activation
|
||||
"""
|
||||
setup_dual_layer(app)
|
||||
|
||||
logger.info("Dual-layer integration complete")
|
||||
Reference in New Issue
Block a user