import gradio as gr import os import requests import json def create_deepseek_interface(): # 채팅 기록 상태를 저장할 State 객체 def query_deepseek(message, history, api_key): if not api_key: return history, "Fireworks AI API 키를 입력해주세요" # API 요청을 위한 대화 기록 준비 messages = [] for user, assistant in history: messages.append({"role": "user", "content": user}) messages.append({"role": "assistant", "content": assistant}) # 새 사용자 메시지 추가 messages.append({"role": "user", "content": message}) # API 요청 준비 url = "https://api.fireworks.ai/inference/v1/chat/completions" payload = { "model": "accounts/fireworks/models/deepseek-v3-0324", "max_tokens": 20480, "top_p": 1, "top_k": 40, "presence_penalty": 0, "frequency_penalty": 0, "temperature": 0.6, "messages": messages } headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization": f"Bearer {api_key}" } try: # API 요청 전송 response = requests.request("POST", url, headers=headers, data=json.dumps(payload)) response.raise_for_status() # HTTP 오류 발생 시 예외 발생 # 응답 추출 result = response.json() assistant_response = result.get("choices", [{}])[0].get("message", {}).get("content", "") # 대화 기록 업데이트 (Gradio chatbot 형식으로) history.append((message, assistant_response)) return history, "" except requests.exceptions.RequestException as e: error_msg = f"API 오류: {str(e)}" if hasattr(e, 'response') and e.response and e.response.status_code == 401: error_msg = "인증 실패. API 키를 확인해주세요." return history, error_msg # Gradio 인터페이스 생성 with gr.Blocks(theme="soft", fill_height=True) as demo: # 헤더 섹션 gr.Markdown( """ # 🤖 DeepSeek V3 추론 인터페이스 ### Fireworks AI가 제공하는 고급 AI 모델 """ ) # 메인 레이아웃 (두 개의 열) with gr.Row(): # 사이드바 - 모델 정보 및 API 키 with gr.Column(scale=1): gr.Markdown( """ ## 🔑 접근 제어 ### 추론 제공자 이 인터페이스는 Fireworks AI API를 통해 제공되는 DeepSeek-V3 모델에 연결됩니다. #### 인증 - 아래에 Fireworks AI API 키를 입력하세요 - 엔드-투-엔드 암호화로 안전한 API 접근 """ ) # API 키 입력 api_key = gr.Textbox( label="Fireworks AI API 키", placeholder="API 키를 입력하세요...", type="password" ) # 모델 세부 정보 섹션 gr.Markdown( """ ### 📊 모델 세부 정보 - **모델**: DeepSeek-V3-0324 - **제공자**: Fireworks AI - **최대 토큰**: 20,480 - **온도**: 0.6 - **기능**: 고급 언어 이해 """ ) # 오류 메시지 표시 error_box = gr.Markdown("") # 메인 콘텐츠 영역 with gr.Column(scale=2): # 채팅 인터페이스 chatbot = gr.Chatbot( height=500, show_label=False, container=True ) # 입력 영역 with gr.Row(): msg = gr.Textbox( label="메시지", placeholder="여기에 프롬프트를 입력하세요...", show_label=False, scale=9 ) submit = gr.Button("전송", variant="primary", scale=1) # 대화 초기화 버튼 with gr.Row(): clear = gr.ClearButton([msg, chatbot], value="🧹 대화 초기화") # 예제 쿼리 gr.Examples( examples=[ "딥러닝에서 트랜스포머와 RNN의 차이점을 설명해주세요.", "특정 범위 내의 소수를 찾는 파이썬 함수를 작성해주세요.", "강화학습의 주요 개념을 요약해주세요." ], inputs=msg ) # 폼 제출 처리 def process_query(message, history, api_key): if not message.strip(): return history, "" updated_history, error = query_deepseek(message, history, api_key) if error: return history, f"**오류:** {error}" else: return updated_history, "" # 버튼과 기능 연결 submit.click( process_query, inputs=[msg, chatbot, api_key], outputs=[chatbot, error_box] ).then( lambda: "", None, [msg] ) # Enter 키 제출 허용 msg.submit( process_query, inputs=[msg, chatbot, api_key], outputs=[chatbot, error_box] ).then( lambda: "", None, [msg] ) return demo # 인터페이스 실행 if __name__ == "__main__": demo = create_deepseek_interface() demo.launch(debug=True)