File size: 2,660 Bytes
9212eb3
 
9cd4d67
9212eb3
 
9cd4d67
9212eb3
 
 
9cd4d67
9212eb3
 
 
 
9cd4d67
 
 
 
 
 
 
 
9212eb3
9cd4d67
 
 
9212eb3
9cd4d67
 
 
 
 
9212eb3
 
9cd4d67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9212eb3
 
9cd4d67
 
 
 
 
 
 
 
 
9212eb3
9cd4d67
 
 
 
 
 
 
 
9212eb3
9cd4d67
9212eb3
 
9cd4d67
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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)