OjciecTadeusz's picture
Update app.py
9cd4d67 verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from huggingface_hub import HfApi, hf_hub_download
import pandas as pd
import os
import time
app = FastAPI()
# Konfiguracja Datasetu
HF_TOKEN = os.environ.get("HF_TOKEN") # Ustaw to w Secrets w ustawieniach Space!
# REPO_ID = "OjciecTadeusz/test"
REPO_ID = os.environ.get("REPO_ID")
DATASET_REPO = "OjciecTadeusz/test"
DATASET_FILENAME = "data.csv"
# Model danych zgodny z definicją z AI Studio
class ConversationItem(BaseModel):
user_message: str
category: str
priority: str = "medium"
@app.get("/")
def home():
return {"status": "Serwer działa. Wyślij POST na /save"}
@app.post("/save")
async def save_to_dataset(item: ConversationItem):
"""
Odbiera dane z Gemini i zapisuje do HF Dataset (CSV).
"""
print(f"Otrzymano dane: {item}")
if not HF_TOKEN:
raise HTTPException(status_code=500, detail="Brak HF_TOKEN w zmiennych środowiskowych")
api = HfApi(token=HF_TOKEN)
# 1. Próba pobrania istniejącego pliku CSV z Datasetu
try:
file_path = hf_hub_download(
repo_id=DATASET_REPO,
filename=DATASET_FILENAME,
repo_type="dataset",
token=HF_TOKEN
)
df = pd.read_csv(file_path)
except Exception:
# Jeśli plik nie istnieje, tworzymy nowy pusty DataFrame
print("Plik nie istnieje lub błąd pobierania. Tworzę nowy.")
df = pd.DataFrame(columns=["timestamp", "category", "priority", "message"])
# 2. Dodanie nowego wiersza
new_row = {
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"category": item.category,
"priority": item.priority,
"message": item.user_message
}
# Używamy pd.concat zamiast append (pandas deprecation)
new_df = pd.DataFrame([new_row])
df = pd.concat([df, new_df], ignore_index=True)
# 3. Zapisanie do pliku lokalnie
local_filename = "/tmp/data.csv"
df.to_csv(local_filename, index=False)
# 4. Upload zaktualizowanego pliku do Datasetu
try:
api.upload_file(
path_or_fileobj=local_filename,
path_in_repo=DATASET_FILENAME,
repo_id=DATASET_REPO,
repo_type="dataset",
commit_message=f"Dodano wpis przez API: {item.category}"
)
return {"status": "success", "message": "Zapisano w Datasecie", "data": new_row}
except Exception as e:
print(f"Błąd uploadu: {e}")
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)