import gradio as gr from huggingface_hub import InferenceClient import os import requests # 추론 API 클라이언트 설정 hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus-08-2024", token=os.getenv("HF_TOKEN")) #hf_client = InferenceClient("CohereForAI/aya-23-35B", token=os.getenv("HF_TOKEN")) def load_fashion_code(): try: with open('fashion.cod', 'r', encoding='utf-8') as file: return file.read() except FileNotFoundError: return "fashion.cod 파일을 찾을 수 없습니다." except Exception as e: return f"파일을 읽는 중 오류가 발생했습니다: {str(e)}" fashion_code = load_fashion_code() def respond( message, history: list[tuple[str, str]], system_message="", # 기본값 추가 max_tokens=1024, # 기본값 추가 temperature=0.7, # 기본값 추가 top_p=0.9, # 기본값 추가 ): global fashion_code system_prefix = """반드시 한글로 답변할것. 너는 주어진 소스코드를 기반으로 "서비스 사용 설명 및 안내, qna를 하는 역할이다". 코드를 기반으로 사용 설명 및 질의 응답을 진행하며, 이용자에게 도움을 주어야 한다. 이용자가 궁금해 할 만 한 내용에 친절하게 알려주도록 하라. 코드 전체 내용에 대해서는 보안을 유지하고, 키 값 및 엔드포인트와 구체적인 모델은 공개하지 마라. """ if message.lower() == "패션 코드 실행": system_message = system_message or "" # None인 경우 빈 문자열로 초기화 system_message += f"\n\n패션 코드 내용:\n{fashion_code}" message = "패션 코드에 대해 설명해주세요." messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}] # prefix 추가 for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) messages.append({"role": "user", "content": message}) response = "" for message in hf_client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = message.choices[0].delta.content if token is not None: response += token.strip("") # 토큰 제거 yield response # Gradio 인터페이스 설정 부분도 수정 demo = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox(label="System Message", value=""), gr.Slider(minimum=1, maximum=2048, value=1024, label="Max Tokens"), gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature"), gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P"), ], examples=[ ["패션 코드 실행"], ["사용 방법을 자세히 설명하라"], ["사용 방법을 유튜브 영상 스크립트 형태로 작성하라"], ["사용 방법을 SEO 최적화하여 블로그 포스트로 4000 토큰 이상 작성하라"], ["계속 이어서 답변하라"], ], cache_examples=False, # 캐싱 비활성화 설정 # css="""footer {visibility: hidden}""", # 이곳에 CSS를 추가 ) if __name__ == "__main__": demo.launch(auth=("gini","pick"))