import anthropic, json from fastapi import APIRouter, HTTPException from fastapi.responses import StreamingResponse from dotenv import load_dotenv from os import getenv router = APIRouter() load_dotenv(".env_file") client = anthropic.Anthropic(api_key=getenv('CLAUDE_KEY')) with open('/home/rodo/Documents/py/LittleAPI/list.json', 'r') as f: config = json.load(f) pdf_file_ids = config.get("files", []) @router.post("/using_docs", tags=["AI"]) async def send_message_using_docs(message:str): """ Envía un mensaje usando documentos PDF almacenados. - **message**: El mensaje de texto a procesar - **Retorna**: Stream de texto con la respuesta de Claude """ try: content = [ { "type": "text", "text": message } ] for file_id in pdf_file_ids: content.append( { "type": "document", "source" : { "type" : "file", "file_id": file_id } } ) def event_generator(): with client.beta.messages.stream( model="claude-haiku-4-5", max_tokens=2048, messages=[{ "role": "user", "content": content }], betas=["files-api-2025-04-14"], ) as stream: for text in stream.text_stream: yield text return StreamingResponse(event_generator(), media_type="text/plain") except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/", tags=["AI"]) async def send_message(message:str): """ Envía un mensaje normal a Claude. - **message**: El mensaje de texto a procesar - **Retorna**: Stream de texto con la respuesta de Claude """ try: content = [ { "type": "text", "text": message } ] def event_generator(): with client.beta.messages.stream( model="claude-haiku-4-5", max_tokens=512, messages=[{ "role": "user", "content": content }], ) as stream: for text in stream.text_stream: yield text return StreamingResponse(event_generator(), media_type="text/plain") except Exception as e: raise HTTPException(status_code=500, detail=str(e))