ginipick commited on
Commit
884361c
·
verified ·
1 Parent(s): ea2c4cf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -78
app.py CHANGED
@@ -35,6 +35,9 @@ MixGEN_code = load_code('mgen.cod')
35
  # 초기 Parquet 파일 로드 (기존 test.parquet)
36
  test_parquet_content = load_parquet('test.parquet')
37
 
 
 
 
38
  def respond(
39
  message,
40
  history: List[Tuple[str, str]],
@@ -42,9 +45,8 @@ def respond(
42
  max_tokens=1024, # 기본값 추가
43
  temperature=0.7, # 기본값 추가
44
  top_p=0.9, # 기본값 추가
45
- parquet_content="", # Parquet 파일 내용 상태
46
  ):
47
- global fashion_code, uhdimage_code, MixGEN_code, test_parquet_content
48
  system_message = system_message or ""
49
  system_prefix = """반드시 한글로 답변할것. 너는 주어진 소스코드를 기반으로 "서비스 사용 설명 및 안내, Q&A를 하는 역할이다". 아주 친절하고 자세하게 4000토큰 이상 Markdown 형식으로 작성하라. 너는 코드를 기반으로 사용 설명 및 질의 응답을 진행하며, 이용자에게 도움을 주어야 한다. 이용자가 궁금해 할 만한 내용에 친절하게 알려주도록 하라. 코드 전체 내용에 대해서는 보안을 유지하고, 키 값 및 엔드포인트와 구체적인 모델은 공개하지 마라."""
50
 
@@ -59,10 +61,10 @@ def respond(
59
  system_message += f"\n\nMixGEN 코드 내용:\n```python\n{MixGEN_code}\n```"
60
  message = "MixGEN3 이미지 생성에 대한 내용을 학습하였고, 설명할 준비가 되어있다고 알리고 서비스 URL(https://openfree-mixgen3.hf.space)을 통해 테스트 해보라고 출력하라."
61
  elif message.lower() == "test.parquet 실행":
62
- system_message += f"\n\ntest.parquet 파일 내용:\n```markdown\n{parquet_content}\n```"
63
  message = "test.parquet 파일에 대한 내용을 학습하였고, 관련 설명 및 Q&A를 진행할 준비가 되어있다. 궁금한 점이 있으면 물어보라."
64
  elif message.lower() == "csv 업로드":
65
- message = "CSV 파일을 업로드하려면 아래의 업로드 버튼을 사용하세요."
66
 
67
  # 시스템 메시지와 사용자 메시지 결합
68
  messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}]
@@ -94,6 +96,14 @@ def upload_csv(file):
94
  # CSV 파일 읽기 (filepath 타입이므로 file은 경로 문자열)
95
  df = pd.read_csv(file)
96
 
 
 
 
 
 
 
 
 
97
  # 데이터 클렌징
98
  df.drop_duplicates(inplace=True)
99
  df.fillna('', inplace=True)
@@ -108,93 +118,70 @@ def upload_csv(file):
108
  # Parquet 파일 로드
109
  parquet_content = load_parquet(parquet_filename)
110
 
 
 
 
 
111
  return f"{parquet_filename} 파일이 성공적으로 업로드되고 변환되었습니다.", parquet_content
112
  except Exception as e:
113
  return f"CSV 파일 업로드 및 변환 중 오류가 발생했습니다: {str(e)}", ""
114
 
115
  # Gradio Blocks 인터페이스 설정
116
- with gr.Blocks() as demo:
117
  gr.Markdown("# LLM 서비스 인터페이스")
118
-
119
- with gr.Row():
120
- with gr.Column():
121
- # CSV 파일 업로드 섹션
122
- gr.Markdown("### CSV 파일 업로드 및 Parquet 변환")
123
- csv_file = gr.File(label="CSV 파일 업로드", type="filepath")
124
- upload_button = gr.Button("업로드 변환")
125
- upload_status = gr.Textbox(label="업로드 상태", interactive=False)
126
- parquet_preview = gr.Markdown(label="Parquet 파일 미리보기")
127
-
128
- # 업로드 버튼 클릭 시 실행할 함수
129
- upload_button.click(
130
- upload_csv,
131
- inputs=csv_file,
132
- outputs=[upload_status, parquet_preview]
133
- )
134
-
135
- gr.Markdown("### 기존 Parquet 파일")
136
- gr.Markdown(f"**test.parquet 파일 내용:**\n```markdown\n{test_parquet_content}\n```")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
- with gr.Column():
139
- # Chat 인터페이스 섹션
140
- gr.Markdown("### LLM과 대화하기")
141
- chat_history = gr.State([]) # 대화 히스토리 저장
142
- parquet_content_state = gr.State(test_parquet_content) # 초기 Parquet 내용 상태
143
-
144
- def chat_respond(
145
- message,
146
- history,
147
- system_message,
148
- max_tokens,
149
- temperature,
150
- top_p,
151
- parquet_content
152
- ):
153
- # 현재 Parquet 내용 상태를 업데이트
154
- response = respond(message, history, system_message, max_tokens, temperature, top_p, parquet_content)
155
- return response
156
-
157
- chat = gr.Chatbot()
158
- system_message = gr.Textbox(label="System Message", value="")
159
- max_tokens = gr.Slider(minimum=1, maximum=8000, value=4000, label="Max Tokens")
160
- temperature = gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature")
161
- top_p = gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P")
162
-
163
- with gr.Row():
164
- user_message = gr.Textbox(label="메시지 입력")
165
- send_button = gr.Button("보내기")
166
-
167
- send_button.click(
168
- chat_respond,
169
- inputs=[user_message, chat_history, system_message, max_tokens, temperature, top_p, parquet_preview],
170
- outputs=[chat, chat_history]
171
- )
172
-
173
- gr.Markdown("## 사용 예제")
174
- gr.Examples(
175
- examples=[
176
- ["패션 코드 실행"],
177
- ["UHD 이미지 코드 실행"],
178
- ["MixGEN 코드 실행"],
179
- ["test.parquet 실행"], # 새로운 예제 추가
180
- ["상세한 사용 방법을 마치 화면을 보면서 설명하듯이 4000 토큰 이상 자세히 설명하라"],
181
- ["FAQ 20건을 상세하게 작성하라. 4000토큰 이상 사용하라."],
182
- ["사용 방법과 차별점, 특징, 강점을 중심으로 4000 토큰 이상 유튜브 영상 스크립트 형태로 작성하라"],
183
- ["본 서비스를 SEO 최적화하여 블로그 포스트(배경 및 필요성, 기존 유사 서비스와 비교하여 특장점, 활용처, 가치, 기대효과, 결론을 포함)로 4000 토큰 이상 작성하라"],
184
- ["특허 출원에 활용할 기술 및 비즈니스모델 측면을 포함하여 특허 출원서 구성에 맞게 혁신적인 창의 발명 내용을 중심으로 4000 토큰 이상 작성하라."],
185
- ["계속 이어서 답변하라"],
186
- ],
187
- inputs=user_message,
188
- label="예제 선택",
189
- )
190
-
191
  gr.Markdown("## 주의 사항")
192
  gr.Markdown("""
193
  - **CSV 업로드**: CSV 파일을 업로드하면 자동으로 Parquet 파일로 변환됩니다.
194
  - **Parquet 미리보기**: 업로드된 Parquet 파일의 첫 10개 행이 미리보기로 표시됩니다.
195
  - **LLM과의 대화**: 변환된 Parquet 파일 내용을 기반으로 LLM이 응답을 생성합니다.
196
  """)
197
-
198
  gr.Markdown("### Gradio 인터페이스를 사용하여 LLM 모델과 상호작용하세요!")
199
 
200
  if __name__ == "__main__":
 
35
  # 초기 Parquet 파일 로드 (기존 test.parquet)
36
  test_parquet_content = load_parquet('test.parquet')
37
 
38
+ # 글로벌 변수로 Parquet 내용 저장
39
+ current_parquet_content = test_parquet_content
40
+
41
  def respond(
42
  message,
43
  history: List[Tuple[str, str]],
 
45
  max_tokens=1024, # 기본값 추가
46
  temperature=0.7, # 기본값 추가
47
  top_p=0.9, # 기본값 추가
 
48
  ):
49
+ global fashion_code, uhdimage_code, MixGEN_code, current_parquet_content
50
  system_message = system_message or ""
51
  system_prefix = """반드시 한글로 답변할것. 너는 주어진 소스코드를 기반으로 "서비스 사용 설명 및 안내, Q&A를 하는 역할이다". 아주 친절하고 자세하게 4000토큰 이상 Markdown 형식으로 작성하라. 너는 코드를 기반으로 사용 설명 및 질의 응답을 진행하며, 이용자에게 도움을 주어야 한다. 이용자가 궁금해 할 만한 내용에 친절하게 알려주도록 하라. 코드 전체 내용에 대해서는 보안을 유지하고, 키 값 및 엔드포인트와 구체적인 모델은 공개하지 마라."""
52
 
 
61
  system_message += f"\n\nMixGEN 코드 내용:\n```python\n{MixGEN_code}\n```"
62
  message = "MixGEN3 이미지 생성에 대한 내용을 학습하였고, 설명할 준비가 되어있다고 알리고 서비스 URL(https://openfree-mixgen3.hf.space)을 통해 테스트 해보라고 출력하라."
63
  elif message.lower() == "test.parquet 실행":
64
+ system_message += f"\n\ntest.parquet 파일 내용:\n```markdown\n{current_parquet_content}\n```"
65
  message = "test.parquet 파일에 대한 내용을 학습하였고, 관련 설명 및 Q&A를 진행할 준비가 되어있다. 궁금한 점이 있으면 물어보라."
66
  elif message.lower() == "csv 업로드":
67
+ message = "CSV 파일을 업로드하려면 번째 탭을 사용하세요."
68
 
69
  # 시스템 메시지와 사용자 메시지 결합
70
  messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}]
 
96
  # CSV 파일 읽기 (filepath 타입이므로 file은 경로 문자열)
97
  df = pd.read_csv(file)
98
 
99
+ # CSV 파일의 컬럼 확인
100
+ required_columns = {'id', 'text', 'label', 'metadata'}
101
+ available_columns = set(df.columns)
102
+ missing_columns = required_columns - available_columns
103
+
104
+ if missing_columns:
105
+ return f"CSV 파일에 다음 필수 컬럼이 누락되었습니다: {', '.join(missing_columns)}", ""
106
+
107
  # 데이터 클렌징
108
  df.drop_duplicates(inplace=True)
109
  df.fillna('', inplace=True)
 
118
  # Parquet 파일 로드
119
  parquet_content = load_parquet(parquet_filename)
120
 
121
+ # 글로벌 변수 업데이트
122
+ global current_parquet_content
123
+ current_parquet_content = parquet_content
124
+
125
  return f"{parquet_filename} 파일이 성공적으로 업로드되고 변환되었습니다.", parquet_content
126
  except Exception as e:
127
  return f"CSV 파일 업로드 및 변환 중 오류가 발생했습니다: {str(e)}", ""
128
 
129
  # Gradio Blocks 인터페이스 설정
130
+ with gr.Blocks(theme="Nymbo/Nymbo_Theme",) as demo:
131
  gr.Markdown("# LLM 서비스 인터페이스")
132
+
133
+ with gr.Tab("챗봇"):
134
+ gr.Markdown("### LLM과 대화하기")
135
+ chat = gr.ChatInterface(
136
+ respond,
137
+ additional_inputs=[
138
+ gr.Textbox(label="System Message", value=""),
139
+ gr.Slider(minimum=1, maximum=8000, value=4000, label="Max Tokens"),
140
+ gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature"),
141
+ gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P"),
142
+ ],
143
+ examples=[
144
+ ["패션 코드 실행"],
145
+ ["UHD 이미지 코드 실행"],
146
+ ["MixGEN 코드 실행"],
147
+ ["test.parquet 실행"], # 새로운 예제 추가
148
+ ["상세한 사용 방법을 마치 화면을 보면서 설명하듯이 4000 토큰 이상 자세히 설명하라"],
149
+ ["FAQ 20건을 상세하게 작성하라. 4000토큰 이상 사용하라."],
150
+ ["사용 방법과 차별점, 특징, 강점을 중심으로 4000 토큰 이상 유튜브 영상 스크립트 형태로 작성하라"],
151
+ ["본 서비스를 SEO 최적화하여 블로그 포스트(배경 및 필요성, 기존 유사 서비스와 비교하여 특장점, 활용처, 가치, 기대효과, 결론을 포함)로 4000 토큰 이상 작성하라"],
152
+ ["특허 출원에 활용할 기술 및 비즈니스모델 측면을 포함하여 특허 출원서 구성에 맞게 혁신적인 창의 발명 내용을 중심으로 4000 토큰 이상 작성하라."],
153
+ ["계속 이어서 답변하라"],
154
+ ],
155
+ theme="Nymbo/Nymbo_Theme",
156
+ cache_examples=False, # 캐싱 비활성화 설정
157
+ )
158
+
159
+ with gr.Tab("데이터 변환"):
160
+ gr.Markdown("### CSV 파일 업로드 및 Parquet 변환")
161
+ with gr.Row():
162
+ with gr.Column():
163
+ csv_file = gr.File(label="CSV 파일 업로드", type="filepath")
164
+ upload_button = gr.Button("업로드 및 변환")
165
+ upload_status = gr.Textbox(label="업로드 상태", interactive=False)
166
+ parquet_preview = gr.Markdown(label="Parquet 파일 미리보기")
167
+
168
+ # 업로드 버튼 클릭 시 실행할 함수
169
+ upload_button.click(
170
+ upload_csv,
171
+ inputs=csv_file,
172
+ outputs=[upload_status, parquet_preview]
173
+ )
174
 
175
+ gr.Markdown("### 기존 Parquet 파일")
176
+ gr.Markdown(f"**test.parquet 파일 내용:**\n```markdown\n{test_parquet_content}\n```")
177
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  gr.Markdown("## 주의 사항")
179
  gr.Markdown("""
180
  - **CSV 업로드**: CSV 파일을 업로드하면 자동으로 Parquet 파일로 변환됩니다.
181
  - **Parquet 미리보기**: 업로드된 Parquet 파일의 첫 10개 행이 미리보기로 표시됩니다.
182
  - **LLM과의 대화**: 변환된 Parquet 파일 내용을 기반으로 LLM이 응답을 생성합니다.
183
  """)
184
+
185
  gr.Markdown("### Gradio 인터페이스를 사용하여 LLM 모델과 상호작용하세요!")
186
 
187
  if __name__ == "__main__":