File size: 3,370 Bytes
c869f7a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3839eee
c869f7a
7b406f4
fb59416
ecfa1f0
9cdcce8
c869f7a
 
 
 
 
 
 
 
 
9cdcce8
c869f7a
3839eee
c869f7a
7b406f4
fb59416
c869f7a
9cdcce8
 
 
 
 
3839eee
9cdcce8
 
3839eee
 
 
 
 
c869f7a
 
 
 
 
 
 
 
 
ecfa1f0
c869f7a
9cdcce8
ecfa1f0
c869f7a
 
 
 
 
 
9cdcce8
c869f7a
 
 
 
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
88
89
90
91
92
93
94
95
96
97
from __future__ import annotations

import os
from pathlib import Path

from dotenv import dotenv_values
from huggingface_hub import HfApi


ROOT = Path(__file__).resolve().parents[1]


def env_value(values: dict[str, str | None], *names: str) -> str | None:
    for name in names:
        value = values.get(name) or os.getenv(name)
        if value:
            return value
    return None


def main() -> None:
    values = dotenv_values(ROOT / ".env")

    token = env_value(values, "HF_TOKEN", "HF_Token", "HUGGINGFACE_TOKEN")
    if not token:
        raise SystemExit("Missing HF token. Add HF_TOKEN=... to .env and rerun this script.")

    api = HfApi(token=token)
    username = api.whoami()["name"]
    space_name = env_value(values, "HF_SPACE_NAME") or "agent-tina"
    repo_id = env_value(values, "HF_SPACE_ID") or f"{username}/{space_name}"

    openrouter_api_key = env_value(values, "OPENROUTER_API_KEY")
    if not openrouter_api_key:
        raise SystemExit("Missing OPENROUTER_API_KEY in .env.")

    openrouter_model = env_value(values, "OPENROUTER_MODEL") or "openai/gpt-oss-20b"
    correction_model = env_value(values, "OPENROUTER_CORRECTION_MODEL") or "openai/gpt-4o-mini"
    whisper_model = env_value(values, "WHISPER_MODEL") or "base"
    whisper_beam_size = env_value(values, "WHISPER_BEAM_SIZE") or "5"
    max_upload_mb = env_value(values, "MAX_UPLOAD_MB") or "250"
    app_base_url = env_value(values, "HF_APP_BASE_URL") or f"https://{repo_id.replace('/', '-').lower()}.hf.space"
    dataset_repo = env_value(values, "HF_DATASET_REPO") or f"{username}/agent-tina-meetings"

    api.create_repo(
        repo_id=repo_id,
        repo_type="space",
        space_sdk="docker",
        exist_ok=True,
    )

    api.add_space_secret(repo_id=repo_id, key="OPENROUTER_API_KEY", value=openrouter_api_key)
    api.add_space_secret(repo_id=repo_id, key="HF_TOKEN", value=token)
    api.add_space_variable(repo_id=repo_id, key="OPENROUTER_MODEL", value=openrouter_model)
    api.add_space_variable(repo_id=repo_id, key="OPENROUTER_CORRECTION_MODEL", value=correction_model)
    api.add_space_variable(repo_id=repo_id, key="WHISPER_MODEL", value=whisper_model)
    api.add_space_variable(repo_id=repo_id, key="WHISPER_BEAM_SIZE", value=whisper_beam_size)
    api.add_space_variable(repo_id=repo_id, key="MAX_UPLOAD_MB", value=max_upload_mb)
    api.add_space_variable(repo_id=repo_id, key="APP_BASE_URL", value=app_base_url)
    api.add_space_variable(repo_id=repo_id, key="HF_DATASET_REPO", value=dataset_repo)

    api.create_repo(
        repo_id=dataset_repo,
        repo_type="dataset",
        private=True,
        exist_ok=True,
    )
    api.update_repo_settings(
        repo_id=dataset_repo,
        repo_type="dataset",
        private=True,
    )

    api.upload_folder(
        repo_id=repo_id,
        repo_type="space",
        folder_path=str(ROOT),
        commit_message="Deploy Agent Tina",
        ignore_patterns=[
            ".env",
            ".venv/*",
            "**/__pycache__/**",
            ".cache/*",
            "data/*",
            "**/*.pyc",
            "sample.wav",
        ],
    )

    print(f"Deployed to https://huggingface.co/spaces/{repo_id}")
    print(f"App URL: {app_base_url}")
    print(f"Dataset repo: https://huggingface.co/datasets/{dataset_repo}")


if __name__ == "__main__":
    main()