Mertiego commited on
Commit
7971efa
·
verified ·
1 Parent(s): fc481d6

Delete Btk Projesi/app.py

Browse files
Files changed (1) hide show
  1. Btk Projesi/app.py +0 -171
Btk Projesi/app.py DELETED
@@ -1,171 +0,0 @@
1
- """
2
- app.py
3
- ------
4
- "Modern Meddah - Yapay Zeka Destekli Fantastik Hikaye ve Kapak Tasarımcısı"
5
-
6
- Gradio tabanlı web arayüzü. Kullanıcının girdiği kısa fikri alır;
7
- Hugging Face Inference API üzerinden hem bir fantastik hikaye hem de
8
- o hikayeye uygun bir kapak görseli üretir.
9
-
10
- Çalıştırmak için:
11
- pip install -r requirements.txt
12
- python app.py
13
- """
14
-
15
- import logging
16
- from typing import Optional, Tuple
17
-
18
- import gradio as gr
19
- from PIL import Image
20
-
21
- from hf_client import get_client, generate_story, generate_cover_image
22
-
23
- logging.basicConfig(level=logging.INFO)
24
- logger = logging.getLogger("modern-meddah.app")
25
-
26
- APP_TITLE = "📖 Modern Meddah - Yapay Zeka Destekli Fantastik Hikaye ve Kapak Tasarımcısı"
27
-
28
- APP_DESCRIPTION = (
29
- "Aklınızdaki basit bir fikri yazın (örneğin *\"karanlık şatodaki ejderha\"*); "
30
- "yapay zeka sizin için hem edebi değeri yüksek bir Türkçe fantastik hikaye, "
31
- "hem de o hikayeye özel bir kapak illüstrasyonu üretsin."
32
- )
33
-
34
- EXAMPLE_IDEAS = [
35
- "Karanlık bir şatoda uyanan yaşlı bir ejderha",
36
- "Unutulmuş bir ormanda saklı, büyülü bir kapı",
37
- "Yıldızları çalan bir gölge prensesi",
38
- "Buz diyarında kaybolmuş genç bir büyücü çırağı",
39
- ]
40
-
41
-
42
- def generate_story_and_cover(
43
- user_idea: str, hf_token: Optional[str]
44
- ) -> Tuple[str, Optional[Image.Image]]:
45
- """
46
- Ana iş akışı: girdiyi doğrular, client oluşturur, hikayeyi ve
47
- görseli sırayla üretir. Her adımda oluşabilecek hatayı kullanıcıya
48
- Türkçe ve anlaşılır şekilde bildirir.
49
-
50
- Not: Görsel üretimi başarısız olsa bile, hikaye üretildiyse
51
- kullanıcıya hikaye gösterilir (kısmi başarı kaybedilmez).
52
- """
53
- clean_idea = (user_idea or "").strip()
54
- if not clean_idea:
55
- return (
56
- "⚠️ Lütfen önce bir hikaye fikri girin. Örneğin: "
57
- "\"karanlık şatodaki ejderha\".",
58
- None,
59
- )
60
-
61
- try:
62
- client = get_client(hf_token)
63
- except Exception as exc: # noqa: BLE001
64
- logger.exception("Client oluşturulurken hata")
65
- return f"⛔ Bağlantı istemcisi oluşturulamadı: {exc}", None
66
-
67
- # 1) Hikaye üretimi
68
- story_text, story_error = generate_story(client, clean_idea)
69
- if story_error:
70
- return story_error, None
71
-
72
- # 2) Kapak görseli üretimi (hikaye başarılı olsa bile bağımsız olarak dener)
73
- cover_image, image_error = generate_cover_image(client, clean_idea)
74
- if image_error:
75
- # Hikaye başarılı, görsel başarısız: kısmi sonucu göster + uyarı ekle
76
- combined_text = f"{story_text}\n\n---\n{image_error}"
77
- return combined_text, None
78
-
79
- return story_text, cover_image
80
-
81
-
82
- def build_interface() -> Tuple[gr.Blocks, "gr.Theme"]:
83
- theme = gr.themes.Soft(
84
- primary_hue="purple",
85
- secondary_hue="indigo",
86
- neutral_hue="slate",
87
- )
88
-
89
- with gr.Blocks(title="Modern Meddah") as demo:
90
- gr.Markdown(f"# {APP_TITLE}")
91
- gr.Markdown(APP_DESCRIPTION)
92
-
93
- with gr.Row():
94
- # ----- SOL SÜTUN: Girdi Alanı -----
95
- with gr.Column(scale=1):
96
- idea_input = gr.Textbox(
97
- label="Hikaye Fikriniz",
98
- placeholder="Örn: Karanlık şatodaki ejderha...",
99
- lines=6,
100
- max_lines=10,
101
- )
102
-
103
- gr.Examples(
104
- examples=EXAMPLE_IDEAS,
105
- inputs=idea_input,
106
- label="Örnek fikirler için tıklayın",
107
- )
108
-
109
- generate_btn = gr.Button(
110
- "✨ Hikaye ve Görseli Üret", variant="primary", size="lg"
111
- )
112
-
113
- gr.Markdown("---")
114
- token_input = gr.Textbox(
115
- label="Hugging Face API Token (isteğe bağlı)",
116
- placeholder="hf_xxxxxxxxxxxxxxxxxxxx",
117
- type="password",
118
- info=(
119
- "Token girmezseniz sistem ücretsiz/anonim kota ile "
120
- "denemeye çalışır. Kendi token'ınızı girerek daha "
121
- "yüksek limitlerden faydalanabilirsiniz."
122
- ),
123
- )
124
-
125
- # ----- SAĞ SÜTUN: Çıktı Alanı -----
126
- with gr.Column(scale=1):
127
- story_output = gr.Textbox(
128
- label="Üretilen Hikaye",
129
- lines=18,
130
- max_lines=30,
131
- )
132
- image_output = gr.Image(
133
- label="Üretilen Kapak Görseli",
134
- type="pil",
135
- height=420,
136
- )
137
-
138
- generate_btn.click(
139
- fn=generate_story_and_cover,
140
- inputs=[idea_input, token_input],
141
- outputs=[story_output, image_output],
142
- show_progress="full",
143
- )
144
-
145
- idea_input.submit(
146
- fn=generate_story_and_cover,
147
- inputs=[idea_input, token_input],
148
- outputs=[story_output, image_output],
149
- show_progress="full",
150
- )
151
-
152
- gr.Markdown(
153
- "<div style='text-align:center; opacity:0.6; margin-top:1rem;'>"
154
- "BTK Akademi Bitirme Projesi · Hugging Face Inference API + Gradio ile geliştirilmiştir."
155
- "</div>"
156
- )
157
-
158
- return demo, theme
159
-
160
-
161
- if __name__ == "__main__":
162
- interface, app_theme = build_interface()
163
- interface.queue(max_size=20)
164
- try:
165
- # Gradio >= 6.0: theme artık launch() üzerinden veriliyor.
166
- interface.launch(theme=app_theme)
167
- except TypeError:
168
- # Gradio < 6.0 uyumluluğu: theme parametresi launch() tarafından
169
- # desteklenmiyorsa (eski sürümler), tema zaten Blocks() içinde
170
- # denenmiş olur; burada sadece düz launch çağrılır.
171
- interface.launch()