Files
2026-04-25 15:20:23 -06:00

90 lines
2.6 KiB
Python

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))