Trashymanner commited on
Commit
c320c92
·
verified ·
1 Parent(s): 01f6a85

Upload 4 files

Browse files
Files changed (4) hide show
  1. README.md +23 -0
  2. app.py +69 -0
  3. gitattributes.txt +35 -0
  4. requirements.txt +1 -0
README.md ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Prosty Chatbot
3
+ emoji: 💬
4
+ colorFrom: blue
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ sdk_version: "6.14.0"
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ ---
12
+
13
+ # Prosty Chatbot
14
+
15
+ Chatbot konwersacyjny z pamięcią historii rozmowy, napędzany modelem GPT-4o-mini przez OpenAI API.
16
+
17
+ ## Użycie
18
+
19
+ 1. Wklej swój klucz OpenAI API w pole "OpenAI API Key"
20
+ 2. Wpisz wiadomość i naciśnij Enter
21
+ 3. Chatbot odpowiada strumieniowo — tekst pojawia się na bieżąco
22
+
23
+ Klucz API nie jest nigdzie zapisywany — używany tylko w bieżącej sesji.
app.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from utils.llm import chat_stream
3
+
4
+ TITLE = "Prosty Chatbot"
5
+ DESCRIPTION = "Chatbot na silniku OpenAI GPT-4o-mini. Wklej swój klucz API poniżej."
6
+ SYSTEM_PROMPT = "Jesteś pomocnym asystentem. Odpowiadaj po polsku, chyba że użytkownik pisze w innym języku."
7
+
8
+
9
+ def respond(message: str, history: list, api_key: str):
10
+ if not api_key or not api_key.strip():
11
+ yield "Najpierw wklej klucz OpenAI API w pole powyżej."
12
+ return
13
+
14
+ history_openai = list(history)
15
+ history_openai.append({"role": "user", "content": message})
16
+
17
+ partial = ""
18
+ try:
19
+ for token in chat_stream(history_openai, api_key=api_key, system=SYSTEM_PROMPT):
20
+ partial += token
21
+ yield partial
22
+ except ValueError as e:
23
+ yield f"Błąd klucza API: {e}"
24
+ except Exception as e:
25
+ yield f"Błąd: {e}"
26
+
27
+
28
+ with gr.Blocks(title=TITLE) as demo:
29
+ gr.Markdown(f"# {TITLE}\n{DESCRIPTION}")
30
+
31
+ api_key_input = gr.Textbox(
32
+ label="OpenAI API Key",
33
+ placeholder="sk-...",
34
+ type="password",
35
+ scale=1,
36
+ )
37
+
38
+ chatbot = gr.Chatbot(height=450)
39
+ msg = gr.Textbox(label="Wiadomość", placeholder="Napisz coś...", lines=1)
40
+
41
+ with gr.Row():
42
+ submit_btn = gr.Button("Wyślij", variant="primary")
43
+ clear_btn = gr.ClearButton([msg, chatbot], value="Wyczyść historię")
44
+
45
+ gr.Examples(
46
+ examples=["Cześć! Kim jesteś?", "Napisz krótki wiersz o wiośnie.", "Jak działa GPT?"],
47
+ inputs=msg,
48
+ )
49
+
50
+ def user_submit(message, history):
51
+ return "", history + [{"role": "user", "content": message}]
52
+
53
+ def bot_respond(history, api_key):
54
+ message = history[-1]["content"]
55
+ prev_history = history[:-1]
56
+ history = history + [{"role": "assistant", "content": ""}]
57
+ for partial in respond(message, prev_history, api_key):
58
+ history[-1]["content"] = partial
59
+ yield history
60
+
61
+ msg.submit(user_submit, [msg, chatbot], [msg, chatbot], queue=False).then(
62
+ bot_respond, [chatbot, api_key_input], chatbot
63
+ )
64
+ submit_btn.click(user_submit, [msg, chatbot], [msg, chatbot], queue=False).then(
65
+ bot_respond, [chatbot, api_key_input], chatbot
66
+ )
67
+
68
+ if __name__ == "__main__":
69
+ demo.launch(theme=gr.themes.Soft())
gitattributes.txt ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ openai>=1.52.0