90 lines
2.6 KiB
Python
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))
|