from langfuse import Langfuse from langfuse.decorators import observe, langfuse_context from config.config import settings from services.llama_generator import LlamaGenerator import os # Initialize Langfuse os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-04d2302a-aa5c-4870-9703-58ab64c3bcae" os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-d34ea200-feec-428e-a621-784fce93a5af" os.environ["LANGFUSE_HOST"] = "https://chris4k-langfuse-template-space.hf.space" # 🇪🇺 EU region try: langfuse = Langfuse() except Exception as e: print("Langfuse Offline") ######## html = """ AI State Machine

AI State Machine

""" ###### import asyncio import random import time from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse import uvicorn class AIStateManager: def __init__(self): self.state = "awake" self.research_tasks = ["Explore AI Ethics", "Find latest AI models", "Investigate quantum computing"] self.current_task = None self.heartbeat_count = 0 self.clients = set() async def set_state(self, new_state): """Thread-safe state change with logging.""" print(f"[STATE CHANGE] {self.state} → {new_state}") self.state = new_state await self.broadcast(f"State changed to {new_state}") async def broadcast(self, message): """Broadcast message to all connected clients.""" for client in list(self.clients): try: await client.send_text(message) except Exception as e: print(f"Broadcast error: {e}") self.clients.remove(client) async def research_cycle(self): """Manages research state tasks.""" while True: await asyncio.sleep(5) # Longer interval for visibility # State-based logic if self.state == "awake": self.heartbeat_count += 1 if self.heartbeat_count >= 3: await self.set_state("research") elif self.state == "research": if self.research_tasks: task = self.research_tasks.pop(0) await self.broadcast(f"Researching: {task}") # Simulate task work await asyncio.sleep(3) # Random chance of generating follow-up if random.random() < 0.3: await self.broadcast(f"Question about {task}") else: await self.set_state("sleeping") elif self.state == "sleeping": await self.broadcast("System in sleep mode") await asyncio.sleep(10) # Longer sleep # Reset after sleep self.research_tasks = ["Explore AI Ethics", "Find latest AI models", "Investigate quantum computing"] await self.set_state("awake") self.heartbeat_count = 0 # FastAPI Setup app = FastAPI() ai_manager = AIStateManager() @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() ai_manager.clients.add(websocket) try: while True: data = await websocket.receive_text() await ai_manager.broadcast(f"Received: {data}") except Exception as e: print(f"WebSocket error: {e}") finally: ai_manager.clients.remove(websocket) @app.on_event("startup") async def startup_event(): """Start research cycle on app startup.""" asyncio.create_task(ai_manager.research_cycle()) @app.get("/") async def get(): """Serve frontend HTML.""" return HTMLResponse(html) if __name__ == "__main__": uvicorn.run(app, host="localhost", port=8000)