enotkrutoy commited on
Commit
0f25622
Β·
verified Β·
1 Parent(s): 455dcee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +163 -70
app.py CHANGED
@@ -1,79 +1,172 @@
1
- import gradio as gr
2
- import groq_gradio
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  import os
4
- import openai
 
 
 
5
 
6
- # Set up the client to interact with Groq API through OpenAI's endpoint
7
- client = openai.OpenAI(
8
- base_url="https://api.groq.com/openai/v1", # URL for Groq's API endpoint
9
- api_key=os.environ.get("GROQ_API_KEY") # Retrieve the API key from environment variables
10
- )
11
-
12
- # Example usage of the client (sending a request to Groq API)
13
- response = client.completions.create(
14
- model="gpt-4", # You can replace with the desired model
15
- prompt="Provide a summary of the Groq API documentation",
16
- max_tokens=100
17
- )
18
-
19
-
20
-
21
- print(response.choices[0].text.strip()) # Output the response from Groq API
22
-
23
-
24
- gr.load(
25
- name = "Ai;)",
26
- src = groq_gradio.registry,
27
- title = "Groq-Gradio Chat",
28
- theme = "upsatwal/mlsc_tiet",
29
- examples = [""""
30
-
31
- ###system_prompt'''
32
-
33
- **ВСхничСская Π·Π°Π΄Π°Ρ‡Π°**: НаписаниС ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½ΠΎΠ³ΠΎ объявлСния для сдачи Π² Π°Ρ€Π΅Π½Π΄Ρƒ нСдвиТимости, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π΅Π½Π΄Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ прСимущСства ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹.
34
 
35
- ### Π¨Π°Π³ΠΈ для выполнСния
36
 
37
- 1. **Π‘Π±ΠΎΡ€ основной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ**:
38
- - **АдрСс ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅**: Π£Ρ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ адрСс ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, блиТайшиС Π΄ΠΎΡΡ‚ΠΎΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, транспортныС ΡƒΠ·Π»Ρ‹, ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹, ΡˆΠΊΠΎΠ»Ρ‹, ΠΏΠ°Ρ€ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если Π΅ΡΡ‚ΡŒ ссылка Π½Π° Google Maps, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‘ для Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° окруТСния.
39
- - **БостояниС ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹ ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚**: ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹, качСство ΠΈ ΡΡ‚ΠΈΠ»ΡŒ ΠΎΡ‚Π΄Π΅Π»ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ удобства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мСбСль, Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΊΠΎΠ½Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Ρ€, ΠΎΡ‚ΠΎΠΏΠ»Π΅Π½ΠΈΠ΅).
40
- - **Π¦Π΅Π½Π°**: Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π°Ρ€Π΅Π½Π΄Ρ‹ Π² мСсяц, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ скидки ΠΈΠ»ΠΈ условия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, скидки Π½Π° Π΄ΠΎΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΡƒΡŽ Π°Ρ€Π΅Π½Π΄Ρƒ.
41
- - **Π€ΠΎΡ‚ΠΎ**: Если Π΅ΡΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.
 
42
 
43
- 2. **На основС прСдоставлСнных Π΄Π°Π½Π½Ρ‹Ρ…**:
44
- - ΠŸΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ Π°Π½Π°Π»ΠΈΠ· окруТСния ΠΏΠΎ Google Maps, описав Π±Π»ΠΈΠ·Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, удобства Ρ€Π°ΠΉΠΎΠ½Π°, инфраструктуру ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ особСнности.
45
- - ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для добавлСния Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎΠ± ΠΈΠ½Ρ‚Π΅Ρ€ΡŒΠ΅Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ особСнности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ Π°Ρ€Π΅Π½Π΄Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, большиС ΠΎΠΊΠ½Π°, новая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, удобная ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°).
46
- - На основС всСх Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ объявлСниС, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² прСимущСства ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ выглядСло Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для Π°Ρ€Π΅Π½Π΄Π°Ρ‚ΠΎΡ€ΠΎΠ².
47
 
48
- ---
49
 
50
- ### Π£Ρ‚ΠΎΡ‡Π½ΡΡŽΡ‰ΠΈΠ΅ вопросы для сбора ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:
51
 
52
- 1. Какой Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ адрСс ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹?
53
- 2. Π•ΡΡ‚ΡŒ Π»ΠΈ рядом станции ΠΌΠ΅Ρ‚Ρ€ΠΎ, остановки транспорта, ΠΏΠ°Ρ€ΠΊΠΈ, ΡˆΠΊΠΎΠ»Ρ‹, ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹? Если Π΅ΡΡ‚ΡŒ ссылка Π½Π° Google Maps, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π΅Ρ‘.
54
- 3. Π’ ΠΊΠ°ΠΊΠΎΠΌ состоянии находится ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π°? ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ€Π΅ΠΌΠΎΠ½Ρ‚, мСбСль, Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΈ особСнности ΠΎΡ‚Π΄Π΅Π»ΠΊΠΈ.
55
- 4. Какова Ρ†Π΅Π½Π° Π°Ρ€Π΅Π½Π΄Ρ‹? ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Ρ‹ Π»ΠΈ скидки для долгосрочных Π°Ρ€Π΅Π½Π΄Π°Ρ‚ΠΎΡ€ΠΎΠ²?
56
- 5. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹ для Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания.
57
-
58
- ---
59
-
60
- ### ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния Π½Π° основС собранной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π½Π° украинском языкС, с Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² КиСвС):
61
-
62
- **Π—Π΄Π°Ρ”Ρ‚ΡŒΡΡ Π² ΠΎΡ€Π΅Π½Π΄Ρƒ простора 2-ΠΊΡ–ΠΌΠ½Π°Ρ‚Π½Π° ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° Ρƒ Ρ†Π΅Π½Ρ‚Ρ€Ρ– ΠšΠΈΡ”Π²Π°, Π½Π΅ΠΏΠΎΠ΄Π°Π»Ρ–ΠΊ Π²Ρ–Π΄ ΠΌΠ΅Ρ‚Ρ€ΠΎ ΠŸΠ°Π»Π°Ρ† Π£ΠΊΡ€Π°Ρ—Π½Π°!**
63
-
64
- АдрСса: [Π²ΠΊΠ°Π·Π°Π½ΠΈΠΉ адрСс]
65
-
66
- **Опис ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΈ**:
67
- Π‘Π²Ρ–Ρ‚Π»Π°, сучасна ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° Π· Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΌ Ρƒ ΡΠΊΠ°Π½Π΄ΠΈΠ½Π°Π²ΡΡŒΠΊΠΎΠΌΡƒ стилі. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ€Π° Π²Ρ–Ρ‚Π°Π»ΡŒΠ½Ρ, Π²Π΅Π»ΠΈΠΊΠ° кухня Π· ΡƒΡΡ–Ρ”ΡŽ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎΡŽ Ρ‚Π΅Ρ…Π½Ρ–ΠΊΠΎΡŽ (Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ, ΠΏΠ»ΠΈΡ‚Π°, ΠΌΡ–ΠΊΡ€ΠΎΡ…Π²ΠΈΠ»ΡŒΠΎΠ²Π° ΠΏΡ–Ρ‡), Π·Π°Ρ‚ΠΈΡˆΠ½Π° спальня Π· Π²Π΅Π»ΠΈΠΊΠΈΠΌ Π»Ρ–ΠΆΠΊΠΎΠΌ. Π£ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ– Ρ” ΠΊΠΎΠ½Π΄ΠΈΡ†Ρ–ΠΎΠ½Π΅Ρ€, Ρ‚Π΅Π»Π΅Π²Ρ–Π·ΠΎΡ€, ΠΏΡ€Π°Π»ΡŒΠ½Π° машина, Π° Ρ‚Π°ΠΊΠΎΠΆ Π±Π°Π³Π°Ρ‚ΠΎ місця для збСрігання.
68
-
69
- **Інфраструктура**:
70
- ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° Ρ€ΠΎΠ·Ρ‚Π°ΡˆΠΎΠ²Π°Π½Π° Ρƒ ΠΏΡ–ΡˆΡ–ΠΉ доступності Π΄ΠΎ станцій ΠΌΠ΅Ρ‚Ρ€ΠΎ ΠŸΠ°Π»Π°Ρ† Π£ΠΊΡ€Π°Ρ—Π½Π° Ρ‚Π° ΠžΠ»Ρ–ΠΌΠΏΡ–ΠΉΡΡŒΠΊΠ°, ΠΏΠΎΡ€ΡƒΡ‡ Π·ΡƒΠΏΠΈΠ½ΠΊΠΈ Π³Ρ€ΠΎΠΌΠ°Π΄ΡΡŒΠΊΠΎΠ³ΠΎ транспорту. Π£ Ρ€Π°ΠΉΠΎΠ½Ρ– Π±Π°Π³Π°Ρ‚ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ–Π², ΠΊΠ°Ρ„Π΅, ΠΏΠ°Ρ€ΠΊΡ–Π², дитячих ΠΌΠ°ΠΉΠ΄Π°Π½Ρ‡ΠΈΠΊΡ–Π², Π° Ρ‚Π°ΠΊΠΎΠΆ Π’Π¦ ОкСан Плаза – Π·Ρ€ΡƒΡ‡Π½Π΅ місцС для ΡˆΠΎΠΏΡ–Π½Π³Ρƒ.
71
-
72
- **Π¦Ρ–Π½Π°**: Π₯Π₯Π₯ Π³Ρ€Π½/ΠΌΡ–ΡΡΡ†ΡŒ (ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ– Π·Π½ΠΈΠΆΠΊΠΈ для Π΄ΠΎΠ²Π³ΠΎΡ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡ— ΠΎΡ€Π΅Π½Π΄ΠΈ).
73
 
74
- Π—Π²Π΅Ρ€Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π° дСталями, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΡŒΡ‚Π΅ Π½Π° огляд Ρ– Π·Π°ΠΊΠΎΡ…Π°ΠΉΡ‚Π΅ΡΡŒ Ρƒ Π²Π°ΡˆΡƒ Π½ΠΎΠ²Ρƒ осСлю!
75
- '''
76
- """]
77
- ).launch()
78
- # Define the system prompt with context and detailed instructions
79
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Hugging Face's logo
2
+ Hugging Face
3
+ Search models, datasets, users...
4
+ Models
5
+ Datasets
6
+ Spaces
7
+ Posts
8
+ Docs
9
+ Enterprise
10
+ Pricing
11
+
12
+
13
+
14
+ Spaces:
15
+
16
+ dromerosm
17
+ /
18
+ groq-llama3
19
+
20
+
21
+ like
22
+ 29
23
+ App
24
+ Files
25
+ Community
26
+ groq-llama3
27
+ /
28
+ app.py
29
+
30
+ dromerosm's picture
31
+ dromerosm
32
+ Update app.py
33
+ 81a6356
34
+ verified
35
+ 4 months ago
36
+ raw
37
+
38
+ Copy download link
39
+ history
40
+ blame
41
+ contribute
42
+ delete
43
+
44
+ 4.5 kB
45
  import os
46
+ from dotenv import find_dotenv, load_dotenv
47
+ import streamlit as st
48
+ from typing import Generator
49
+ from groq import Groq
50
 
51
+ _ = load_dotenv(find_dotenv())
52
+ st.set_page_config(page_icon="πŸ“ƒ", layout="wide", page_title="Groq & LLaMA3.1 Chat Bot...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
 
54
 
55
+ def icon(emoji: str):
56
+ """Shows an emoji as a Notion-style page icon."""
57
+ st.write(
58
+ f'<span style="font-size: 78px; line-height: 1">{emoji}</span>',
59
+ unsafe_allow_html=True,
60
+ )
61
 
 
 
 
 
62
 
63
+ # icon("⚑️")
64
 
65
+ st.subheader("Groq Chat with LLaMA3.1 App", divider="rainbow", anchor=False)
66
 
67
+ client = Groq(
68
+ api_key=os.environ['GROQ_API_KEY'],
69
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
+ # Initialize chat history and selected model
72
+ if "messages" not in st.session_state:
73
+ st.session_state.messages = []
74
+
75
+ if "selected_model" not in st.session_state:
76
+ st.session_state.selected_model = None
77
+
78
+ # Define model details
79
+ models = {
80
+ "llama-3.1-70b-versatile": {"name": "LLaMA3.1-70b", "tokens": 4096, "developer": "Meta"},
81
+ "llama-3.1-8b-instant": {"name": "LLaMA3.1-8b", "tokens": 4096, "developer": "Meta"},
82
+ "llama3-70b-8192": {"name": "Meta Llama 3 70B", "tokens": 4096, "developer": "Meta"},
83
+ "llama3-8b-8192": {"name": "Meta Llama 3 8B", "tokens": 4096, "developer": "Meta"},
84
+ "llama3-groq-70b-8192-tool-use-preview": {"name": "Llama 3 Groq 70B Tool Use (Preview)", "tokens": 4096, "developer": "Groq"},
85
+ "gemma-7b-it": {"name": "Gemma-7b-it", "tokens": 4096, "developer": "Google"},
86
+ "mixtral-8x7b-32768": {
87
+ "name": "Mixtral-8x7b-Instruct-v0.1",
88
+ "tokens": 32768,
89
+ "developer": "Mistral",
90
+ },
91
+ }
92
+
93
+ # Layout for model selection and max_tokens slider
94
+ col1, col2 = st.columns([1, 3]) # Adjust the ratio to make the first column smaller
95
+
96
+
97
+ with col1:
98
+ model_option = st.selectbox(
99
+ "Choose a model:",
100
+ options=list(models.keys()),
101
+ format_func=lambda x: models[x]["name"],
102
+ index=0, # Default to the first model in the list
103
+ )
104
+ max_tokens_range = models[model_option]["tokens"]
105
+ max_tokens = st.slider(
106
+ "Max Tokens:",
107
+ min_value=512,
108
+ max_value=max_tokens_range,
109
+ value=min(32768, max_tokens_range),
110
+ step=512,
111
+ help=f"Adjust the maximum number of tokens (words) for the model's response. Max for selected model: {max_tokens_range}",
112
+ )
113
+
114
+ # Detect model change and clear chat history if model has changed
115
+ if st.session_state.selected_model != model_option:
116
+ st.session_state.messages = []
117
+ st.session_state.selected_model = model_option
118
+
119
+ # Add a "Clear Chat" button
120
+ if st.button("Clear Chat"):
121
+ st.session_state.messages = []
122
+
123
+ # Display chat messages from history on app rerun
124
+ for message in st.session_state.messages:
125
+ avatar = "πŸ”‹" if message["role"] == "assistant" else "πŸ§‘β€πŸ’»"
126
+ with st.chat_message(message["role"], avatar=avatar):
127
+ st.markdown(message["content"])
128
+
129
+
130
+ def generate_chat_responses(chat_completion) -> Generator[str, None, None]:
131
+ """Yield chat response content from the Groq API response."""
132
+ for chunk in chat_completion:
133
+ if chunk.choices[0].delta.content:
134
+ yield chunk.choices[0].delta.content
135
+
136
+
137
+ if prompt := st.chat_input("Enter your prompt here..."):
138
+ st.session_state.messages.append({"role": "user", "content": prompt})
139
+
140
+ with st.chat_message("user", avatar="πŸ§‘β€πŸ’»"):
141
+ st.markdown(prompt)
142
+
143
+ # Fetch response from Groq API
144
+ try:
145
+ chat_completion = client.chat.completions.create(
146
+ model=model_option,
147
+ messages=[
148
+ {"role": m["role"], "content": m["content"]}
149
+ for m in st.session_state.messages
150
+ ],
151
+ max_tokens=max_tokens,
152
+ stream=True,
153
+ )
154
+
155
+ # Use the generator function with st.write_stream
156
+ with st.chat_message("assistant", avatar="πŸ”‹"):
157
+ chat_responses_generator = generate_chat_responses(chat_completion)
158
+ full_response = st.write_stream(chat_responses_generator)
159
+ except Exception as e:
160
+ st.error(e, icon="❌")
161
+
162
+ # Append the full response to session_state.messages
163
+ if isinstance(full_response, str):
164
+ st.session_state.messages.append(
165
+ {"role": "assistant", "content": full_response}
166
+ )
167
+ else:
168
+ # Handle the case where full_response is not a string
169
+ combined_response = "\n".join(str(item) for item in full_response)
170
+ st.session_state.messages.append(
171
+ {"role": "assistant", "content": combined_response}
172
+ )