seawolf2357 commited on
Commit
9c071a8
·
verified ·
1 Parent(s): 2656039

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -38
app.py CHANGED
@@ -6,6 +6,25 @@ import asyncio
6
  import subprocess
7
  from datasets import load_dataset
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  # 로깅 설정
10
  logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s', handlers=[logging.StreamHandler()])
11
 
@@ -16,10 +35,6 @@ intents.messages = True
16
  intents.guilds = True
17
  intents.guild_messages = True
18
 
19
- # 데이터셋 로드
20
- data_files = ['train_0.csv', 'train_1.csv', 'train_2.csv', 'train_3.csv', 'train_4.csv', 'train_5.csv']
21
- law_dataset = load_dataset('csv', data_files=data_files)
22
-
23
  # 추론 API 클라이언트 설정
24
  hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus", token=os.getenv("HF_TOKEN"))
25
 
@@ -29,6 +44,9 @@ SPECIFIC_CHANNEL_ID = int(os.getenv("DISCORD_CHANNEL_ID"))
29
  # 대화 히스토리를 저장할 전역 변수
30
  conversation_history = []
31
 
 
 
 
32
  class MyClient(discord.Client):
33
  def __init__(self, *args, **kwargs):
34
  super().__init__(*args, **kwargs)
@@ -48,7 +66,7 @@ class MyClient(discord.Client):
48
  return
49
  self.is_processing = True
50
  try:
51
- response = await self.generate_response(message)
52
  await message.channel.send(response)
53
  finally:
54
  self.is_processing = False
@@ -58,39 +76,38 @@ class MyClient(discord.Client):
58
  isinstance(message.channel, discord.Thread) and message.channel.parent_id == SPECIFIC_CHANNEL_ID
59
  )
60
 
61
- async def generate_response(self, message):
62
- global conversation_history
63
- user_input = message.content
64
- user_mention = message.author.mention
65
- system_message = f"{user_mention}, DISCORD에서 사용자들의 질문에 답하는 어시스턴트입니다."
66
- answer = self.search_in_dataset(user_input, law_dataset)
67
- full_response_text = system_message + "\n\n" + answer
68
-
69
- if not full_response_text.strip():
70
- full_response_text = "죄송합니다, 정보를 제공할 수 없습니다."
71
-
72
- max_length = 2000
73
- if len(full_response_text) > max_length:
74
- for i in range(0, len(full_response_text), max_length):
75
- part_response = full_response_text[i:i+max_length]
76
- await message.channel.send(part_response)
77
- else:
78
- await message.channel.send(full_response_text)
79
-
80
- logging.debug(f'Full model response sent: {full_response_text}')
81
- conversation_history.append({"role": "assistant", "content": full_response_text})
82
-
83
- def search_in_dataset(self, query, dataset):
84
- # 사용자의 쿼리와 관련된 사건명을 찾아 사건번호를 반환합니다.
85
- response = []
86
- for record in dataset['train']:
87
- # 사건명 필드가 None이 아닐 때만 검사를 수행
88
- if record['사건명'] and query in record['사건명']:
89
- detail = f"사건번호: {record['사건번호']}"
90
- response.append(detail)
91
-
92
- return "\n".join(response) if response else "관련 법률 정보를 찾을 수 없습니다."
93
-
94
 
95
  if __name__ == "__main__":
96
  discord_client = MyClient(intents=intents)
 
6
  import subprocess
7
  from datasets import load_dataset
8
 
9
+ # 현재 작업 디렉토리 출력
10
+ print("Current Working Directory:", os.getcwd())
11
+
12
+ # 데이터셋 파일 이름
13
+ data_file = 'train_0.csv'
14
+
15
+ # 현재 작업 디렉토리에 파일이 있는지 확인
16
+ if os.path.exists(data_file):
17
+ print(f"File {data_file} exists in the current directory.")
18
+ else:
19
+ print(f"File {data_file} does not exist in the current directory.")
20
+ # 작업 디렉토리 변경 (필요한 경우)
21
+ os.chdir('/home/user/app')
22
+ print("Changed directory to:", os.getcwd())
23
+
24
+ # 데이터셋 로드
25
+ law_dataset = load_dataset('csv', data_files=data_file)
26
+ print("Dataset loaded successfully.")
27
+
28
  # 로깅 설정
29
  logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s', handlers=[logging.StreamHandler()])
30
 
 
35
  intents.guilds = True
36
  intents.guild_messages = True
37
 
 
 
 
 
38
  # 추론 API 클라이언트 설정
39
  hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus", token=os.getenv("HF_TOKEN"))
40
 
 
44
  # 대화 히스토리를 저장할 전역 변수
45
  conversation_history = []
46
 
47
+ # 법률 데이터셋 로드
48
+ law_dataset = load_dataset('csv', data_files='train_0.csv')
49
+
50
  class MyClient(discord.Client):
51
  def __init__(self, *args, **kwargs):
52
  super().__init__(*args, **kwargs)
 
66
  return
67
  self.is_processing = True
68
  try:
69
+ response = await generate_response(message)
70
  await message.channel.send(response)
71
  finally:
72
  self.is_processing = False
 
76
  isinstance(message.channel, discord.Thread) and message.channel.parent_id == SPECIFIC_CHANNEL_ID
77
  )
78
 
79
+ async def generate_response(message):
80
+ global conversation_history
81
+ user_input = message.content
82
+ user_mention = message.author.mention
83
+ system_message = f"{user_mention}, DISCORD에서 사용자들의 질문에 답하는 어시스턴트입니다."
84
+
85
+ # 데이터 검색 응답 준비
86
+ answer = search_in_dataset(user_input, law_dataset)
87
+ full_response_text = system_message + "\n\n" + answer
88
+
89
+ # 응답 분할 전송
90
+ max_length = 2000
91
+ if len(full_response_text) > max_length:
92
+ # 너무 메시지를 여러 부분으로 나누어 보냅니다.
93
+ for i in range(0, len(full_response_text), max_length):
94
+ part_response = full_response_text[i:i+max_length]
95
+ await message.channel.send(part_response)
96
+ else:
97
+ # 메시지 길이가 적절하면 한 번에 전송
98
+ await message.channel.send(full_response_text)
99
+
100
+ logging.debug(f'Full model response sent: {full_response_text}')
101
+ conversation_history.append({"role": "assistant", "content": full_response_text})
102
+
103
+
104
+ def search_in_dataset(query, dataset):
105
+ # 간단한 검색 로직을 구현합니다.
106
+ # 여기에서는 예제로 단순화하기 위해 첫 번째 항목을 반환합니다.
107
+ for record in dataset['train']:
108
+ if query in record['사건명']:
109
+ return record['사건번호']
110
+ return "관련 법률 정보를 찾을 수 없습니다."
 
111
 
112
  if __name__ == "__main__":
113
  discord_client = MyClient(intents=intents)