kenken999 commited on
Commit
53c0d42
1 Parent(s): b196eb5
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. mysite/gradio/gradio_config.py +6 -4
  2. routers/bunnkatu/.gpteng/memory/logs/all_output.txt +0 -2079
  3. routers/bunnkatu/.gpteng/memory/logs/gen_entrypoint_chat.txt +0 -842
  4. routers/bunnkatu/Structure +0 -13
  5. routers/bunnkatu/app.py +0 -20
  6. routers/bunnkatu/logger.py +0 -10
  7. routers/bunnkatu/models/interpreter.py +0 -10
  8. routers/bunnkatu/mysite/chat_with_interpreter.py +0 -6
  9. routers/bunnkatu/mysite/completion.py +0 -7
  10. routers/bunnkatu/mysite/db.py +0 -28
  11. routers/bunnkatu/mysite/environment.py +0 -7
  12. routers/bunnkatu/mysite/file_processor.py +0 -70
  13. routers/bunnkatu/mysite/interpreter.py +0 -38
  14. routers/bunnkatu/mysite/logger.py +0 -9
  15. routers/bunnkatu/mysite/no_process_file.py +0 -8
  16. routers/bunnkatu/mysite/process_file.py +0 -8
  17. routers/bunnkatu/mysite/utils.py +0 -16
  18. routers/bunnkatu/mysite/validator.py +0 -14
  19. routers/bunnkatu/prompt +0 -2
  20. routers/bunnkatu/prompt.txt +0 -5
  21. routers/bunnkatu/requirements.txt +0 -4
  22. routers/bunnkatu/run.sh +0 -7
  23. routers/bunnkatu/src/__init__.py +0 -1
  24. routers/bunnkatu/src/api_repository.py +0 -8
  25. routers/bunnkatu/src/crawler.py +0 -26
  26. routers/bunnkatu/src/models/__init__.py +0 -1
  27. routers/bunnkatu/src/models/api.py +0 -8
  28. routers/bunnkatu/tests/__init__.py +0 -1
  29. routers/bunnkatu/tests/test_api_repository.py +0 -7
  30. routers/bunnkatu/tests/test_crawler.py +0 -7
  31. routers/bunnkatu/utils/file_utils.py +0 -10
  32. routers/bunnkatu/utils/process_utils.py +0 -7
  33. routers/chat/{chat.py → Chat.py} +1 -1
  34. routers/chat/demo3.py +0 -18
  35. routers/chats/{chats.py → OpenInterpreter.py} +0 -0
  36. routers/{greet → chats}/__init__.py +0 -0
  37. routers/googleappsscript34/.gpteng/memory/logs/all_output.txt +0 -251
  38. routers/googleappsscript34/.gpteng/memory/logs/gen_entrypoint_chat.txt +0 -188
  39. routers/googleappsscript34/Code.gs +0 -5
  40. routers/googleappsscript34/ImageHandler.gs +0 -9
  41. routers/googleappsscript34/Line.gs +0 -9
  42. routers/googleappsscript34/PlantUML.gs +0 -38
  43. routers/googleappsscript34/S3Uploader.gs +0 -38
  44. routers/googleappsscript34/SecretManager.gs +0 -6
  45. routers/googleappsscript34/SystemDocument.gs +0 -12
  46. routers/googleappsscript34/appsscript.json +0 -17
  47. routers/googleappsscript34/prompt +0 -10
  48. routers/googleappsscript34/prompt.txt +0 -5
  49. routers/googleappsscript34/run.sh +0 -8
  50. routers/postg/{gradio_app.py → DataBase.py} +77 -77
mysite/gradio/gradio_config.py CHANGED
@@ -6,9 +6,11 @@ import mysite.interpreter.interpreter_config # インポートするだけで
6
  import importlib
7
  import os
8
  import pkgutil
9
- from routers.chat.chat import demo44 as demo4
10
  #
11
- from routers.postg.gradio_app import crud_interface
 
 
12
 
13
  def include_gradio_interfaces():
14
  package_dir = "/home/user/app/routers"
@@ -51,8 +53,8 @@ def setup_gradio_interfaces():
51
  outputs="text",
52
  )
53
 
54
- default_interfaces = [demo4,democs,crud_interface()]#,demo]
55
- default_names = ["OpenInterpreter","仕様書から作成","Database",]#"demo"]
56
 
57
  gradio_interfaces, gradio_names = include_gradio_interfaces()
58
 
 
6
  import importlib
7
  import os
8
  import pkgutil
9
+ #from routers.chat.chat import demo44 as demo4
10
  #
11
+ #from routers.postg.gradio_app import crud_interface
12
+ #from routers.chats.chats import gradio_interface
13
+
14
 
15
  def include_gradio_interfaces():
16
  package_dir = "/home/user/app/routers"
 
53
  outputs="text",
54
  )
55
 
56
+ default_interfaces = [democs]#,demo]
57
+ default_names = ["仕様書から作成"]#"demo"]
58
 
59
  gradio_interfaces, gradio_names = include_gradio_interfaces()
60
 
routers/bunnkatu/.gpteng/memory/logs/all_output.txt DELETED
@@ -1,2079 +0,0 @@
1
-
2
- 2024-06-07T16:57:32.137701
3
- ================================ System Message ================================
4
-
5
- You will get instructions for code to write.
6
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
7
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
8
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
9
-
10
- You will output the content of each file necessary to achieve the goal, including ALL code.
11
- Represent files like so:
12
-
13
- FILENAME
14
- ```
15
- CODE
16
- ```
17
-
18
- The following tokens must be replaced like so:
19
- FILENAME is the lowercase combined path and file name including the file extension
20
- CODE is the code in the file
21
-
22
- Example representation of a file:
23
-
24
- src/hello_world.py
25
- ```
26
- print("Hello World")
27
- ```
28
-
29
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
30
-
31
-
32
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
33
- Please note that the code should be fully functional. No placeholders.
34
-
35
- Follow a language and framework appropriate best practice file naming convention.
36
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
37
- Ensure to implement all code, if you are unsure, write a plausible implementation.
38
- Include module dependency or package manager dependency definition file.
39
- Before you finish, double check that all parts of the architecture is present in the files.
40
-
41
- When you are done, write finish with "this concludes a fully working implementation".
42
-
43
- Useful to know:
44
- Almost always put different classes in different files.
45
- Always use the programming language the user asks for.
46
- For Python, you always create an appropriate requirements.txt file.
47
- For NodeJS, you always create an appropriate package.json file.
48
- Always add a comment briefly describing the purpose of the function definition.
49
- Add comments explaining very complex bits of logic.
50
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
51
-
52
-
53
- Python toolbelt preferences:
54
- - pytest
55
- - dataclasses
56
-
57
-
58
- ================================ Human Message =================================
59
-
60
- Request: これファイル分割してimport os
61
- import shutil
62
- import hmac
63
- import hashlib
64
- import base64
65
- import subprocess
66
- import time
67
- from mysite.logger import logger
68
-
69
-
70
-
71
-
72
- def validate_signature(body: str, signature: str, secret: str) -> bool:
73
- if secret is None:
74
- logger.error("Secret is None")
75
- return False
76
-
77
- hash = hmac.new(
78
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
79
- ).digest()
80
- expected_signature = base64.b64encode(hash).decode("utf-8")
81
- return hmac.compare_digest(expected_signature, signature)
82
-
83
- def no_process_file(prompt, foldername):
84
- set_environment_variables()
85
- try:
86
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
87
- except subprocess.CalledProcessError as e:
88
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
89
-
90
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
91
- time.sleep(1)
92
- with open(no_extension_path, "a") as f:
93
- f.write(prompt)
94
- time.sleep(1)
95
- try:
96
- prompt_file_path = no_extension_path
97
- with open(prompt_file_path, "w") as prompt_file:
98
- prompt_file.write(prompt)
99
- except Exception as e:
100
- return f"Error writing prompt to file: {str(e)}"
101
- time.sleep(1)
102
- try:
103
- proc = subprocess.Popen(
104
- ["make", "run", foldername],
105
- stdin=subprocess.PIPE,
106
- stdout=subprocess.PIPE,
107
- stderr=subprocess.PIPE,
108
- text=True,
109
- )
110
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
111
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
112
- except subprocess.CalledProcessError as e:
113
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
114
-
115
- def set_environment_variables():
116
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
117
- os.environ["OPENAI_API_KEY"] = "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"
118
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
119
- os.environ["LOCAL_MODEL"] = "true"
120
-
121
- # Set the environment variable.
122
- def chat_with_interpreter(
123
- message, history, a=None, b=None, c=None, d=None
124
- ): # , openai_api_key):
125
- # Set the API key for the interpreter
126
- # interpreter.llm.api_key = openai_api_key
127
- if message == "reset":
128
- interpreter.reset()
129
- return "Interpreter reset", history
130
- full_response = ""
131
- # add_conversation(history,20)
132
- user_entry = {"role": "user", "type": "message", "content": message}
133
- #messages.append(user_entry)
134
- # Call interpreter.chat and capture the result
135
-
136
- for chunk in interpreter.chat(message, display=False, stream=True):
137
- # print(chunk)
138
- # output = '\n'.join(item['content'] for item in result if 'content' in item)
139
- full_response = format_response(chunk, full_response)
140
- yield full_response # chunk.get("content", "")
141
-
142
- # Extract the 'content' field from all elements in the result
143
- def insert(full_response,message):
144
- age = 28
145
- # データベースファイルのパス
146
- db_path = "./workspace/sample.duckdb"
147
-
148
- # DuckDBに接続(データベースファイルが存在しない場合は新規作成)
149
- con = duckdb.connect(database=db_path)
150
- con.execute(
151
- """
152
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
153
- CREATE TABLE IF NOT EXISTS samples (
154
- id INTEGER DEFAULT nextval('sample_id_seq'),
155
- name VARCHAR,
156
- age INTEGER,
157
- PRIMARY KEY(id)
158
- );
159
- """
160
- )
161
- cur = con.cursor()
162
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
163
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
164
- # データをCSVファイルにエクスポート
165
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
166
- # データをコミット
167
- con.commit()
168
- # データを選択
169
- cur = con.execute("SELECT * FROM samples")
170
- # 結果をフェッチ
171
- res = cur.fetchall()
172
- rows = ""
173
- # 結果を表示
174
- # 結果を文字列に整形
175
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
176
- # コネクションを閉じる
177
- con.close()
178
- # print(cur.fetchall())
179
- insert(full_response,message)
180
- yield full_response + rows # , history
181
- return full_response, history
182
-
183
- async def completion(message: str, history, c=None, d=None):
184
- from groq import Groq
185
- client = Groq(api_key=os.getenv("api_key"))
186
- messages = []
187
- recent_messages = history[-20:]
188
- for conversation in recent_messages:
189
- user_message = conversation[0]
190
- user_entry = {"role": "user", "content": user_message}
191
- messages.append(user_entry)
192
- assistant_message = conversation[1]
193
- assistant_entry = {"role": "assistant", "content": assistant_message}
194
- messages.append(assistant_entry)
195
-
196
- user_entry = {"role": "user", "content": message}
197
- messages.append(user_entry)
198
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
199
- messages.insert(0, system_prompt)
200
- async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
201
- try:
202
- stream = client.chat.completions.create(
203
- model="llama3-8b-8192",
204
- messages=messages,
205
- temperature=1,
206
- max_tokens=1024,
207
- top_p=1,
208
- stream=True,
209
- stop=None,
210
- )
211
- all_result = ""
212
- for chunk in stream:
213
- current_content = chunk.choices[0].delta.content or ""
214
- all_result += current_content
215
- yield current_content
216
- yield all_result
217
- except asyncio.TimeoutError:
218
- raise HTTPException(status_code=504, detail="Stream timed out")
219
-
220
- def process_file(fileobj, prompt, foldername):
221
- set_environment_variables()
222
- try:
223
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
224
- except subprocess.CalledProcessError as e:
225
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
226
- time.sleep(2)
227
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
228
- shutil.copyfile(fileobj.name, path)
229
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
230
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
231
- shutil.copyfile(fileobj, no_extension_path)
232
- with open(no_extension_path, "a") as f:
233
- f.write(prompt)
234
- try:
235
- prompt_file_path = no_extension_path
236
- with open(prompt_file_path, "w") as prompt_file:
237
- prompt_file.write(prompt)
238
- except Exception as e:
239
- return f"Error writing prompt to file: {str(e)}"
240
- time.sleep(1)
241
- try:
242
- proc = subprocess.Popen(
243
- ["make", "run", foldername],
244
- stdin=subprocess.PIPE,
245
- stdout=subprocess.PIPE,
246
- stderr=subprocess.PIPE,
247
- text=True,
248
- )
249
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
250
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
251
- except subprocess.CalledProcessError as e:
252
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
253
-
254
-
255
-
256
- ================================== Ai Message ==================================
257
-
258
- Here is the refactored code, split into multiple files and modules:
259
-
260
- **mysite/logger.py**
261
- ```
262
- import logging
263
-
264
- logger = logging.getLogger(__name__)
265
- ```
266
-
267
- **mysite/utils.py**
268
- ```
269
- import os
270
- import shutil
271
- import hmac
272
- import hashlib
273
- import base64
274
- import subprocess
275
- import time
276
-
277
- def validate_signature(body: str, signature: str, secret: str) -> bool:
278
- # ...
279
-
280
- def set_environment_variables():
281
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
282
- os.environ["OPENAI_API_KEY"] = "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"
283
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
284
- os.environ["LOCAL_MODEL"] = "true"
285
- ```
286
-
287
- **mysite/interpreter.py**
288
- ```
289
- from mysite.utils import set_environment_variables
290
-
291
- class Interpreter:
292
- def __init__(self):
293
- set_environment_variables()
294
-
295
- def chat(self, message, display=False, stream=True):
296
- # ...
297
-
298
- def reset(self):
299
- # ...
300
- ```
301
-
302
- **mysite/completion.py**
303
- ```
304
- import asyncio
305
- from mysite.utils import set_environment_variables
306
- from groq import Groq
307
-
308
- async def completion(message: str, history, c=None, d=None):
309
- client = Groq(api_key=os.getenv("api_key"))
310
- # ...
311
- ```
312
-
313
- **mysite/process_file.py**
314
- ```
315
- import os
316
- import shutil
317
- import subprocess
318
- from mysite.utils import set_environment_variables
319
-
320
- def process_file(fileobj, prompt, foldername):
321
- set_environment_variables()
322
- # ...
323
- ```
324
-
325
- **mysite/no_process_file.py**
326
- ```
327
- import os
328
- import shutil
329
- import subprocess
330
- from mysite.utils import set_environment_variables
331
-
332
- def no_process_file(prompt, foldername):
333
- set_environment_variables()
334
- # ...
335
- ```
336
-
337
- **mysite/chat_with_interpreter.py**
338
- ```
339
- from mysite.interpreter import Interpreter
340
- from mysite.utils import set_environment_variables
341
-
342
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
343
- set_environment_variables()
344
- # ...
345
- ```
346
-
347
- **requirements.txt**
348
- ```
349
- groq
350
- duckdb
351
- ```
352
-
353
- This concludes a fully working implementation.
354
-
355
- 2024-06-07T16:57:51.899233
356
- ================================ System Message ================================
357
-
358
- You will get instructions for code to write.
359
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
360
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
361
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
362
-
363
- You will output the content of each file necessary to achieve the goal, including ALL code.
364
- Represent files like so:
365
-
366
- FILENAME
367
- ```
368
- CODE
369
- ```
370
-
371
- The following tokens must be replaced like so:
372
- FILENAME is the lowercase combined path and file name including the file extension
373
- CODE is the code in the file
374
-
375
- Example representation of a file:
376
-
377
- src/hello_world.py
378
- ```
379
- print("Hello World")
380
- ```
381
-
382
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
383
-
384
-
385
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
386
- Please note that the code should be fully functional. No placeholders.
387
-
388
- Follow a language and framework appropriate best practice file naming convention.
389
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
390
- Ensure to implement all code, if you are unsure, write a plausible implementation.
391
- Include module dependency or package manager dependency definition file.
392
- Before you finish, double check that all parts of the architecture is present in the files.
393
-
394
- When you are done, write finish with "this concludes a fully working implementation".
395
-
396
- Useful to know:
397
- Almost always put different classes in different files.
398
- Always use the programming language the user asks for.
399
- For Python, you always create an appropriate requirements.txt file.
400
- For NodeJS, you always create an appropriate package.json file.
401
- Always add a comment briefly describing the purpose of the function definition.
402
- Add comments explaining very complex bits of logic.
403
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
404
-
405
-
406
- Python toolbelt preferences:
407
- - pytest
408
- - dataclasses
409
-
410
-
411
- ================================ Human Message =================================
412
-
413
- Request: これファイル分割してimport os
414
- import shutil
415
- import hmac
416
- import hashlib
417
- import base64
418
- import subprocess
419
- import time
420
- from mysite.logger import logger
421
-
422
-
423
-
424
-
425
- def validate_signature(body: str, signature: str, secret: str) -> bool:
426
- if secret is None:
427
- logger.error("Secret is None")
428
- return False
429
-
430
- hash = hmac.new(
431
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
432
- ).digest()
433
- expected_signature = base64.b64encode(hash).decode("utf-8")
434
- return hmac.compare_digest(expected_signature, signature)
435
-
436
- def no_process_file(prompt, foldername):
437
- set_environment_variables()
438
- try:
439
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
440
- except subprocess.CalledProcessError as e:
441
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
442
-
443
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
444
- time.sleep(1)
445
- with open(no_extension_path, "a") as f:
446
- f.write(prompt)
447
- time.sleep(1)
448
- try:
449
- prompt_file_path = no_extension_path
450
- with open(prompt_file_path, "w") as prompt_file:
451
- prompt_file.write(prompt)
452
- except Exception as e:
453
- return f"Error writing prompt to file: {str(e)}"
454
- time.sleep(1)
455
- try:
456
- proc = subprocess.Popen(
457
- ["make", "run", foldername],
458
- stdin=subprocess.PIPE,
459
- stdout=subprocess.PIPE,
460
- stderr=subprocess.PIPE,
461
- text=True,
462
- )
463
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
464
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
465
- except subprocess.CalledProcessError as e:
466
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
467
-
468
- def set_environment_variables():
469
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
470
- os.environ["OPENAI_API_KEY"] = "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"
471
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
472
- os.environ["LOCAL_MODEL"] = "true"
473
-
474
- # Set the environment variable.
475
- def chat_with_interpreter(
476
- message, history, a=None, b=None, c=None, d=None
477
- ): # , openai_api_key):
478
- # Set the API key for the interpreter
479
- # interpreter.llm.api_key = openai_api_key
480
- if message == "reset":
481
- interpreter.reset()
482
- return "Interpreter reset", history
483
- full_response = ""
484
- # add_conversation(history,20)
485
- user_entry = {"role": "user", "type": "message", "content": message}
486
- #messages.append(user_entry)
487
- # Call interpreter.chat and capture the result
488
-
489
- for chunk in interpreter.chat(message, display=False, stream=True):
490
- # print(chunk)
491
- # output = '\n'.join(item['content'] for item in result if 'content' in item)
492
- full_response = format_response(chunk, full_response)
493
- yield full_response # chunk.get("content", "")
494
-
495
- # Extract the 'content' field from all elements in the result
496
- def insert(full_response,message):
497
- age = 28
498
- # データベースファイルのパス
499
- db_path = "./workspace/sample.duckdb"
500
-
501
- # DuckDBに接続(データベースファイルが存在しない場合は新規作成)
502
- con = duckdb.connect(database=db_path)
503
- con.execute(
504
- """
505
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
506
- CREATE TABLE IF NOT EXISTS samples (
507
- id INTEGER DEFAULT nextval('sample_id_seq'),
508
- name VARCHAR,
509
- age INTEGER,
510
- PRIMARY KEY(id)
511
- );
512
- """
513
- )
514
- cur = con.cursor()
515
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
516
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
517
- # データをCSVファイルにエクスポート
518
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
519
- # データをコミット
520
- con.commit()
521
- # データを選択
522
- cur = con.execute("SELECT * FROM samples")
523
- # 結果をフェッチ
524
- res = cur.fetchall()
525
- rows = ""
526
- # 結果を表示
527
- # 結果を文字列に整形
528
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
529
- # コネクションを閉じる
530
- con.close()
531
- # print(cur.fetchall())
532
- insert(full_response,message)
533
- yield full_response + rows # , history
534
- return full_response, history
535
-
536
- async def completion(message: str, history, c=None, d=None):
537
- from groq import Groq
538
- client = Groq(api_key=os.getenv("api_key"))
539
- messages = []
540
- recent_messages = history[-20:]
541
- for conversation in recent_messages:
542
- user_message = conversation[0]
543
- user_entry = {"role": "user", "content": user_message}
544
- messages.append(user_entry)
545
- assistant_message = conversation[1]
546
- assistant_entry = {"role": "assistant", "content": assistant_message}
547
- messages.append(assistant_entry)
548
-
549
- user_entry = {"role": "user", "content": message}
550
- messages.append(user_entry)
551
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
552
- messages.insert(0, system_prompt)
553
- async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
554
- try:
555
- stream = client.chat.completions.create(
556
- model="llama3-8b-8192",
557
- messages=messages,
558
- temperature=1,
559
- max_tokens=1024,
560
- top_p=1,
561
- stream=True,
562
- stop=None,
563
- )
564
- all_result = ""
565
- for chunk in stream:
566
- current_content = chunk.choices[0].delta.content or ""
567
- all_result += current_content
568
- yield current_content
569
- yield all_result
570
- except asyncio.TimeoutError:
571
- raise HTTPException(status_code=504, detail="Stream timed out")
572
-
573
- def process_file(fileobj, prompt, foldername):
574
- set_environment_variables()
575
- try:
576
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
577
- except subprocess.CalledProcessError as e:
578
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
579
- time.sleep(2)
580
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
581
- shutil.copyfile(fileobj.name, path)
582
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
583
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
584
- shutil.copyfile(fileobj, no_extension_path)
585
- with open(no_extension_path, "a") as f:
586
- f.write(prompt)
587
- try:
588
- prompt_file_path = no_extension_path
589
- with open(prompt_file_path, "w") as prompt_file:
590
- prompt_file.write(prompt)
591
- except Exception as e:
592
- return f"Error writing prompt to file: {str(e)}"
593
- time.sleep(1)
594
- try:
595
- proc = subprocess.Popen(
596
- ["make", "run", foldername],
597
- stdin=subprocess.PIPE,
598
- stdout=subprocess.PIPE,
599
- stderr=subprocess.PIPE,
600
- text=True,
601
- )
602
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
603
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
604
- except subprocess.CalledProcessError as e:
605
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
606
-
607
-
608
-
609
- ================================== Ai Message ==================================
610
-
611
- Here is the refactored code, split into multiple files and modules:
612
-
613
- **mysite/logger.py**
614
- ```
615
- import logging
616
-
617
- logger = logging.getLogger(__name__)
618
- ```
619
-
620
- **mysite/utils.py**
621
- ```
622
- import os
623
- import shutil
624
- import hmac
625
- import hashlib
626
- import base64
627
- import subprocess
628
- import time
629
-
630
- def validate_signature(body: str, signature: str, secret: str) -> bool:
631
- # ...
632
-
633
- def set_environment_variables():
634
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
635
- os.environ["OPENAI_API_KEY"] = "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"
636
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
637
- os.environ["LOCAL_MODEL"] = "true"
638
- ```
639
-
640
- **mysite/interpreter.py**
641
- ```
642
- from mysite.utils import set_environment_variables
643
-
644
- class Interpreter:
645
- def __init__(self):
646
- set_environment_variables()
647
-
648
- def chat(self, message, display=False, stream=True):
649
- # ...
650
-
651
- def reset(self):
652
- # ...
653
- ```
654
-
655
- **mysite/completion.py**
656
- ```
657
- import asyncio
658
- from groq import Groq
659
- from mysite.utils import set_environment_variables
660
-
661
- async def completion(message: str, history, c=None, d=None):
662
- client = Groq(api_key=os.getenv("api_key"))
663
- # ...
664
- ```
665
-
666
- **mysite/process_file.py**
667
- ```
668
- import os
669
- import shutil
670
- import subprocess
671
- from mysite.utils import set_environment_variables
672
-
673
- def process_file(fileobj, prompt, foldername):
674
- set_environment_variables()
675
- # ...
676
- ```
677
-
678
- **mysite/no_process_file.py**
679
- ```
680
- import os
681
- import shutil
682
- import subprocess
683
- from mysite.utils import set_environment_variables
684
-
685
- def no_process_file(prompt, foldername):
686
- set_environment_variables()
687
- # ...
688
- ```
689
-
690
- **mysite/chat_with_interpreter.py**
691
- ```
692
- from mysite.interpreter import Interpreter
693
- from mysite.utils import set_environment_variables
694
-
695
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
696
- set_environment_variables()
697
- # ...
698
- ```
699
-
700
- **requirements.txt**
701
- ```
702
- groq
703
- duckdb
704
- ```
705
-
706
- This concludes a fully working implementation.
707
-
708
- 2024-06-07T16:59:01.192261
709
- ================================ System Message ================================
710
-
711
- You will get instructions for code to write.
712
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
713
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
714
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
715
-
716
- You will output the content of each file necessary to achieve the goal, including ALL code.
717
- Represent files like so:
718
-
719
- FILENAME
720
- ```
721
- CODE
722
- ```
723
-
724
- The following tokens must be replaced like so:
725
- FILENAME is the lowercase combined path and file name including the file extension
726
- CODE is the code in the file
727
-
728
- Example representation of a file:
729
-
730
- src/hello_world.py
731
- ```
732
- print("Hello World")
733
- ```
734
-
735
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
736
-
737
-
738
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
739
- Please note that the code should be fully functional. No placeholders.
740
-
741
- Follow a language and framework appropriate best practice file naming convention.
742
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
743
- Ensure to implement all code, if you are unsure, write a plausible implementation.
744
- Include module dependency or package manager dependency definition file.
745
- Before you finish, double check that all parts of the architecture is present in the files.
746
-
747
- When you are done, write finish with "this concludes a fully working implementation".
748
-
749
- Useful to know:
750
- Almost always put different classes in different files.
751
- Always use the programming language the user asks for.
752
- For Python, you always create an appropriate requirements.txt file.
753
- For NodeJS, you always create an appropriate package.json file.
754
- Always add a comment briefly describing the purpose of the function definition.
755
- Add comments explaining very complex bits of logic.
756
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
757
-
758
-
759
- Python toolbelt preferences:
760
- - pytest
761
- - dataclasses
762
-
763
-
764
- ================================ Human Message =================================
765
-
766
- Request: これファイル分割してimport os
767
- import shutil
768
- import hmac
769
- import hashlib
770
- import base64
771
- import subprocess
772
- import time
773
- from mysite.logger import logger
774
-
775
-
776
-
777
-
778
- def validate_signature(body: str, signature: str, secret: str) -> bool:
779
- if secret is None:
780
- logger.error("Secret is None")
781
- return False
782
-
783
- hash = hmac.new(
784
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
785
- ).digest()
786
- expected_signature = base64.b64encode(hash).decode("utf-8")
787
- return hmac.compare_digest(expected_signature, signature)
788
-
789
- def no_process_file(prompt, foldername):
790
- set_environment_variables()
791
- try:
792
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
793
- except subprocess.CalledProcessError as e:
794
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
795
-
796
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
797
- time.sleep(1)
798
- with open(no_extension_path, "a") as f:
799
- f.write(prompt)
800
- time.sleep(1)
801
- try:
802
- prompt_file_path = no_extension_path
803
- with open(prompt_file_path, "w") as prompt_file:
804
- prompt_file.write(prompt)
805
- except Exception as e:
806
- return f"Error writing prompt to file: {str(e)}"
807
- time.sleep(1)
808
- try:
809
- proc = subprocess.Popen(
810
- ["make", "run", foldername],
811
- stdin=subprocess.PIPE,
812
- stdout=subprocess.PIPE,
813
- stderr=subprocess.PIPE,
814
- text=True,
815
- )
816
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
817
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
818
- except subprocess.CalledProcessError as e:
819
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
820
-
821
- def set_environment_variables():
822
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
823
- os.environ["OPENAI_API_KEY"] = "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"
824
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
825
- os.environ["LOCAL_MODEL"] = "true"
826
-
827
- # Set the environment variable.
828
- def chat_with_interpreter(
829
- message, history, a=None, b=None, c=None, d=None
830
- ): # , openai_api_key):
831
- # Set the API key for the interpreter
832
- # interpreter.llm.api_key = openai_api_key
833
- if message == "reset":
834
- interpreter.reset()
835
- return "Interpreter reset", history
836
- full_response = ""
837
- # add_conversation(history,20)
838
- user_entry = {"role": "user", "type": "message", "content": message}
839
- #messages.append(user_entry)
840
- # Call interpreter.chat and capture the result
841
-
842
- for chunk in interpreter.chat(message, display=False, stream=True):
843
- # print(chunk)
844
- # output = '\n'.join(item['content'] for item in result if 'content' in item)
845
- full_response = format_response(chunk, full_response)
846
- yield full_response # chunk.get("content", "")
847
-
848
- # Extract the 'content' field from all elements in the result
849
- def insert(full_response,message):
850
- age = 28
851
- # データベースファイルのパス
852
- db_path = "./workspace/sample.duckdb"
853
-
854
- # DuckDBに接続(データベースファイルが存在しない場合は新規作成)
855
- con = duckdb.connect(database=db_path)
856
- con.execute(
857
- """
858
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
859
- CREATE TABLE IF NOT EXISTS samples (
860
- id INTEGER DEFAULT nextval('sample_id_seq'),
861
- name VARCHAR,
862
- age INTEGER,
863
- PRIMARY KEY(id)
864
- );
865
- """
866
- )
867
- cur = con.cursor()
868
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
869
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
870
- # データをCSVファイルにエクスポート
871
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
872
- # データをコミット
873
- con.commit()
874
- # データを選択
875
- cur = con.execute("SELECT * FROM samples")
876
- # 結果をフェッチ
877
- res = cur.fetchall()
878
- rows = ""
879
- # 結果を表示
880
- # 結果を文字列に整形
881
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
882
- # コネクションを閉じる
883
- con.close()
884
- # print(cur.fetchall())
885
- insert(full_response,message)
886
- yield full_response + rows # , history
887
- return full_response, history
888
-
889
- async def completion(message: str, history, c=None, d=None):
890
- from groq import Groq
891
- client = Groq(api_key=os.getenv("api_key"))
892
- messages = []
893
- recent_messages = history[-20:]
894
- for conversation in recent_messages:
895
- user_message = conversation[0]
896
- user_entry = {"role": "user", "content": user_message}
897
- messages.append(user_entry)
898
- assistant_message = conversation[1]
899
- assistant_entry = {"role": "assistant", "content": assistant_message}
900
- messages.append(assistant_entry)
901
-
902
- user_entry = {"role": "user", "content": message}
903
- messages.append(user_entry)
904
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
905
- messages.insert(0, system_prompt)
906
- async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
907
- try:
908
- stream = client.chat.completions.create(
909
- model="llama3-8b-8192",
910
- messages=messages,
911
- temperature=1,
912
- max_tokens=1024,
913
- top_p=1,
914
- stream=True,
915
- stop=None,
916
- )
917
- all_result = ""
918
- for chunk in stream:
919
- current_content = chunk.choices[0].delta.content or ""
920
- all_result += current_content
921
- yield current_content
922
- yield all_result
923
- except asyncio.TimeoutError:
924
- raise HTTPException(status_code=504, detail="Stream timed out")
925
-
926
- def process_file(fileobj, prompt, foldername):
927
- set_environment_variables()
928
- try:
929
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
930
- except subprocess.CalledProcessError as e:
931
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
932
- time.sleep(2)
933
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
934
- shutil.copyfile(fileobj.name, path)
935
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
936
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
937
- shutil.copyfile(fileobj, no_extension_path)
938
- with open(no_extension_path, "a") as f:
939
- f.write(prompt)
940
- try:
941
- prompt_file_path = no_extension_path
942
- with open(prompt_file_path, "w") as prompt_file:
943
- prompt_file.write(prompt)
944
- except Exception as e:
945
- return f"Error writing prompt to file: {str(e)}"
946
- time.sleep(1)
947
- try:
948
- proc = subprocess.Popen(
949
- ["make", "run", foldername],
950
- stdin=subprocess.PIPE,
951
- stdout=subprocess.PIPE,
952
- stderr=subprocess.PIPE,
953
- text=True,
954
- )
955
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
956
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
957
- except subprocess.CalledProcessError as e:
958
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
959
-
960
-
961
-
962
- ================================== Ai Message ==================================
963
-
964
- Here is the refactored code, split into multiple files and modules:
965
-
966
- **mysite/logger.py**
967
- ```
968
- import logging
969
-
970
- logger = logging.getLogger(__name__)
971
- logger.setLevel(logging.ERROR)
972
-
973
- handler = logging.StreamHandler()
974
- handler.setLevel(logging.ERROR)
975
-
976
- logger.addHandler(handler)
977
- ```
978
-
979
- **mysite/validator.py**
980
- ```
981
- import hmac
982
- import hashlib
983
- import base64
984
-
985
- def validate_signature(body: str, signature: str, secret: str) -> bool:
986
- if secret is None:
987
- logger.error("Secret is None")
988
- return False
989
-
990
- hash = hmac.new(
991
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
992
- ).digest()
993
- expected_signature = base64.b64encode(hash).decode("utf-8")
994
- return hmac.compare_digest(expected_signature, signature)
995
- ```
996
-
997
- **mysite/environment.py**
998
- ```
999
- import os
1000
-
1001
- def set_environment_variables():
1002
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
1003
- os.environ["OPENAI_API_KEY"] = "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"
1004
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
1005
- os.environ["LOCAL_MODEL"] = "true"
1006
- ```
1007
-
1008
- **mysite/interpreter.py**
1009
- ```
1010
- import asyncio
1011
- from groq import Groq
1012
-
1013
- async def completion(message: str, history, c=None, d=None):
1014
- client = Groq(api_key=os.getenv("api_key"))
1015
- messages = []
1016
- recent_messages = history[-20:]
1017
- for conversation in recent_messages:
1018
- user_message = conversation[0]
1019
- user_entry = {"role": "user", "content": user_message}
1020
- messages.append(user_entry)
1021
- assistant_message = conversation[1]
1022
- assistant_entry = {"role": "assistant", "content": assistant_message}
1023
- messages.append(assistant_entry)
1024
-
1025
- user_entry = {"role": "user", "content": message}
1026
- messages.append(user_entry)
1027
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
1028
- messages.insert(0, system_prompt)
1029
- async with asyncio.timeout(30):
1030
- try:
1031
- stream = client.chat.completions.create(
1032
- model="llama3-8b-8192",
1033
- messages=messages,
1034
- temperature=1,
1035
- max_tokens=1024,
1036
- top_p=1,
1037
- stream=True,
1038
- stop=None,
1039
- )
1040
- all_result = ""
1041
- for chunk in stream:
1042
- current_content = chunk.choices[0].delta.content or ""
1043
- all_result += current_content
1044
- yield current_content
1045
- yield all_result
1046
- except asyncio.TimeoutError:
1047
- raise HTTPException(status_code=504, detail="Stream timed out")
1048
- ```
1049
-
1050
- **mysite/file_processor.py**
1051
- ```
1052
- import os
1053
- import shutil
1054
- import subprocess
1055
- import time
1056
-
1057
- def no_process_file(prompt, foldername):
1058
- set_environment_variables()
1059
- try:
1060
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1061
- except subprocess.CalledProcessError as e:
1062
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1063
-
1064
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
1065
- time.sleep(1)
1066
- with open(no_extension_path, "a") as f:
1067
- f.write(prompt)
1068
- time.sleep(1)
1069
- try:
1070
- prompt_file_path = no_extension_path
1071
- with open(prompt_file_path, "w") as prompt_file:
1072
- prompt_file.write(prompt)
1073
- except Exception as e:
1074
- return f"Error writing prompt to file: {str(e)}"
1075
- time.sleep(1)
1076
- try:
1077
- proc = subprocess.Popen(
1078
- ["make", "run", foldername],
1079
- stdin=subprocess.PIPE,
1080
- stdout=subprocess.PIPE,
1081
- stderr=subprocess.PIPE,
1082
- text=True,
1083
- )
1084
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1085
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1086
- except subprocess.CalledProcessError as e:
1087
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1088
-
1089
- def process_file(fileobj, prompt, foldername):
1090
- set_environment_variables()
1091
- try:
1092
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1093
- except subprocess.CalledProcessError as e:
1094
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1095
- time.sleep(2)
1096
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
1097
- shutil.copyfile(fileobj.name, path)
1098
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
1099
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
1100
- shutil.copyfile(fileobj, no_extension_path)
1101
- with open(no_extension_path, "a") as f:
1102
- f.write(prompt)
1103
- try:
1104
- prompt_file_path = no_extension_path
1105
- with open(prompt_file_path, "w") as prompt_file:
1106
- prompt_file.write(prompt)
1107
- except Exception as e:
1108
- return f"Error writing prompt to file: {str(e)}"
1109
- time.sleep(1)
1110
- try:
1111
- proc = subprocess.Popen(
1112
- ["make", "run", foldername],
1113
- stdin=subprocess.PIPE,
1114
- stdout=subprocess.PIPE,
1115
- stderr=subprocess.PIPE,
1116
- text=True,
1117
- )
1118
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1119
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1120
- except subprocess.CalledProcessError as e:
1121
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
1122
- ```
1123
-
1124
- **mysite/db.py**
1125
- ```
1126
- import duckdb
1127
-
1128
- def insert(full_response, message):
1129
- age = 28
1130
- db_path = "./workspace/sample.duckdb"
1131
- con = duckdb.connect(database=db_path)
1132
- con.execute(
1133
- """
1134
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
1135
- CREATE TABLE IF NOT EXISTS samples (
1136
- id INTEGER DEFAULT nextval('sample_id_seq'),
1137
- name VARCHAR,
1138
- age INTEGER,
1139
- PRIMARY KEY(id)
1140
- );
1141
- """
1142
- )
1143
- cur = con.cursor()
1144
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
1145
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
1146
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
1147
- con.commit()
1148
- cur = con.execute("SELECT * FROM samples")
1149
- res = cur.fetchall()
1150
- rows = ""
1151
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
1152
- con.close()
1153
- return rows
1154
- ```
1155
-
1156
- **requirements.txt**
1157
- ```
1158
- groq
1159
- duckdb
1160
- ```
1161
-
1162
- This concludes a fully working implementation.
1163
-
1164
- 2024-06-07T16:59:52.607068
1165
- ================================ System Message ================================
1166
-
1167
- You will get instructions for code to write.
1168
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
1169
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
1170
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
1171
-
1172
- You will output the content of each file necessary to achieve the goal, including ALL code.
1173
- Represent files like so:
1174
-
1175
- FILENAME
1176
- ```
1177
- CODE
1178
- ```
1179
-
1180
- The following tokens must be replaced like so:
1181
- FILENAME is the lowercase combined path and file name including the file extension
1182
- CODE is the code in the file
1183
-
1184
- Example representation of a file:
1185
-
1186
- src/hello_world.py
1187
- ```
1188
- print("Hello World")
1189
- ```
1190
-
1191
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
1192
-
1193
-
1194
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
1195
- Please note that the code should be fully functional. No placeholders.
1196
-
1197
- Follow a language and framework appropriate best practice file naming convention.
1198
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
1199
- Ensure to implement all code, if you are unsure, write a plausible implementation.
1200
- Include module dependency or package manager dependency definition file.
1201
- Before you finish, double check that all parts of the architecture is present in the files.
1202
-
1203
- When you are done, write finish with "this concludes a fully working implementation".
1204
-
1205
- Useful to know:
1206
- Almost always put different classes in different files.
1207
- Always use the programming language the user asks for.
1208
- For Python, you always create an appropriate requirements.txt file.
1209
- For NodeJS, you always create an appropriate package.json file.
1210
- Always add a comment briefly describing the purpose of the function definition.
1211
- Add comments explaining very complex bits of logic.
1212
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
1213
-
1214
-
1215
- Python toolbelt preferences:
1216
- - pytest
1217
- - dataclasses
1218
-
1219
-
1220
- ================================ Human Message =================================
1221
-
1222
- Request: これファイル分割して 関数ごとにテストケース作成import os
1223
- import shutil
1224
- import hmac
1225
- import hashlib
1226
- import base64
1227
- import subprocess
1228
- import time
1229
- from mysite.logger import logger
1230
-
1231
-
1232
-
1233
-
1234
- def validate_signature(body: str, signature: str, secret: str) -> bool:
1235
- if secret is None:
1236
- logger.error("Secret is None")
1237
- return False
1238
-
1239
- hash = hmac.new(
1240
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
1241
- ).digest()
1242
- expected_signature = base64.b64encode(hash).decode("utf-8")
1243
- return hmac.compare_digest(expected_signature, signature)
1244
-
1245
- def no_process_file(prompt, foldername):
1246
- set_environment_variables()
1247
- try:
1248
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1249
- except subprocess.CalledProcessError as e:
1250
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1251
-
1252
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
1253
- time.sleep(1)
1254
- with open(no_extension_path, "a") as f:
1255
- f.write(prompt)
1256
- time.sleep(1)
1257
- try:
1258
- prompt_file_path = no_extension_path
1259
- with open(prompt_file_path, "w") as prompt_file:
1260
- prompt_file.write(prompt)
1261
- except Exception as e:
1262
- return f"Error writing prompt to file: {str(e)}"
1263
- time.sleep(1)
1264
- try:
1265
- proc = subprocess.Popen(
1266
- ["make", "run", foldername],
1267
- stdin=subprocess.PIPE,
1268
- stdout=subprocess.PIPE,
1269
- stderr=subprocess.PIPE,
1270
- text=True,
1271
- )
1272
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1273
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1274
- except subprocess.CalledProcessError as e:
1275
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1276
-
1277
- def set_environment_variables():
1278
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
1279
- os.environ["OPENAI_API_KEY"] = "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"
1280
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
1281
- os.environ["LOCAL_MODEL"] = "true"
1282
-
1283
- # Set the environment variable.
1284
- def chat_with_interpreter(
1285
- message, history, a=None, b=None, c=None, d=None
1286
- ): # , openai_api_key):
1287
- # Set the API key for the interpreter
1288
- # interpreter.llm.api_key = openai_api_key
1289
- if message == "reset":
1290
- interpreter.reset()
1291
- return "Interpreter reset", history
1292
- full_response = ""
1293
- # add_conversation(history,20)
1294
- user_entry = {"role": "user", "type": "message", "content": message}
1295
- #messages.append(user_entry)
1296
- # Call interpreter.chat and capture the result
1297
-
1298
- for chunk in interpreter.chat(message, display=False, stream=True):
1299
- # print(chunk)
1300
- # output = '\n'.join(item['content'] for item in result if 'content' in item)
1301
- full_response = format_response(chunk, full_response)
1302
- yield full_response # chunk.get("content", "")
1303
-
1304
- # Extract the 'content' field from all elements in the result
1305
- def insert(full_response,message):
1306
- age = 28
1307
- # データベースファイルのパス
1308
- db_path = "./workspace/sample.duckdb"
1309
-
1310
- # DuckDBに接続(データベースファイルが存在しない場合は新規作成)
1311
- con = duckdb.connect(database=db_path)
1312
- con.execute(
1313
- """
1314
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
1315
- CREATE TABLE IF NOT EXISTS samples (
1316
- id INTEGER DEFAULT nextval('sample_id_seq'),
1317
- name VARCHAR,
1318
- age INTEGER,
1319
- PRIMARY KEY(id)
1320
- );
1321
- """
1322
- )
1323
- cur = con.cursor()
1324
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
1325
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
1326
- # データをCSVファイルにエクスポート
1327
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
1328
- # データをコミット
1329
- con.commit()
1330
- # データを選択
1331
- cur = con.execute("SELECT * FROM samples")
1332
- # 結果をフェッチ
1333
- res = cur.fetchall()
1334
- rows = ""
1335
- # 結果を表示
1336
- # 結果を文字列に整形
1337
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
1338
- # コネクションを閉じる
1339
- con.close()
1340
- # print(cur.fetchall())
1341
- insert(full_response,message)
1342
- yield full_response + rows # , history
1343
- return full_response, history
1344
-
1345
- async def completion(message: str, history, c=None, d=None):
1346
- from groq import Groq
1347
- client = Groq(api_key=os.getenv("api_key"))
1348
- messages = []
1349
- recent_messages = history[-20:]
1350
- for conversation in recent_messages:
1351
- user_message = conversation[0]
1352
- user_entry = {"role": "user", "content": user_message}
1353
- messages.append(user_entry)
1354
- assistant_message = conversation[1]
1355
- assistant_entry = {"role": "assistant", "content": assistant_message}
1356
- messages.append(assistant_entry)
1357
-
1358
- user_entry = {"role": "user", "content": message}
1359
- messages.append(user_entry)
1360
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
1361
- messages.insert(0, system_prompt)
1362
- async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
1363
- try:
1364
- stream = client.chat.completions.create(
1365
- model="llama3-8b-8192",
1366
- messages=messages,
1367
- temperature=1,
1368
- max_tokens=1024,
1369
- top_p=1,
1370
- stream=True,
1371
- stop=None,
1372
- )
1373
- all_result = ""
1374
- for chunk in stream:
1375
- current_content = chunk.choices[0].delta.content or ""
1376
- all_result += current_content
1377
- yield current_content
1378
- yield all_result
1379
- except asyncio.TimeoutError:
1380
- raise HTTPException(status_code=504, detail="Stream timed out")
1381
-
1382
- def process_file(fileobj, prompt, foldername):
1383
- set_environment_variables()
1384
- try:
1385
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1386
- except subprocess.CalledProcessError as e:
1387
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1388
- time.sleep(2)
1389
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
1390
- shutil.copyfile(fileobj.name, path)
1391
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
1392
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
1393
- shutil.copyfile(fileobj, no_extension_path)
1394
- with open(no_extension_path, "a") as f:
1395
- f.write(prompt)
1396
- try:
1397
- prompt_file_path = no_extension_path
1398
- with open(prompt_file_path, "w") as prompt_file:
1399
- prompt_file.write(prompt)
1400
- except Exception as e:
1401
- return f"Error writing prompt to file: {str(e)}"
1402
- time.sleep(1)
1403
- try:
1404
- proc = subprocess.Popen(
1405
- ["make", "run", foldername],
1406
- stdin=subprocess.PIPE,
1407
- stdout=subprocess.PIPE,
1408
- stderr=subprocess.PIPE,
1409
- text=True,
1410
- )
1411
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1412
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1413
- except subprocess.CalledProcessError as e:
1414
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
1415
-
1416
-
1417
-
1418
- ================================== Ai Message ==================================
1419
-
1420
- Here is the implementation of the code in Python, following best practices for file structure and packaging.
1421
-
1422
- **Folder Structure:**
1423
- ```
1424
- mysite/
1425
- logger.py
1426
- models/
1427
- __init__.py
1428
- interpreter.py
1429
- utils/
1430
- __init__.py
1431
- file_utils.py
1432
- process_utils.py
1433
- __init__.py
1434
- app.py
1435
- requirements.txt
1436
- ```
1437
-
1438
- **Files:**
1439
-
1440
- **logger.py**
1441
- ```
1442
- import logging
1443
-
1444
- logger = logging.getLogger(__name__)
1445
- logger.setLevel(logging.ERROR)
1446
-
1447
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
1448
-
1449
- file_handler = logging.FileHandler('log.txt')
1450
- file_handler.setFormatter(formatter)
1451
- logger.addHandler(file_handler)
1452
- ```
1453
-
1454
- **models/interpreter.py**
1455
- ```
1456
- class Interpreter:
1457
- def __init__(self):
1458
- self.llm = None
1459
-
1460
- def chat(self, message, display=False, stream=True):
1461
- # implementation of the chat function
1462
- pass
1463
-
1464
- def reset(self):
1465
- # implementation of the reset function
1466
- pass
1467
- ```
1468
-
1469
- **utils/file_utils.py**
1470
- ```
1471
- import os
1472
- import shutil
1473
-
1474
- def no_process_file(prompt, foldername):
1475
- # implementation of the no_process_file function
1476
- pass
1477
-
1478
- def process_file(fileobj, prompt, foldername):
1479
- # implementation of the process_file function
1480
- pass
1481
- ```
1482
-
1483
- **utils/process_utils.py**
1484
- ```
1485
- import hmac
1486
- import hashlib
1487
- import base64
1488
- import subprocess
1489
- import time
1490
-
1491
- def validate_signature(body: str, signature: str, secret: str) -> bool:
1492
- # implementation of the validate_signature function
1493
- pass
1494
-
1495
- def set_environment_variables():
1496
- # implementation of the set_environment_variables function
1497
- pass
1498
- ```
1499
-
1500
- **app.py**
1501
- ```
1502
- from mysite.logger import logger
1503
- from models.interpreter import Interpreter
1504
- from utils.file_utils import no_process_file, process_file
1505
- from utils.process_utils import validate_signature, set_environment_variables
1506
-
1507
- interpreter = Interpreter()
1508
-
1509
- async def completion(message: str, history, c=None, d=None):
1510
- # implementation of the completion function
1511
- pass
1512
-
1513
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
1514
- # implementation of the chat_with_interpreter function
1515
- pass
1516
- ```
1517
-
1518
- **requirements.txt**
1519
- ```
1520
- hmac
1521
- hashlib
1522
- base64
1523
- subprocess
1524
- time
1525
- duckdb
1526
- groq
1527
- async-timeout
1528
- ```
1529
-
1530
- This concludes a fully working implementation.
1531
-
1532
- 2024-06-07T17:00:42.037450
1533
- ================================ System Message ================================
1534
-
1535
- You will get instructions for code to write.
1536
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
1537
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
1538
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
1539
-
1540
- You will output the content of each file necessary to achieve the goal, including ALL code.
1541
- Represent files like so:
1542
-
1543
- FILENAME
1544
- ```
1545
- CODE
1546
- ```
1547
-
1548
- The following tokens must be replaced like so:
1549
- FILENAME is the lowercase combined path and file name including the file extension
1550
- CODE is the code in the file
1551
-
1552
- Example representation of a file:
1553
-
1554
- src/hello_world.py
1555
- ```
1556
- print("Hello World")
1557
- ```
1558
-
1559
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
1560
-
1561
-
1562
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
1563
- Please note that the code should be fully functional. No placeholders.
1564
-
1565
- Follow a language and framework appropriate best practice file naming convention.
1566
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
1567
- Ensure to implement all code, if you are unsure, write a plausible implementation.
1568
- Include module dependency or package manager dependency definition file.
1569
- Before you finish, double check that all parts of the architecture is present in the files.
1570
-
1571
- When you are done, write finish with "this concludes a fully working implementation".
1572
-
1573
- Useful to know:
1574
- Almost always put different classes in different files.
1575
- Always use the programming language the user asks for.
1576
- For Python, you always create an appropriate requirements.txt file.
1577
- For NodeJS, you always create an appropriate package.json file.
1578
- Always add a comment briefly describing the purpose of the function definition.
1579
- Add comments explaining very complex bits of logic.
1580
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
1581
-
1582
-
1583
- Python toolbelt preferences:
1584
- - pytest
1585
- - dataclasses
1586
-
1587
-
1588
- ================================ Human Message =================================
1589
-
1590
- Request: これファイル分割して 関数ごとにテストケース作成import os
1591
- import shutil
1592
- import hmac
1593
- import hashlib
1594
- import base64
1595
- import subprocess
1596
- import time
1597
- from mysite.logger import logger
1598
-
1599
-
1600
-
1601
-
1602
- def validate_signature(body: str, signature: str, secret: str) -> bool:
1603
- if secret is None:
1604
- logger.error("Secret is None")
1605
- return False
1606
-
1607
- hash = hmac.new(
1608
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
1609
- ).digest()
1610
- expected_signature = base64.b64encode(hash).decode("utf-8")
1611
- return hmac.compare_digest(expected_signature, signature)
1612
-
1613
- def no_process_file(prompt, foldername):
1614
- set_environment_variables()
1615
- try:
1616
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1617
- except subprocess.CalledProcessError as e:
1618
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1619
-
1620
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
1621
- time.sleep(1)
1622
- with open(no_extension_path, "a") as f:
1623
- f.write(prompt)
1624
- time.sleep(1)
1625
- try:
1626
- prompt_file_path = no_extension_path
1627
- with open(prompt_file_path, "w") as prompt_file:
1628
- prompt_file.write(prompt)
1629
- except Exception as e:
1630
- return f"Error writing prompt to file: {str(e)}"
1631
- time.sleep(1)
1632
- try:
1633
- proc = subprocess.Popen(
1634
- ["make", "run", foldername],
1635
- stdin=subprocess.PIPE,
1636
- stdout=subprocess.PIPE,
1637
- stderr=subprocess.PIPE,
1638
- text=True,
1639
- )
1640
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1641
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1642
- except subprocess.CalledProcessError as e:
1643
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1644
-
1645
- def set_environment_variables():
1646
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
1647
- os.environ["OPENAI_API_KEY"] = "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"
1648
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
1649
- os.environ["LOCAL_MODEL"] = "true"
1650
-
1651
- # Set the environment variable.
1652
- def chat_with_interpreter(
1653
- message, history, a=None, b=None, c=None, d=None
1654
- ): # , openai_api_key):
1655
- # Set the API key for the interpreter
1656
- # interpreter.llm.api_key = openai_api_key
1657
- if message == "reset":
1658
- interpreter.reset()
1659
- return "Interpreter reset", history
1660
- full_response = ""
1661
- # add_conversation(history,20)
1662
- user_entry = {"role": "user", "type": "message", "content": message}
1663
- #messages.append(user_entry)
1664
- # Call interpreter.chat and capture the result
1665
-
1666
- for chunk in interpreter.chat(message, display=False, stream=True):
1667
- # print(chunk)
1668
- # output = '\n'.join(item['content'] for item in result if 'content' in item)
1669
- full_response = format_response(chunk, full_response)
1670
- yield full_response # chunk.get("content", "")
1671
-
1672
- # Extract the 'content' field from all elements in the result
1673
- def insert(full_response,message):
1674
- age = 28
1675
- # データベースファイルのパス
1676
- db_path = "./workspace/sample.duckdb"
1677
-
1678
- # DuckDBに接続(データベースファイルが存在しない場合は新規作成)
1679
- con = duckdb.connect(database=db_path)
1680
- con.execute(
1681
- """
1682
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
1683
- CREATE TABLE IF NOT EXISTS samples (
1684
- id INTEGER DEFAULT nextval('sample_id_seq'),
1685
- name VARCHAR,
1686
- age INTEGER,
1687
- PRIMARY KEY(id)
1688
- );
1689
- """
1690
- )
1691
- cur = con.cursor()
1692
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
1693
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
1694
- # データをCSVファイルにエクスポート
1695
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
1696
- # データをコミット
1697
- con.commit()
1698
- # データを選択
1699
- cur = con.execute("SELECT * FROM samples")
1700
- # 結果をフェッチ
1701
- res = cur.fetchall()
1702
- rows = ""
1703
- # 結果を表示
1704
- # 結果を文字列に整形
1705
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
1706
- # コネクションを閉じる
1707
- con.close()
1708
- # print(cur.fetchall())
1709
- insert(full_response,message)
1710
- yield full_response + rows # , history
1711
- return full_response, history
1712
-
1713
- async def completion(message: str, history, c=None, d=None):
1714
- from groq import Groq
1715
- client = Groq(api_key=os.getenv("api_key"))
1716
- messages = []
1717
- recent_messages = history[-20:]
1718
- for conversation in recent_messages:
1719
- user_message = conversation[0]
1720
- user_entry = {"role": "user", "content": user_message}
1721
- messages.append(user_entry)
1722
- assistant_message = conversation[1]
1723
- assistant_entry = {"role": "assistant", "content": assistant_message}
1724
- messages.append(assistant_entry)
1725
-
1726
- user_entry = {"role": "user", "content": message}
1727
- messages.append(user_entry)
1728
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
1729
- messages.insert(0, system_prompt)
1730
- async with async_timeout.timeout(GENERATION_TIMEOUT_SEC):
1731
- try:
1732
- stream = client.chat.completions.create(
1733
- model="llama3-8b-8192",
1734
- messages=messages,
1735
- temperature=1,
1736
- max_tokens=1024,
1737
- top_p=1,
1738
- stream=True,
1739
- stop=None,
1740
- )
1741
- all_result = ""
1742
- for chunk in stream:
1743
- current_content = chunk.choices[0].delta.content or ""
1744
- all_result += current_content
1745
- yield current_content
1746
- yield all_result
1747
- except asyncio.TimeoutError:
1748
- raise HTTPException(status_code=504, detail="Stream timed out")
1749
-
1750
- def process_file(fileobj, prompt, foldername):
1751
- set_environment_variables()
1752
- try:
1753
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
1754
- except subprocess.CalledProcessError as e:
1755
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
1756
- time.sleep(2)
1757
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
1758
- shutil.copyfile(fileobj.name, path)
1759
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
1760
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
1761
- shutil.copyfile(fileobj, no_extension_path)
1762
- with open(no_extension_path, "a") as f:
1763
- f.write(prompt)
1764
- try:
1765
- prompt_file_path = no_extension_path
1766
- with open(prompt_file_path, "w") as prompt_file:
1767
- prompt_file.write(prompt)
1768
- except Exception as e:
1769
- return f"Error writing prompt to file: {str(e)}"
1770
- time.sleep(1)
1771
- try:
1772
- proc = subprocess.Popen(
1773
- ["make", "run", foldername],
1774
- stdin=subprocess.PIPE,
1775
- stdout=subprocess.PIPE,
1776
- stderr=subprocess.PIPE,
1777
- text=True,
1778
- )
1779
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
1780
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
1781
- except subprocess.CalledProcessError as e:
1782
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
1783
-
1784
-
1785
-
1786
- ================================== Ai Message ==================================
1787
-
1788
- Here is the implementation of the code in Python, following best practices for file structure and packaging.
1789
-
1790
- **Folder Structure:**
1791
- ```
1792
- mysite/
1793
- logger.py
1794
- models/
1795
- __init__.py
1796
- interpreter.py
1797
- utils/
1798
- __init__.py
1799
- file_utils.py
1800
- process_utils.py
1801
- __init__.py
1802
- app.py
1803
- requirements.txt
1804
- ```
1805
-
1806
- **Files:**
1807
-
1808
- **logger.py**
1809
- ```
1810
- import logging
1811
-
1812
- logger = logging.getLogger(__name__)
1813
- logger.setLevel(logging.ERROR)
1814
-
1815
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
1816
-
1817
- file_handler = logging.FileHandler('log.txt')
1818
- file_handler.setFormatter(formatter)
1819
- logger.addHandler(file_handler)
1820
- ```
1821
-
1822
- **models/interpreter.py**
1823
- ```
1824
- class Interpreter:
1825
- def __init__(self):
1826
- self.llm = None
1827
-
1828
- def reset(self):
1829
- self.llm = None
1830
-
1831
- def chat(self, message, display=False, stream=True):
1832
- # implementation of the chat function
1833
- pass
1834
- ```
1835
-
1836
- **utils/file_utils.py**
1837
- ```
1838
- import os
1839
- import shutil
1840
-
1841
- def no_process_file(prompt, foldername):
1842
- # implementation of no_process_file function
1843
- pass
1844
-
1845
- def process_file(fileobj, prompt, foldername):
1846
- # implementation of process_file function
1847
- pass
1848
- ```
1849
-
1850
- **utils/process_utils.py**
1851
- ```
1852
- import hmac
1853
- import hashlib
1854
- import base64
1855
-
1856
- def validate_signature(body: str, signature: str, secret: str) -> bool:
1857
- # implementation of validate_signature function
1858
- pass
1859
- ```
1860
-
1861
- **app.py**
1862
- ```
1863
- from mysite.logger import logger
1864
- from mysite.models.interpreter import Interpreter
1865
- from mysite.utils.file_utils import no_process_file, process_file
1866
- from mysite.utils.process_utils import validate_signature
1867
-
1868
- interpreter = Interpreter()
1869
-
1870
- def set_environment_variables():
1871
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
1872
- os.environ["OPENAI_API_KEY"] = "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"
1873
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
1874
- os.environ["LOCAL_MODEL"] = "true"
1875
-
1876
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
1877
- # implementation of chat_with_interpreter function
1878
- pass
1879
-
1880
- async def completion(message: str, history, c=None, d=None):
1881
- # implementation of completion function
1882
- pass
1883
- ```
1884
-
1885
- **requirements.txt**
1886
- ```
1887
- hmac
1888
- hashlib
1889
- base64
1890
- subprocess
1891
- duckdb
1892
- groq
1893
- async-timeout
1894
- ```
1895
-
1896
- This concludes a fully working implementation.
1897
-
1898
- 2024-06-07T17:21:18.518276
1899
- ================================ System Message ================================
1900
-
1901
- You will get instructions for code to write.
1902
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
1903
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
1904
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
1905
-
1906
- You will output the content of each file necessary to achieve the goal, including ALL code.
1907
- Represent files like so:
1908
-
1909
- FILENAME
1910
- ```
1911
- CODE
1912
- ```
1913
-
1914
- The following tokens must be replaced like so:
1915
- FILENAME is the lowercase combined path and file name including the file extension
1916
- CODE is the code in the file
1917
-
1918
- Example representation of a file:
1919
-
1920
- src/hello_world.py
1921
- ```
1922
- print("Hello World")
1923
- ```
1924
-
1925
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
1926
-
1927
-
1928
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
1929
- Please note that the code should be fully functional. No placeholders.
1930
-
1931
- Follow a language and framework appropriate best practice file naming convention.
1932
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
1933
- Ensure to implement all code, if you are unsure, write a plausible implementation.
1934
- Include module dependency or package manager dependency definition file.
1935
- Before you finish, double check that all parts of the architecture is present in the files.
1936
-
1937
- When you are done, write finish with "this concludes a fully working implementation".
1938
-
1939
- Useful to know:
1940
- Almost always put different classes in different files.
1941
- Always use the programming language the user asks for.
1942
- For Python, you always create an appropriate requirements.txt file.
1943
- For NodeJS, you always create an appropriate package.json file.
1944
- Always add a comment briefly describing the purpose of the function definition.
1945
- Add comments explaining very complex bits of logic.
1946
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
1947
-
1948
-
1949
- Python toolbelt preferences:
1950
- - pytest
1951
- - dataclasses
1952
-
1953
-
1954
- ================================ Human Message =================================
1955
-
1956
- Request: このサイトをクロールして
1957
- https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design
1958
-
1959
- ================================== Ai Message ==================================
1960
-
1961
- Here is a Python implementation to crawl the API list from the given GitHub page.
1962
-
1963
- **Folder Structure:**
1964
- ```
1965
- crawler
1966
- requirements.txt
1967
- src
1968
- __init__.py
1969
- crawler.py
1970
- api_repository.py
1971
- models
1972
- __init__.py
1973
- api.py
1974
- tests
1975
- __init__.py
1976
- test_crawler.py
1977
- test_api_repository.py
1978
- ```
1979
-
1980
- **requirements.txt**
1981
- ```
1982
- beautifulsoup4
1983
- requests
1984
- pytest
1985
- dataclasses
1986
- ```
1987
-
1988
- **src/__init__.py**
1989
- ```
1990
- # empty file
1991
- ```
1992
-
1993
- **src/crawler.py**
1994
- ```
1995
- import requests
1996
- from bs4 import BeautifulSoup
1997
- from models.api import API
1998
-
1999
- class Crawler:
2000
- def __init__(self, url):
2001
- self.url = url
2002
- self.soup = self.get_soup()
2003
-
2004
- def get_soup(self):
2005
- response = requests.get(self.url)
2006
- return BeautifulSoup(response.text, 'html.parser')
2007
-
2008
- def crawl(self):
2009
- api_list = []
2010
- api_table = self.soup.find('table', {'class': 'markdown-table'})
2011
- for row in api_table.find_all('tr')[1:]:
2012
- cols = row.find_all('td')
2013
- api = API(
2014
- name=cols[0].text.strip(),
2015
- description=cols[1].text.strip(),
2016
- category=cols[2].text.strip(),
2017
- link=cols[3].find('a')['href']
2018
- )
2019
- api_list.append(api)
2020
- return api_list
2021
- ```
2022
-
2023
- **src/models/__init__.py**
2024
- ```
2025
- # empty file
2026
- ```
2027
-
2028
- **src/models/api.py**
2029
- ```
2030
- from dataclasses import dataclass
2031
-
2032
- @dataclass
2033
- class API:
2034
- name: str
2035
- description: str
2036
- category: str
2037
- link: str
2038
- ```
2039
-
2040
- **src/api_repository.py**
2041
- ```
2042
- from crawler import Crawler
2043
-
2044
- class APIRepository:
2045
- def __init__(self, url):
2046
- self.crawler = Crawler(url)
2047
-
2048
- def get_apis(self):
2049
- return self.crawler.crawl()
2050
- ```
2051
-
2052
- **tests/__init__.py**
2053
- ```
2054
- # empty file
2055
- ```
2056
-
2057
- **tests/test_crawler.py**
2058
- ```
2059
- import pytest
2060
- from src.crawler import Crawler
2061
-
2062
- def test_crawler():
2063
- crawler = Crawler('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
2064
- apis = crawler.crawl()
2065
- assert len(apis) > 0
2066
- ```
2067
-
2068
- **tests/test_api_repository.py**
2069
- ```
2070
- import pytest
2071
- from src.api_repository import APIRepository
2072
-
2073
- def test_api_repository():
2074
- repository = APIRepository('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
2075
- apis = repository.get_apis()
2076
- assert len(apis) > 0
2077
- ```
2078
-
2079
- This concludes a fully working implementation.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/.gpteng/memory/logs/gen_entrypoint_chat.txt DELETED
@@ -1,842 +0,0 @@
1
-
2
- 2024-06-07T16:57:32.804574
3
- ================================ System Message ================================
4
-
5
- You will get information about a codebase that is currently on disk in the current folder.
6
- The user will ask you to write a script that runs the code in a specific way.
7
- You will answer with code blocks that include all the necessary terminal commands.
8
- Do not install globally. Do not use sudo.
9
- Do not explain the code, just give the commands.
10
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
11
-
12
-
13
- ================================ Human Message =================================
14
-
15
-
16
- Make a unix script that
17
- a) installs dependencies
18
- b) runs all necessary parts of the codebase (in parallel if necessary)
19
-
20
- Information about the codebase:
21
-
22
- ```
23
- File: mysite/logger.py
24
- 1 import logging
25
- 2
26
- 3 logger = logging.getLogger(__name__)
27
-
28
- File: mysite/utils.py
29
- 1 import os
30
- 2 import shutil
31
- 3 import hmac
32
- 4 import hashlib
33
- 5 import base64
34
- 6 import subprocess
35
- 7 import time
36
- 8
37
- 9 def validate_signature(body: str, signature: str, secret: str) -> bool:
38
- 10 # ...
39
- 11
40
- 12 def set_environment_variables():
41
- 13 os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
42
- 14 os.environ["OPENAI_API_KEY"] = "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"
43
- 15 os.environ["MODEL_NAME"] = "llama3-8b-8192"
44
- 16 os.environ["LOCAL_MODEL"] = "true"
45
-
46
- File: mysite/interpreter.py
47
- 1 from mysite.utils import set_environment_variables
48
- 2
49
- 3 class Interpreter:
50
- 4 def __init__(self):
51
- 5 set_environment_variables()
52
- 6
53
- 7 def chat(self, message, display=False, stream=True):
54
- 8 # ...
55
- 9
56
- 10 def reset(self):
57
- 11 # ...
58
-
59
- File: mysite/completion.py
60
- 1 import asyncio
61
- 2 from mysite.utils import set_environment_variables
62
- 3 from groq import Groq
63
- 4
64
- 5 async def completion(message: str, history, c=None, d=None):
65
- 6 client = Groq(api_key=os.getenv("api_key"))
66
- 7 # ...
67
-
68
- File: mysite/process_file.py
69
- 1 import os
70
- 2 import shutil
71
- 3 import subprocess
72
- 4 from mysite.utils import set_environment_variables
73
- 5
74
- 6 def process_file(fileobj, prompt, foldername):
75
- 7 set_environment_variables()
76
- 8 # ...
77
-
78
- File: mysite/no_process_file.py
79
- 1 import os
80
- 2 import shutil
81
- 3 import subprocess
82
- 4 from mysite.utils import set_environment_variables
83
- 5
84
- 6 def no_process_file(prompt, foldername):
85
- 7 set_environment_variables()
86
- 8 # ...
87
-
88
- File: mysite/chat_with_interpreter.py
89
- 1 from mysite.interpreter import Interpreter
90
- 2 from mysite.utils import set_environment_variables
91
- 3
92
- 4 def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
93
- 5 set_environment_variables()
94
- 6 # ...
95
-
96
- File: requirements.txt
97
- 1 groq
98
- 2 duckdb
99
-
100
- ```
101
-
102
- ================================== Ai Message ==================================
103
-
104
- Here is the Unix script that installs dependencies and runs the necessary parts of the codebase:
105
- ```
106
- #!/bin/bash
107
-
108
- # Install dependencies
109
- pip install -r requirements.txt
110
-
111
- # Run the codebase
112
- python -m mysite.interpreter & python -m mysite.completion & python -m mysite.process_file & python -m mysite.no_process_file & python -m mysite.chat_with_interpreter
113
- ```
114
- Note: This script assumes that the `mysite` package is in the current working directory.
115
-
116
- 2024-06-07T16:57:52.598798
117
- ================================ System Message ================================
118
-
119
- You will get information about a codebase that is currently on disk in the current folder.
120
- The user will ask you to write a script that runs the code in a specific way.
121
- You will answer with code blocks that include all the necessary terminal commands.
122
- Do not install globally. Do not use sudo.
123
- Do not explain the code, just give the commands.
124
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
125
-
126
-
127
- ================================ Human Message =================================
128
-
129
-
130
- Make a unix script that
131
- a) installs dependencies
132
- b) runs all necessary parts of the codebase (in parallel if necessary)
133
-
134
- Information about the codebase:
135
-
136
- ```
137
- File: mysite/logger.py
138
- 1 import logging
139
- 2
140
- 3 logger = logging.getLogger(__name__)
141
-
142
- File: mysite/utils.py
143
- 1 import os
144
- 2 import shutil
145
- 3 import hmac
146
- 4 import hashlib
147
- 5 import base64
148
- 6 import subprocess
149
- 7 import time
150
- 8
151
- 9 def validate_signature(body: str, signature: str, secret: str) -> bool:
152
- 10 # ...
153
- 11
154
- 12 def set_environment_variables():
155
- 13 os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
156
- 14 os.environ["OPENAI_API_KEY"] = "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"
157
- 15 os.environ["MODEL_NAME"] = "llama3-8b-8192"
158
- 16 os.environ["LOCAL_MODEL"] = "true"
159
-
160
- File: mysite/interpreter.py
161
- 1 from mysite.utils import set_environment_variables
162
- 2
163
- 3 class Interpreter:
164
- 4 def __init__(self):
165
- 5 set_environment_variables()
166
- 6
167
- 7 def chat(self, message, display=False, stream=True):
168
- 8 # ...
169
- 9
170
- 10 def reset(self):
171
- 11 # ...
172
-
173
- File: mysite/completion.py
174
- 1 import asyncio
175
- 2 from groq import Groq
176
- 3 from mysite.utils import set_environment_variables
177
- 4
178
- 5 async def completion(message: str, history, c=None, d=None):
179
- 6 client = Groq(api_key=os.getenv("api_key"))
180
- 7 # ...
181
-
182
- File: mysite/process_file.py
183
- 1 import os
184
- 2 import shutil
185
- 3 import subprocess
186
- 4 from mysite.utils import set_environment_variables
187
- 5
188
- 6 def process_file(fileobj, prompt, foldername):
189
- 7 set_environment_variables()
190
- 8 # ...
191
-
192
- File: mysite/no_process_file.py
193
- 1 import os
194
- 2 import shutil
195
- 3 import subprocess
196
- 4 from mysite.utils import set_environment_variables
197
- 5
198
- 6 def no_process_file(prompt, foldername):
199
- 7 set_environment_variables()
200
- 8 # ...
201
-
202
- File: mysite/chat_with_interpreter.py
203
- 1 from mysite.interpreter import Interpreter
204
- 2 from mysite.utils import set_environment_variables
205
- 3
206
- 4 def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
207
- 5 set_environment_variables()
208
- 6 # ...
209
-
210
- File: requirements.txt
211
- 1 groq
212
- 2 duckdb
213
-
214
- ```
215
-
216
- ================================== Ai Message ==================================
217
-
218
- Here is a Unix script that installs dependencies and runs the necessary parts of the codebase:
219
- ```
220
- #!/bin/bash
221
-
222
- # Install dependencies
223
- pip install -r requirements.txt
224
-
225
- # Run the codebase
226
- python -m mysite.interpreter
227
- python -m mysite.completion
228
- python -m mysite.process_file
229
- python -m mysite.no_process_file
230
- python -m mysite.chat_with_interpreter
231
- ```
232
- Note: This script assumes that the `mysite` package is in the current working directory.
233
-
234
- 2024-06-07T16:59:02.258491
235
- ================================ System Message ================================
236
-
237
- You will get information about a codebase that is currently on disk in the current folder.
238
- The user will ask you to write a script that runs the code in a specific way.
239
- You will answer with code blocks that include all the necessary terminal commands.
240
- Do not install globally. Do not use sudo.
241
- Do not explain the code, just give the commands.
242
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
243
-
244
-
245
- ================================ Human Message =================================
246
-
247
-
248
- Make a unix script that
249
- a) installs dependencies
250
- b) runs all necessary parts of the codebase (in parallel if necessary)
251
-
252
- Information about the codebase:
253
-
254
- ```
255
- File: mysite/logger.py
256
- 1 import logging
257
- 2
258
- 3 logger = logging.getLogger(__name__)
259
- 4 logger.setLevel(logging.ERROR)
260
- 5
261
- 6 handler = logging.StreamHandler()
262
- 7 handler.setLevel(logging.ERROR)
263
- 8
264
- 9 logger.addHandler(handler)
265
-
266
- File: mysite/validator.py
267
- 1 import hmac
268
- 2 import hashlib
269
- 3 import base64
270
- 4
271
- 5 def validate_signature(body: str, signature: str, secret: str) -> bool:
272
- 6 if secret is None:
273
- 7 logger.error("Secret is None")
274
- 8 return False
275
- 9
276
- 10 hash = hmac.new(
277
- 11 secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
278
- 12 ).digest()
279
- 13 expected_signature = base64.b64encode(hash).decode("utf-8")
280
- 14 return hmac.compare_digest(expected_signature, signature)
281
-
282
- File: mysite/environment.py
283
- 1 import os
284
- 2
285
- 3 def set_environment_variables():
286
- 4 os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
287
- 5 os.environ["OPENAI_API_KEY"] = "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"
288
- 6 os.environ["MODEL_NAME"] = "llama3-8b-8192"
289
- 7 os.environ["LOCAL_MODEL"] = "true"
290
-
291
- File: mysite/interpreter.py
292
- 1 import asyncio
293
- 2 from groq import Groq
294
- 3
295
- 4 async def completion(message: str, history, c=None, d=None):
296
- 5 client = Groq(api_key=os.getenv("api_key"))
297
- 6 messages = []
298
- 7 recent_messages = history[-20:]
299
- 8 for conversation in recent_messages:
300
- 9 user_message = conversation[0]
301
- 10 user_entry = {"role": "user", "content": user_message}
302
- 11 messages.append(user_entry)
303
- 12 assistant_message = conversation[1]
304
- 13 assistant_entry = {"role": "assistant", "content": assistant_message}
305
- 14 messages.append(assistant_entry)
306
- 15
307
- 16 user_entry = {"role": "user", "content": message}
308
- 17 messages.append(user_entry)
309
- 18 system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
310
- 19 messages.insert(0, system_prompt)
311
- 20 async with asyncio.timeout(30):
312
- 21 try:
313
- 22 stream = client.chat.completions.create(
314
- 23 model="llama3-8b-8192",
315
- 24 messages=messages,
316
- 25 temperature=1,
317
- 26 max_tokens=1024,
318
- 27 top_p=1,
319
- 28 stream=True,
320
- 29 stop=None,
321
- 30 )
322
- 31 all_result = ""
323
- 32 for chunk in stream:
324
- 33 current_content = chunk.choices[0].delta.content or ""
325
- 34 all_result += current_content
326
- 35 yield current_content
327
- 36 yield all_result
328
- 37 except asyncio.TimeoutError:
329
- 38 raise HTTPException(status_code=504, detail="Stream timed out")
330
-
331
- File: mysite/file_processor.py
332
- 1 import os
333
- 2 import shutil
334
- 3 import subprocess
335
- 4 import time
336
- 5
337
- 6 def no_process_file(prompt, foldername):
338
- 7 set_environment_variables()
339
- 8 try:
340
- 9 proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
341
- 10 except subprocess.CalledProcessError as e:
342
- 11 return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
343
- 12
344
- 13 no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
345
- 14 time.sleep(1)
346
- 15 with open(no_extension_path, "a") as f:
347
- 16 f.write(prompt)
348
- 17 time.sleep(1)
349
- 18 try:
350
- 19 prompt_file_path = no_extension_path
351
- 20 with open(prompt_file_path, "w") as prompt_file:
352
- 21 prompt_file.write(prompt)
353
- 22 except Exception as e:
354
- 23 return f"Error writing prompt to file: {str(e)}"
355
- 24 time.sleep(1)
356
- 25 try:
357
- 26 proc = subprocess.Popen(
358
- 27 ["make", "run", foldername],
359
- 28 stdin=subprocess.PIPE,
360
- 29 stdout=subprocess.PIPE,
361
- 30 stderr=subprocess.PIPE,
362
- 31 text=True,
363
- 32 )
364
- 33 stdout, stderr = proc.communicate(input="n\ny\ny\n")
365
- 34 return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
366
- 35 except subprocess.CalledProcessError as e:
367
- 36 return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
368
- 37
369
- 38 def process_file(fileobj, prompt, foldername):
370
- 39 set_environment_variables()
371
- 40 try:
372
- 41 proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
373
- 42 except subprocess.CalledProcessError as e:
374
- 43 return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
375
- 44 time.sleep(2)
376
- 45 path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
377
- 46 shutil.copyfile(fileobj.name, path)
378
- 47 base_name = os.path.splitext(os.path.basename(fileobj))[0]
379
- 48 no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
380
- 49 shutil.copyfile(fileobj, no_extension_path)
381
- 50 with open(no_extension_path, "a") as f:
382
- 51 f.write(prompt)
383
- 52 try:
384
- 53 prompt_file_path = no_extension_path
385
- 54 with open(prompt_file_path, "w") as prompt_file:
386
- 55 prompt_file.write(prompt)
387
- 56 except Exception as e:
388
- 57 return f"Error writing prompt to file: {str(e)}"
389
- 58 time.sleep(1)
390
- 59 try:
391
- 60 proc = subprocess.Popen(
392
- 61 ["make", "run", foldername],
393
- 62 stdin=subprocess.PIPE,
394
- 63 stdout=subprocess.PIPE,
395
- 64 stderr=subprocess.PIPE,
396
- 65 text=True,
397
- 66 )
398
- 67 stdout, stderr = proc.communicate(input="n\ny\ny\n")
399
- 68 return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
400
- 69 except subprocess.CalledProcessError as e:
401
- 70 return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
402
-
403
- File: mysite/db.py
404
- 1 import duckdb
405
- 2
406
- 3 def insert(full_response, message):
407
- 4 age = 28
408
- 5 db_path = "./workspace/sample.duckdb"
409
- 6 con = duckdb.connect(database=db_path)
410
- 7 con.execute(
411
- 8 """
412
- 9 CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
413
- 10 CREATE TABLE IF NOT EXISTS samples (
414
- 11 id INTEGER DEFAULT nextval('sample_id_seq'),
415
- 12 name VARCHAR,
416
- 13 age INTEGER,
417
- 14 PRIMARY KEY(id)
418
- 15 );
419
- 16 """
420
- 17 )
421
- 18 cur = con.cursor()
422
- 19 con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
423
- 20 con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
424
- 21 con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
425
- 22 con.commit()
426
- 23 cur = con.execute("SELECT * FROM samples")
427
- 24 res = cur.fetchall()
428
- 25 rows = ""
429
- 26 rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
430
- 27 con.close()
431
- 28 return rows
432
-
433
- File: requirements.txt
434
- 1 groq
435
- 2 duckdb
436
-
437
- ```
438
-
439
- ================================== Ai Message ==================================
440
-
441
- Here is the Unix script that installs dependencies and runs the codebase:
442
- ```
443
- #!/bin/bash
444
-
445
- # Install dependencies
446
- pip install -r requirements.txt
447
-
448
- # Run the codebase
449
- python -m mysite.interpreter
450
- python -m mysite.file_processor
451
- python -m mysite.db
452
- ```
453
- Note: This script assumes that the `mysite` package is in the current working directory. If the package is located elsewhere, you may need to modify the script accordingly.
454
-
455
- 2024-06-07T16:59:53.209308
456
- ================================ System Message ================================
457
-
458
- You will get information about a codebase that is currently on disk in the current folder.
459
- The user will ask you to write a script that runs the code in a specific way.
460
- You will answer with code blocks that include all the necessary terminal commands.
461
- Do not install globally. Do not use sudo.
462
- Do not explain the code, just give the commands.
463
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
464
-
465
-
466
- ================================ Human Message =================================
467
-
468
-
469
- Make a unix script that
470
- a) installs dependencies
471
- b) runs all necessary parts of the codebase (in parallel if necessary)
472
-
473
- Information about the codebase:
474
-
475
- ```
476
- File: Structure
477
- 1 mysite/
478
- 2 logger.py
479
- 3 models/
480
- 4 __init__.py
481
- 5 interpreter.py
482
- 6 utils/
483
- 7 __init__.py
484
- 8 file_utils.py
485
- 9 process_utils.py
486
- 10 __init__.py
487
- 11 app.py
488
- 12 requirements.txt
489
-
490
- File: logger.py
491
- 1 import logging
492
- 2
493
- 3 logger = logging.getLogger(__name__)
494
- 4 logger.setLevel(logging.ERROR)
495
- 5
496
- 6 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
497
- 7
498
- 8 file_handler = logging.FileHandler('log.txt')
499
- 9 file_handler.setFormatter(formatter)
500
- 10 logger.addHandler(file_handler)
501
-
502
- File: models/interpreter.py
503
- 1 class Interpreter:
504
- 2 def __init__(self):
505
- 3 self.llm = None
506
- 4
507
- 5 def chat(self, message, display=False, stream=True):
508
- 6 # implementation of the chat function
509
- 7 pass
510
- 8
511
- 9 def reset(self):
512
- 10 # implementation of the reset function
513
- 11 pass
514
-
515
- File: utils/file_utils.py
516
- 1 import os
517
- 2 import shutil
518
- 3
519
- 4 def no_process_file(prompt, foldername):
520
- 5 # implementation of the no_process_file function
521
- 6 pass
522
- 7
523
- 8 def process_file(fileobj, prompt, foldername):
524
- 9 # implementation of the process_file function
525
- 10 pass
526
-
527
- File: utils/process_utils.py
528
- 1 import hmac
529
- 2 import hashlib
530
- 3 import base64
531
- 4 import subprocess
532
- 5 import time
533
- 6
534
- 7 def validate_signature(body: str, signature: str, secret: str) -> bool:
535
- 8 # implementation of the validate_signature function
536
- 9 pass
537
- 10
538
- 11 def set_environment_variables():
539
- 12 # implementation of the set_environment_variables function
540
- 13 pass
541
-
542
- File: app.py
543
- 1 from mysite.logger import logger
544
- 2 from models.interpreter import Interpreter
545
- 3 from utils.file_utils import no_process_file, process_file
546
- 4 from utils.process_utils import validate_signature, set_environment_variables
547
- 5
548
- 6 interpreter = Interpreter()
549
- 7
550
- 8 async def completion(message: str, history, c=None, d=None):
551
- 9 # implementation of the completion function
552
- 10 pass
553
- 11
554
- 12 def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
555
- 13 # implementation of the chat_with_interpreter function
556
- 14 pass
557
-
558
- File: requirements.txt
559
- 1 hmac
560
- 2 hashlib
561
- 3 base64
562
- 4 subprocess
563
- 5 time
564
- 6 duckdb
565
- 7 groq
566
- 8 async-timeout
567
-
568
- ```
569
-
570
- ================================== Ai Message ==================================
571
-
572
- Here is a Unix script that installs dependencies and runs the codebase:
573
- ```
574
- #!/bin/bash
575
-
576
- # Install dependencies
577
- pip install -r requirements.txt
578
-
579
- # Run the codebase
580
- python app.py
581
- ```
582
- Note: This script assumes that the `app.py` file is the entry point of the codebase. If this is not the case, you may need to modify the script accordingly.
583
-
584
- 2024-06-07T17:00:42.552583
585
- ================================ System Message ================================
586
-
587
- You will get information about a codebase that is currently on disk in the current folder.
588
- The user will ask you to write a script that runs the code in a specific way.
589
- You will answer with code blocks that include all the necessary terminal commands.
590
- Do not install globally. Do not use sudo.
591
- Do not explain the code, just give the commands.
592
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
593
-
594
-
595
- ================================ Human Message =================================
596
-
597
-
598
- Make a unix script that
599
- a) installs dependencies
600
- b) runs all necessary parts of the codebase (in parallel if necessary)
601
-
602
- Information about the codebase:
603
-
604
- ```
605
- File: Structure
606
- 1 mysite/
607
- 2 logger.py
608
- 3 models/
609
- 4 __init__.py
610
- 5 interpreter.py
611
- 6 utils/
612
- 7 __init__.py
613
- 8 file_utils.py
614
- 9 process_utils.py
615
- 10 __init__.py
616
- 11 app.py
617
- 12 requirements.txt
618
-
619
- File: logger.py
620
- 1 import logging
621
- 2
622
- 3 logger = logging.getLogger(__name__)
623
- 4 logger.setLevel(logging.ERROR)
624
- 5
625
- 6 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
626
- 7
627
- 8 file_handler = logging.FileHandler('log.txt')
628
- 9 file_handler.setFormatter(formatter)
629
- 10 logger.addHandler(file_handler)
630
-
631
- File: models/interpreter.py
632
- 1 class Interpreter:
633
- 2 def __init__(self):
634
- 3 self.llm = None
635
- 4
636
- 5 def reset(self):
637
- 6 self.llm = None
638
- 7
639
- 8 def chat(self, message, display=False, stream=True):
640
- 9 # implementation of the chat function
641
- 10 pass
642
-
643
- File: utils/file_utils.py
644
- 1 import os
645
- 2 import shutil
646
- 3
647
- 4 def no_process_file(prompt, foldername):
648
- 5 # implementation of no_process_file function
649
- 6 pass
650
- 7
651
- 8 def process_file(fileobj, prompt, foldername):
652
- 9 # implementation of process_file function
653
- 10 pass
654
-
655
- File: utils/process_utils.py
656
- 1 import hmac
657
- 2 import hashlib
658
- 3 import base64
659
- 4
660
- 5 def validate_signature(body: str, signature: str, secret: str) -> bool:
661
- 6 # implementation of validate_signature function
662
- 7 pass
663
-
664
- File: app.py
665
- 1 from mysite.logger import logger
666
- 2 from mysite.models.interpreter import Interpreter
667
- 3 from mysite.utils.file_utils import no_process_file, process_file
668
- 4 from mysite.utils.process_utils import validate_signature
669
- 5
670
- 6 interpreter = Interpreter()
671
- 7
672
- 8 def set_environment_variables():
673
- 9 os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
674
- 10 os.environ["OPENAI_API_KEY"] = "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"
675
- 11 os.environ["MODEL_NAME"] = "llama3-8b-8192"
676
- 12 os.environ["LOCAL_MODEL"] = "true"
677
- 13
678
- 14 def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
679
- 15 # implementation of chat_with_interpreter function
680
- 16 pass
681
- 17
682
- 18 async def completion(message: str, history, c=None, d=None):
683
- 19 # implementation of completion function
684
- 20 pass
685
-
686
- File: requirements.txt
687
- 1 hmac
688
- 2 hashlib
689
- 3 base64
690
- 4 subprocess
691
- 5 duckdb
692
- 6 groq
693
- 7 async-timeout
694
-
695
- ```
696
-
697
- ================================== Ai Message ==================================
698
-
699
- Here is the Unix script that installs dependencies and runs the codebase:
700
- ```
701
- #!/bin/bash
702
-
703
- # Install dependencies
704
- pip install -r requirements.txt
705
-
706
- # Run the codebase
707
- python -m mysite.app
708
- ```
709
- Note: This script assumes that the `mysite` package is in the current working directory.
710
-
711
- 2024-06-07T17:21:19.113983
712
- ================================ System Message ================================
713
-
714
- You will get information about a codebase that is currently on disk in the current folder.
715
- The user will ask you to write a script that runs the code in a specific way.
716
- You will answer with code blocks that include all the necessary terminal commands.
717
- Do not install globally. Do not use sudo.
718
- Do not explain the code, just give the commands.
719
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
720
-
721
-
722
- ================================ Human Message =================================
723
-
724
-
725
- Make a unix script that
726
- a) installs dependencies
727
- b) runs all necessary parts of the codebase (in parallel if necessary)
728
-
729
- Information about the codebase:
730
-
731
- ```
732
- File: Structure
733
- 1 crawler
734
- 2 requirements.txt
735
- 3 src
736
- 4 __init__.py
737
- 5 crawler.py
738
- 6 api_repository.py
739
- 7 models
740
- 8 __init__.py
741
- 9 api.py
742
- 10 tests
743
- 11 __init__.py
744
- 12 test_crawler.py
745
- 13 test_api_repository.py
746
-
747
- File: requirements.txt
748
- 1 beautifulsoup4
749
- 2 requests
750
- 3 pytest
751
- 4 dataclasses
752
-
753
- File: src/__init__.py
754
- 1 # empty file
755
-
756
- File: src/crawler.py
757
- 1 import requests
758
- 2 from bs4 import BeautifulSoup
759
- 3 from models.api import API
760
- 4
761
- 5 class Crawler:
762
- 6 def __init__(self, url):
763
- 7 self.url = url
764
- 8 self.soup = self.get_soup()
765
- 9
766
- 10 def get_soup(self):
767
- 11 response = requests.get(self.url)
768
- 12 return BeautifulSoup(response.text, 'html.parser')
769
- 13
770
- 14 def crawl(self):
771
- 15 api_list = []
772
- 16 api_table = self.soup.find('table', {'class': 'markdown-table'})
773
- 17 for row in api_table.find_all('tr')[1:]:
774
- 18 cols = row.find_all('td')
775
- 19 api = API(
776
- 20 name=cols[0].text.strip(),
777
- 21 description=cols[1].text.strip(),
778
- 22 category=cols[2].text.strip(),
779
- 23 link=cols[3].find('a')['href']
780
- 24 )
781
- 25 api_list.append(api)
782
- 26 return api_list
783
-
784
- File: src/models/__init__.py
785
- 1 # empty file
786
-
787
- File: src/models/api.py
788
- 1 from dataclasses import dataclass
789
- 2
790
- 3 @dataclass
791
- 4 class API:
792
- 5 name: str
793
- 6 description: str
794
- 7 category: str
795
- 8 link: str
796
-
797
- File: src/api_repository.py
798
- 1 from crawler import Crawler
799
- 2
800
- 3 class APIRepository:
801
- 4 def __init__(self, url):
802
- 5 self.crawler = Crawler(url)
803
- 6
804
- 7 def get_apis(self):
805
- 8 return self.crawler.crawl()
806
-
807
- File: tests/__init__.py
808
- 1 # empty file
809
-
810
- File: tests/test_crawler.py
811
- 1 import pytest
812
- 2 from src.crawler import Crawler
813
- 3
814
- 4 def test_crawler():
815
- 5 crawler = Crawler('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
816
- 6 apis = crawler.crawl()
817
- 7 assert len(apis) > 0
818
-
819
- File: tests/test_api_repository.py
820
- 1 import pytest
821
- 2 from src.api_repository import APIRepository
822
- 3
823
- 4 def test_api_repository():
824
- 5 repository = APIRepository('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
825
- 6 apis = repository.get_apis()
826
- 7 assert len(apis) > 0
827
-
828
- ```
829
-
830
- ================================== Ai Message ==================================
831
-
832
- Here is the Unix script that installs dependencies and runs the codebase:
833
- ```
834
- #!/bin/bash
835
-
836
- # Install dependencies
837
- pip install -r requirements.txt
838
-
839
- # Run tests in parallel
840
- pytest tests/test_crawler.py tests/test_api_repository.py
841
- ```
842
- Save this script to a file (e.g., `run_codebase.sh`), make it executable with `chmod +x run_codebase.sh`, and then run it with `./run_codebase.sh`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/Structure DELETED
@@ -1,13 +0,0 @@
1
- crawler
2
- requirements.txt
3
- src
4
- __init__.py
5
- crawler.py
6
- api_repository.py
7
- models
8
- __init__.py
9
- api.py
10
- tests
11
- __init__.py
12
- test_crawler.py
13
- test_api_repository.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/app.py DELETED
@@ -1,20 +0,0 @@
1
- from mysite.logger import logger
2
- from mysite.models.interpreter import Interpreter
3
- from mysite.utils.file_utils import no_process_file, process_file
4
- from mysite.utils.process_utils import validate_signature
5
-
6
- interpreter = Interpreter()
7
-
8
- def set_environment_variables():
9
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
10
- os.environ["OPENAI_API_KEY"] = "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"
11
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
12
- os.environ["LOCAL_MODEL"] = "true"
13
-
14
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
15
- # implementation of chat_with_interpreter function
16
- pass
17
-
18
- async def completion(message: str, history, c=None, d=None):
19
- # implementation of completion function
20
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/logger.py DELETED
@@ -1,10 +0,0 @@
1
- import logging
2
-
3
- logger = logging.getLogger(__name__)
4
- logger.setLevel(logging.ERROR)
5
-
6
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
7
-
8
- file_handler = logging.FileHandler('log.txt')
9
- file_handler.setFormatter(formatter)
10
- logger.addHandler(file_handler)
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/models/interpreter.py DELETED
@@ -1,10 +0,0 @@
1
- class Interpreter:
2
- def __init__(self):
3
- self.llm = None
4
-
5
- def reset(self):
6
- self.llm = None
7
-
8
- def chat(self, message, display=False, stream=True):
9
- # implementation of the chat function
10
- pass
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/chat_with_interpreter.py DELETED
@@ -1,6 +0,0 @@
1
- from mysite.interpreter import Interpreter
2
- from mysite.utils import set_environment_variables
3
-
4
- def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None):
5
- set_environment_variables()
6
- # ...
 
 
 
 
 
 
 
routers/bunnkatu/mysite/completion.py DELETED
@@ -1,7 +0,0 @@
1
- import asyncio
2
- from groq import Groq
3
- from mysite.utils import set_environment_variables
4
-
5
- async def completion(message: str, history, c=None, d=None):
6
- client = Groq(api_key=os.getenv("api_key"))
7
- # ...
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/db.py DELETED
@@ -1,28 +0,0 @@
1
- import duckdb
2
-
3
- def insert(full_response, message):
4
- age = 28
5
- db_path = "./workspace/sample.duckdb"
6
- con = duckdb.connect(database=db_path)
7
- con.execute(
8
- """
9
- CREATE SEQUENCE IF NOT EXISTS sample_id_seq START 1;
10
- CREATE TABLE IF NOT EXISTS samples (
11
- id INTEGER DEFAULT nextval('sample_id_seq'),
12
- name VARCHAR,
13
- age INTEGER,
14
- PRIMARY KEY(id)
15
- );
16
- """
17
- )
18
- cur = con.cursor()
19
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (full_response, age))
20
- con.execute("INSERT INTO samples (name, age) VALUES (?, ?)", (message, age))
21
- con.execute("COPY samples TO 'sample.csv' (FORMAT CSV, HEADER)")
22
- con.commit()
23
- cur = con.execute("SELECT * FROM samples")
24
- res = cur.fetchall()
25
- rows = ""
26
- rows = "\n".join([f"name: {row[0]}, age: {row[1]}" for row in res])
27
- con.close()
28
- return rows
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/environment.py DELETED
@@ -1,7 +0,0 @@
1
- import os
2
-
3
- def set_environment_variables():
4
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
5
- os.environ["OPENAI_API_KEY"] = "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"
6
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
7
- os.environ["LOCAL_MODEL"] = "true"
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/file_processor.py DELETED
@@ -1,70 +0,0 @@
1
- import os
2
- import shutil
3
- import subprocess
4
- import time
5
-
6
- def no_process_file(prompt, foldername):
7
- set_environment_variables()
8
- try:
9
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
10
- except subprocess.CalledProcessError as e:
11
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
12
-
13
- no_extension_path = f"/home/user/app/routers/{foldername}/prompt"
14
- time.sleep(1)
15
- with open(no_extension_path, "a") as f:
16
- f.write(prompt)
17
- time.sleep(1)
18
- try:
19
- prompt_file_path = no_extension_path
20
- with open(prompt_file_path, "w") as prompt_file:
21
- prompt_file.write(prompt)
22
- except Exception as e:
23
- return f"Error writing prompt to file: {str(e)}"
24
- time.sleep(1)
25
- try:
26
- proc = subprocess.Popen(
27
- ["make", "run", foldername],
28
- stdin=subprocess.PIPE,
29
- stdout=subprocess.PIPE,
30
- stderr=subprocess.PIPE,
31
- text=True,
32
- )
33
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
34
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
35
- except subprocess.CalledProcessError as e:
36
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
37
-
38
- def process_file(fileobj, prompt, foldername):
39
- set_environment_variables()
40
- try:
41
- proc = subprocess.Popen(["mkdir", f"/home/user/app/routers/{foldername}"])
42
- except subprocess.CalledProcessError as e:
43
- return f"Processed Content:\n{e.stdout}\n\nMake Command Error:\n{e.stderr}"
44
- time.sleep(2)
45
- path = f"/home/user/app/routers/{foldername}/" + os.path.basename(fileobj)
46
- shutil.copyfile(fileobj.name, path)
47
- base_name = os.path.splitext(os.path.basename(fileobj))[0]
48
- no_extension_path = f"/home/user/app/routers/{foldername}/{base_name}"
49
- shutil.copyfile(fileobj, no_extension_path)
50
- with open(no_extension_path, "a") as f:
51
- f.write(prompt)
52
- try:
53
- prompt_file_path = no_extension_path
54
- with open(prompt_file_path, "w") as prompt_file:
55
- prompt_file.write(prompt)
56
- except Exception as e:
57
- return f"Error writing prompt to file: {str(e)}"
58
- time.sleep(1)
59
- try:
60
- proc = subprocess.Popen(
61
- ["make", "run", foldername],
62
- stdin=subprocess.PIPE,
63
- stdout=subprocess.PIPE,
64
- stderr=subprocess.PIPE,
65
- text=True,
66
- )
67
- stdout, stderr = proc.communicate(input="n\ny\ny\n")
68
- return f"Processed Content:\n{stdout}\n\nMake Command Output:\n{stdout}\n\nMake Command Error:\n{stderr}"
69
- except subprocess.CalledProcessError as e:
70
- return f"Processed Content:\n{stdout}\n\nMake Command Error:\n{e.stderr}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/interpreter.py DELETED
@@ -1,38 +0,0 @@
1
- import asyncio
2
- from groq import Groq
3
-
4
- async def completion(message: str, history, c=None, d=None):
5
- client = Groq(api_key=os.getenv("api_key"))
6
- messages = []
7
- recent_messages = history[-20:]
8
- for conversation in recent_messages:
9
- user_message = conversation[0]
10
- user_entry = {"role": "user", "content": user_message}
11
- messages.append(user_entry)
12
- assistant_message = conversation[1]
13
- assistant_entry = {"role": "assistant", "content": assistant_message}
14
- messages.append(assistant_entry)
15
-
16
- user_entry = {"role": "user", "content": message}
17
- messages.append(user_entry)
18
- system_prompt = {"role": "system", "content": "あなたは日本語の優秀なアシスタントです。"}
19
- messages.insert(0, system_prompt)
20
- async with asyncio.timeout(30):
21
- try:
22
- stream = client.chat.completions.create(
23
- model="llama3-8b-8192",
24
- messages=messages,
25
- temperature=1,
26
- max_tokens=1024,
27
- top_p=1,
28
- stream=True,
29
- stop=None,
30
- )
31
- all_result = ""
32
- for chunk in stream:
33
- current_content = chunk.choices[0].delta.content or ""
34
- all_result += current_content
35
- yield current_content
36
- yield all_result
37
- except asyncio.TimeoutError:
38
- raise HTTPException(status_code=504, detail="Stream timed out")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/logger.py DELETED
@@ -1,9 +0,0 @@
1
- import logging
2
-
3
- logger = logging.getLogger(__name__)
4
- logger.setLevel(logging.ERROR)
5
-
6
- handler = logging.StreamHandler()
7
- handler.setLevel(logging.ERROR)
8
-
9
- logger.addHandler(handler)
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/no_process_file.py DELETED
@@ -1,8 +0,0 @@
1
- import os
2
- import shutil
3
- import subprocess
4
- from mysite.utils import set_environment_variables
5
-
6
- def no_process_file(prompt, foldername):
7
- set_environment_variables()
8
- # ...
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/process_file.py DELETED
@@ -1,8 +0,0 @@
1
- import os
2
- import shutil
3
- import subprocess
4
- from mysite.utils import set_environment_variables
5
-
6
- def process_file(fileobj, prompt, foldername):
7
- set_environment_variables()
8
- # ...
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/utils.py DELETED
@@ -1,16 +0,0 @@
1
- import os
2
- import shutil
3
- import hmac
4
- import hashlib
5
- import base64
6
- import subprocess
7
- import time
8
-
9
- def validate_signature(body: str, signature: str, secret: str) -> bool:
10
- # ...
11
-
12
- def set_environment_variables():
13
- os.environ["OPENAI_API_BASE"] = "https://api.groq.com/openai/v1"
14
- os.environ["OPENAI_API_KEY"] = "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"
15
- os.environ["MODEL_NAME"] = "llama3-8b-8192"
16
- os.environ["LOCAL_MODEL"] = "true"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/mysite/validator.py DELETED
@@ -1,14 +0,0 @@
1
- import hmac
2
- import hashlib
3
- import base64
4
-
5
- def validate_signature(body: str, signature: str, secret: str) -> bool:
6
- if secret is None:
7
- logger.error("Secret is None")
8
- return False
9
-
10
- hash = hmac.new(
11
- secret.encode("utf-8"), body.encode("utf-8"), hashlib.sha256
12
- ).digest()
13
- expected_signature = base64.b64encode(hash).decode("utf-8")
14
- return hmac.compare_digest(expected_signature, signature)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/prompt DELETED
@@ -1,2 +0,0 @@
1
- このサイトをクロールして
2
- https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design
 
 
 
routers/bunnkatu/prompt.txt DELETED
@@ -1,5 +0,0 @@
1
- seleniumで
2
-
3
- kinkaimasu.jpのサイト情報を取得して
4
-
5
- 金の情報を抜き出し、CSVに登録
 
 
 
 
 
 
routers/bunnkatu/requirements.txt DELETED
@@ -1,4 +0,0 @@
1
- beautifulsoup4
2
- requests
3
- pytest
4
- dataclasses
 
 
 
 
 
routers/bunnkatu/run.sh DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Install dependencies
4
- pip install -r requirements.txt
5
-
6
- # Run tests in parallel
7
- pytest tests/test_crawler.py tests/test_api_repository.py
 
 
 
 
 
 
 
 
routers/bunnkatu/src/__init__.py DELETED
@@ -1 +0,0 @@
1
- # empty file
 
 
routers/bunnkatu/src/api_repository.py DELETED
@@ -1,8 +0,0 @@
1
- from crawler import Crawler
2
-
3
- class APIRepository:
4
- def __init__(self, url):
5
- self.crawler = Crawler(url)
6
-
7
- def get_apis(self):
8
- return self.crawler.crawl()
 
 
 
 
 
 
 
 
 
routers/bunnkatu/src/crawler.py DELETED
@@ -1,26 +0,0 @@
1
- import requests
2
- from bs4 import BeautifulSoup
3
- from models.api import API
4
-
5
- class Crawler:
6
- def __init__(self, url):
7
- self.url = url
8
- self.soup = self.get_soup()
9
-
10
- def get_soup(self):
11
- response = requests.get(self.url)
12
- return BeautifulSoup(response.text, 'html.parser')
13
-
14
- def crawl(self):
15
- api_list = []
16
- api_table = self.soup.find('table', {'class': 'markdown-table'})
17
- for row in api_table.find_all('tr')[1:]:
18
- cols = row.find_all('td')
19
- api = API(
20
- name=cols[0].text.strip(),
21
- description=cols[1].text.strip(),
22
- category=cols[2].text.strip(),
23
- link=cols[3].find('a')['href']
24
- )
25
- api_list.append(api)
26
- return api_list
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/src/models/__init__.py DELETED
@@ -1 +0,0 @@
1
- # empty file
 
 
routers/bunnkatu/src/models/api.py DELETED
@@ -1,8 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
- @dataclass
4
- class API:
5
- name: str
6
- description: str
7
- category: str
8
- link: str
 
 
 
 
 
 
 
 
 
routers/bunnkatu/tests/__init__.py DELETED
@@ -1 +0,0 @@
1
- # empty file
 
 
routers/bunnkatu/tests/test_api_repository.py DELETED
@@ -1,7 +0,0 @@
1
- import pytest
2
- from src.api_repository import APIRepository
3
-
4
- def test_api_repository():
5
- repository = APIRepository('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
6
- apis = repository.get_apis()
7
- assert len(apis) > 0
 
 
 
 
 
 
 
 
routers/bunnkatu/tests/test_crawler.py DELETED
@@ -1,7 +0,0 @@
1
- import pytest
2
- from src.crawler import Crawler
3
-
4
- def test_crawler():
5
- crawler = Crawler('https://github.com/public-apis/public-apis?tab=readme-ov-file#art--design')
6
- apis = crawler.crawl()
7
- assert len(apis) > 0
 
 
 
 
 
 
 
 
routers/bunnkatu/utils/file_utils.py DELETED
@@ -1,10 +0,0 @@
1
- import os
2
- import shutil
3
-
4
- def no_process_file(prompt, foldername):
5
- # implementation of no_process_file function
6
- pass
7
-
8
- def process_file(fileobj, prompt, foldername):
9
- # implementation of process_file function
10
- pass
 
 
 
 
 
 
 
 
 
 
 
routers/bunnkatu/utils/process_utils.py DELETED
@@ -1,7 +0,0 @@
1
- import hmac
2
- import hashlib
3
- import base64
4
-
5
- def validate_signature(body: str, signature: str, secret: str) -> bool:
6
- # implementation of validate_signature function
7
- pass
 
 
 
 
 
 
 
 
routers/chat/{chat.py → Chat.py} RENAMED
@@ -101,7 +101,7 @@ chatbot = gr.Chatbot(height=650, placeholder=PLACEHOLDER, label="Gradio ChatInte
101
 
102
 
103
 
104
- demo44 = gr.ChatInterface(
105
  fn=chat_with_interpreter,
106
  chatbot=chatbot,
107
  fill_height=True,
 
101
 
102
 
103
 
104
+ gradio_interface = gr.ChatInterface(
105
  fn=chat_with_interpreter,
106
  chatbot=chatbot,
107
  fill_height=True,
routers/chat/demo3.py DELETED
@@ -1,18 +0,0 @@
1
-
2
- import gradio as gr
3
- from mysite.utilities import chat_with_interpreter, completion, process_file
4
- from interpreter import interpreter
5
- import mysite.interpreter_config # インポートするだけで設定が適用されます
6
- import mysite.interpreter_config
7
-
8
-
9
-
10
- demo4 = gr.ChatInterface(
11
- chat_with_interpreter,
12
- additional_inputs=[
13
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
14
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
15
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
16
- gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
17
- ],
18
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/chats/{chats.py → OpenInterpreter.py} RENAMED
File without changes
routers/{greet → chats}/__init__.py RENAMED
File without changes
routers/googleappsscript34/.gpteng/memory/logs/all_output.txt DELETED
@@ -1,251 +0,0 @@
1
-
2
- 2024-06-09T17:26:40.030581
3
- ================================ System Message ================================
4
-
5
- You will get instructions for code to write.
6
- You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.
7
- Think step by step and reason yourself to the correct decisions to make sure we get it right.
8
- First lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.
9
-
10
- You will output the content of each file necessary to achieve the goal, including ALL code.
11
- Represent files like so:
12
-
13
- FILENAME
14
- ```
15
- CODE
16
- ```
17
-
18
- The following tokens must be replaced like so:
19
- FILENAME is the lowercase combined path and file name including the file extension
20
- CODE is the code in the file
21
-
22
- Example representation of a file:
23
-
24
- src/hello_world.py
25
- ```
26
- print("Hello World")
27
- ```
28
-
29
- Do not comment on what every file does. Please note that the code should be fully functional. No placeholders.
30
-
31
-
32
- You will start with the "entrypoint" file, then go to the ones that are imported by that file, and so on.
33
- Please note that the code should be fully functional. No placeholders.
34
-
35
- Follow a language and framework appropriate best practice file naming convention.
36
- Make sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.
37
- Ensure to implement all code, if you are unsure, write a plausible implementation.
38
- Include module dependency or package manager dependency definition file.
39
- Before you finish, double check that all parts of the architecture is present in the files.
40
-
41
- When you are done, write finish with "this concludes a fully working implementation".
42
-
43
- Useful to know:
44
- Almost always put different classes in different files.
45
- Always use the programming language the user asks for.
46
- For Python, you always create an appropriate requirements.txt file.
47
- For NodeJS, you always create an appropriate package.json file.
48
- Always add a comment briefly describing the purpose of the function definition.
49
- Add comments explaining very complex bits of logic.
50
- Always follow the best practices for the requested languages for folder/file structure and how to package the project.
51
-
52
-
53
- Python toolbelt preferences:
54
- - pytest
55
- - dataclasses
56
-
57
-
58
- ================================ Human Message =================================
59
-
60
- Request: googleappsscript
61
- ラインの画像検索システム
62
-
63
- 1,lineからデータがくる
64
- 2,doPostで取得
65
- 3.typeがイメージの場合はドライブに保存
66
- 4,保存したデータをS3にアップロード
67
- 5.データはシークレットから取得
68
- 6,plantumlでフローの作成
69
- 7,システムドキュメントの作成
70
-
71
- ================================== Ai Message ==================================
72
-
73
- Here is the implementation of the requested system in Google Apps Script:
74
-
75
- **Code Structure**
76
-
77
- * `appsscript.json`: configuration file for the Google Apps Script project
78
- * `Code.gs`: entry point of the script
79
- * `Line.gs`: handles incoming data from Line
80
- * `ImageHandler.gs`: handles image data and uploads to Google Drive and S3
81
- * `SecretManager.gs`: manages secrets for S3 upload
82
- * `PlantUML.gs`: generates PlantUML flow diagram
83
- * `SystemDocument.gs`: generates system documentation
84
-
85
- **appsscript.json**
86
- ```
87
- {
88
- "timeZone": "Asia/Tokyo",
89
- "dependencies": {
90
- "enabledAdvancedServices": [
91
- {
92
- "userSymbol": "Drive",
93
- "serviceId": "drive",
94
- "version": "v2"
95
- },
96
- {
97
- "userSymbol": "S3",
98
- "serviceId": "s3",
99
- "version": "v1"
100
- }
101
- ]
102
- }
103
- }
104
- ```
105
-
106
- **Code.gs**
107
- ```
108
- function doPost(e) {
109
- var lineData = e.postData.contents;
110
- var lineHandler = new LineHandler();
111
- lineHandler.handleData(lineData);
112
- }
113
- ```
114
-
115
- **Line.gs**
116
- ```
117
- class LineHandler {
118
- handleData(data) {
119
- var type = data.type;
120
- if (type === 'image') {
121
- var imageHandler = new ImageHandler();
122
- imageHandler.handleImage(data);
123
- }
124
- }
125
- }
126
- ```
127
-
128
- **ImageHandler.gs**
129
- ```
130
- class ImageHandler {
131
- handleImage(data) {
132
- var blob = Utilities.newBlob(data.binaryData, data.mimeType);
133
- var driveFile = DriveApp.createFile(blob);
134
- var secretManager = new SecretManager();
135
- var s3Uploader = new S3Uploader(secretManager.getSecret('S3_ACCESS_KEY'), secretManager.getSecret('S3_SECRET_KEY'));
136
- s3Uploader.uploadFile(driveFile);
137
- }
138
- }
139
- ```
140
-
141
- **SecretManager.gs**
142
- ```
143
- class SecretManager {
144
- getSecret(secretName) {
145
- var scriptProperties = PropertiesService.getUserProperties();
146
- return scriptProperties.getProperty(secretName);
147
- }
148
- }
149
- ```
150
-
151
- **S3Uploader.gs**
152
- ```
153
- class S3Uploader {
154
- constructor(accessKey, secretKey) {
155
- this.accessKey = accessKey;
156
- this.secretKey = secretKey;
157
- }
158
-
159
- uploadFile(file) {
160
- var s3 = getS3Service(this.accessKey, this.secretKey);
161
- var fileBlob = file.getBlob();
162
- var fileContent = fileBlob.getBytes();
163
- var fileMetadata = {
164
- 'Content-Type': file.getMimeType(),
165
- 'Content-Length': fileBlob.getBytes().length
166
- };
167
- s3.putObject('my-bucket', file.getName(), fileContent, fileMetadata);
168
- }
169
-
170
- getS3Service(accessKey, secretKey) {
171
- var service = OAuth2.createService('s3')
172
- .setAuthorizationBaseUrl('https://s3.amazonaws.com/')
173
- .setTokenUrl('https://s3.amazonaws.com/')
174
- .setClientId(accessKey)
175
- .setClientSecret(secretKey)
176
- .setCallbackFunction('authCallback')
177
- .setPropertyStore(PropertiesService.getUserProperties());
178
- return service;
179
- }
180
-
181
- authCallback(request) {
182
- var service = getService();
183
- var authorized = service.handleCallback(request);
184
- if (authorized) {
185
- return HtmlService.createHtmlOutput('Authorized');
186
- } else {
187
- return HtmlService.createHtmlOutput('Access denied');
188
- }
189
- }
190
- }
191
- ```
192
-
193
- **PlantUML.gs**
194
- ```
195
- class PlantUML {
196
- generateFlowDiagram() {
197
- var flowDiagram = '@startuml\n';
198
- flowDiagram += 'participant Line as "Line"\n';
199
- flowDiagram += 'participant Script as "Google Apps Script"\n';
200
- flowDiagram += 'participant Drive as "Google Drive"\n';
201
- flowDiagram += 'participant S3 as "Amazon S3"\n';
202
- flowDiagram += 'Line->>Script: doPost\n';
203
- flowDiagram += 'Script->>Drive: save image\n';
204
- flowDiagram += 'Script->>S3: upload image\n';
205
- flowDiagram += '@enduml';
206
- var plantUMLService = getPlantUMLService();
207
- var diagramUrl = plantUMLService.getDiagramUrl(flowDiagram);
208
- var diagramImage = UrlFetchApp.fetch(diagramUrl).getBlob();
209
- var driveFile = DriveApp.createFile(diagramImage);
210
- }
211
-
212
- getPlantUMLService() {
213
- var service = OAuth2.createService('plantuml')
214
- .setAuthorizationBaseUrl('https://plantuml.com/')
215
- .setTokenUrl('https://plantuml.com/')
216
- .setClientId('your_client_id')
217
- .setClientSecret('your_client_secret')
218
- .setCallbackFunction('authCallback')
219
- .setPropertyStore(PropertiesService.getUserProperties());
220
- return service;
221
- }
222
-
223
- authCallback(request) {
224
- var service = getService();
225
- var authorized = service.handleCallback(request);
226
- if (authorized) {
227
- return HtmlService.createHtmlOutput('Authorized');
228
- } else {
229
- return HtmlService.createHtmlOutput('Access denied');
230
- }
231
- }
232
- }
233
- ```
234
-
235
- **SystemDocument.gs**
236
- ```
237
- class SystemDocument {
238
- generateDocumentation() {
239
- var document = DocumentApp.createDocument('System Documentation');
240
- var body = document.getBody();
241
- body.appendParagraph('System Overview');
242
- body.appendParagraph('This system receives data from Line and saves images to Google Drive and Amazon S3.');
243
- body.appendParagraph('Flow Diagram:');
244
- var plantUML = new PlantUML();
245
- var diagramFile = plantUML.generateFlowDiagram();
246
- body.appendImage(diagramFile);
247
- }
248
- }
249
- ```
250
-
251
- This concludes a fully working implementation.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/.gpteng/memory/logs/gen_entrypoint_chat.txt DELETED
@@ -1,188 +0,0 @@
1
-
2
- 2024-06-09T17:26:40.846902
3
- ================================ System Message ================================
4
-
5
- You will get information about a codebase that is currently on disk in the current folder.
6
- The user will ask you to write a script that runs the code in a specific way.
7
- You will answer with code blocks that include all the necessary terminal commands.
8
- Do not install globally. Do not use sudo.
9
- Do not explain the code, just give the commands.
10
- Do not use placeholders, use example values (like . for a folder argument) if necessary.
11
-
12
-
13
- ================================ Human Message =================================
14
-
15
-
16
- Make a unix script that
17
- a) installs dependencies
18
- b) runs all necessary parts of the codebase (in parallel if necessary)
19
-
20
- Information about the codebase:
21
-
22
- ```
23
- File: appsscript.json
24
- 1 {
25
- 2 "timeZone": "Asia/Tokyo",
26
- 3 "dependencies": {
27
- 4 "enabledAdvancedServices": [
28
- 5 {
29
- 6 "userSymbol": "Drive",
30
- 7 "serviceId": "drive",
31
- 8 "version": "v2"
32
- 9 },
33
- 10 {
34
- 11 "userSymbol": "S3",
35
- 12 "serviceId": "s3",
36
- 13 "version": "v1"
37
- 14 }
38
- 15 ]
39
- 16 }
40
- 17 }
41
-
42
- File: Code.gs
43
- 1 function doPost(e) {
44
- 2 var lineData = e.postData.contents;
45
- 3 var lineHandler = new LineHandler();
46
- 4 lineHandler.handleData(lineData);
47
- 5 }
48
-
49
- File: Line.gs
50
- 1 class LineHandler {
51
- 2 handleData(data) {
52
- 3 var type = data.type;
53
- 4 if (type === 'image') {
54
- 5 var imageHandler = new ImageHandler();
55
- 6 imageHandler.handleImage(data);
56
- 7 }
57
- 8 }
58
- 9 }
59
-
60
- File: ImageHandler.gs
61
- 1 class ImageHandler {
62
- 2 handleImage(data) {
63
- 3 var blob = Utilities.newBlob(data.binaryData, data.mimeType);
64
- 4 var driveFile = DriveApp.createFile(blob);
65
- 5 var secretManager = new SecretManager();
66
- 6 var s3Uploader = new S3Uploader(secretManager.getSecret('S3_ACCESS_KEY'), secretManager.getSecret('S3_SECRET_KEY'));
67
- 7 s3Uploader.uploadFile(driveFile);
68
- 8 }
69
- 9 }
70
-
71
- File: SecretManager.gs
72
- 1 class SecretManager {
73
- 2 getSecret(secretName) {
74
- 3 var scriptProperties = PropertiesService.getUserProperties();
75
- 4 return scriptProperties.getProperty(secretName);
76
- 5 }
77
- 6 }
78
-
79
- File: S3Uploader.gs
80
- 1 class S3Uploader {
81
- 2 constructor(accessKey, secretKey) {
82
- 3 this.accessKey = accessKey;
83
- 4 this.secretKey = secretKey;
84
- 5 }
85
- 6
86
- 7 uploadFile(file) {
87
- 8 var s3 = getS3Service(this.accessKey, this.secretKey);
88
- 9 var fileBlob = file.getBlob();
89
- 10 var fileContent = fileBlob.getBytes();
90
- 11 var fileMetadata = {
91
- 12 'Content-Type': file.getMimeType(),
92
- 13 'Content-Length': fileBlob.getBytes().length
93
- 14 };
94
- 15 s3.putObject('my-bucket', file.getName(), fileContent, fileMetadata);
95
- 16 }
96
- 17
97
- 18 getS3Service(accessKey, secretKey) {
98
- 19 var service = OAuth2.createService('s3')
99
- 20 .setAuthorizationBaseUrl('https://s3.amazonaws.com/')
100
- 21 .setTokenUrl('https://s3.amazonaws.com/')
101
- 22 .setClientId(accessKey)
102
- 23 .setClientSecret(secretKey)
103
- 24 .setCallbackFunction('authCallback')
104
- 25 .setPropertyStore(PropertiesService.getUserProperties());
105
- 26 return service;
106
- 27 }
107
- 28
108
- 29 authCallback(request) {
109
- 30 var service = getService();
110
- 31 var authorized = service.handleCallback(request);
111
- 32 if (authorized) {
112
- 33 return HtmlService.createHtmlOutput('Authorized');
113
- 34 } else {
114
- 35 return HtmlService.createHtmlOutput('Access denied');
115
- 36 }
116
- 37 }
117
- 38 }
118
-
119
- File: PlantUML.gs
120
- 1 class PlantUML {
121
- 2 generateFlowDiagram() {
122
- 3 var flowDiagram = '@startuml\n';
123
- 4 flowDiagram += 'participant Line as "Line"\n';
124
- 5 flowDiagram += 'participant Script as "Google Apps Script"\n';
125
- 6 flowDiagram += 'participant Drive as "Google Drive"\n';
126
- 7 flowDiagram += 'participant S3 as "Amazon S3"\n';
127
- 8 flowDiagram += 'Line->>Script: doPost\n';
128
- 9 flowDiagram += 'Script->>Drive: save image\n';
129
- 10 flowDiagram += 'Script->>S3: upload image\n';
130
- 11 flowDiagram += '@enduml';
131
- 12 var plantUMLService = getPlantUMLService();
132
- 13 var diagramUrl = plantUMLService.getDiagramUrl(flowDiagram);
133
- 14 var diagramImage = UrlFetchApp.fetch(diagramUrl).getBlob();
134
- 15 var driveFile = DriveApp.createFile(diagramImage);
135
- 16 }
136
- 17
137
- 18 getPlantUMLService() {
138
- 19 var service = OAuth2.createService('plantuml')
139
- 20 .setAuthorizationBaseUrl('https://plantuml.com/')
140
- 21 .setTokenUrl('https://plantuml.com/')
141
- 22 .setClientId('your_client_id')
142
- 23 .setClientSecret('your_client_secret')
143
- 24 .setCallbackFunction('authCallback')
144
- 25 .setPropertyStore(PropertiesService.getUserProperties());
145
- 26 return service;
146
- 27 }
147
- 28
148
- 29 authCallback(request) {
149
- 30 var service = getService();
150
- 31 var authorized = service.handleCallback(request);
151
- 32 if (authorized) {
152
- 33 return HtmlService.createHtmlOutput('Authorized');
153
- 34 } else {
154
- 35 return HtmlService.createHtmlOutput('Access denied');
155
- 36 }
156
- 37 }
157
- 38 }
158
-
159
- File: SystemDocument.gs
160
- 1 class SystemDocument {
161
- 2 generateDocumentation() {
162
- 3 var document = DocumentApp.createDocument('System Documentation');
163
- 4 var body = document.getBody();
164
- 5 body.appendParagraph('System Overview');
165
- 6 body.appendParagraph('This system receives data from Line and saves images to Google Drive and Amazon S3.');
166
- 7 body.appendParagraph('Flow Diagram:');
167
- 8 var plantUML = new PlantUML();
168
- 9 var diagramFile = plantUML.generateFlowDiagram();
169
- 10 body.appendImage(diagramFile);
170
- 11 }
171
- 12 }
172
-
173
- ```
174
-
175
- ================================== Ai Message ==================================
176
-
177
- Here is the Unix script that installs dependencies and runs the codebase:
178
- ```
179
- #!/bin/bash
180
-
181
- # Install dependencies
182
- clasp dependencies enable drive v2
183
- clasp dependencies enable s3 v1
184
-
185
- # Run the code
186
- clasp run Code.gs
187
- ```
188
- Note: This script assumes that you have the `clasp` command-line tool installed and configured to work with your Google Apps Script project.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/Code.gs DELETED
@@ -1,5 +0,0 @@
1
- function doPost(e) {
2
- var lineData = e.postData.contents;
3
- var lineHandler = new LineHandler();
4
- lineHandler.handleData(lineData);
5
- }
 
 
 
 
 
 
routers/googleappsscript34/ImageHandler.gs DELETED
@@ -1,9 +0,0 @@
1
- class ImageHandler {
2
- handleImage(data) {
3
- var blob = Utilities.newBlob(data.binaryData, data.mimeType);
4
- var driveFile = DriveApp.createFile(blob);
5
- var secretManager = new SecretManager();
6
- var s3Uploader = new S3Uploader(secretManager.getSecret('S3_ACCESS_KEY'), secretManager.getSecret('S3_SECRET_KEY'));
7
- s3Uploader.uploadFile(driveFile);
8
- }
9
- }
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/Line.gs DELETED
@@ -1,9 +0,0 @@
1
- class LineHandler {
2
- handleData(data) {
3
- var type = data.type;
4
- if (type === 'image') {
5
- var imageHandler = new ImageHandler();
6
- imageHandler.handleImage(data);
7
- }
8
- }
9
- }
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/PlantUML.gs DELETED
@@ -1,38 +0,0 @@
1
- class PlantUML {
2
- generateFlowDiagram() {
3
- var flowDiagram = '@startuml\n';
4
- flowDiagram += 'participant Line as "Line"\n';
5
- flowDiagram += 'participant Script as "Google Apps Script"\n';
6
- flowDiagram += 'participant Drive as "Google Drive"\n';
7
- flowDiagram += 'participant S3 as "Amazon S3"\n';
8
- flowDiagram += 'Line->>Script: doPost\n';
9
- flowDiagram += 'Script->>Drive: save image\n';
10
- flowDiagram += 'Script->>S3: upload image\n';
11
- flowDiagram += '@enduml';
12
- var plantUMLService = getPlantUMLService();
13
- var diagramUrl = plantUMLService.getDiagramUrl(flowDiagram);
14
- var diagramImage = UrlFetchApp.fetch(diagramUrl).getBlob();
15
- var driveFile = DriveApp.createFile(diagramImage);
16
- }
17
-
18
- getPlantUMLService() {
19
- var service = OAuth2.createService('plantuml')
20
- .setAuthorizationBaseUrl('https://plantuml.com/')
21
- .setTokenUrl('https://plantuml.com/')
22
- .setClientId('your_client_id')
23
- .setClientSecret('your_client_secret')
24
- .setCallbackFunction('authCallback')
25
- .setPropertyStore(PropertiesService.getUserProperties());
26
- return service;
27
- }
28
-
29
- authCallback(request) {
30
- var service = getService();
31
- var authorized = service.handleCallback(request);
32
- if (authorized) {
33
- return HtmlService.createHtmlOutput('Authorized');
34
- } else {
35
- return HtmlService.createHtmlOutput('Access denied');
36
- }
37
- }
38
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/S3Uploader.gs DELETED
@@ -1,38 +0,0 @@
1
- class S3Uploader {
2
- constructor(accessKey, secretKey) {
3
- this.accessKey = accessKey;
4
- this.secretKey = secretKey;
5
- }
6
-
7
- uploadFile(file) {
8
- var s3 = getS3Service(this.accessKey, this.secretKey);
9
- var fileBlob = file.getBlob();
10
- var fileContent = fileBlob.getBytes();
11
- var fileMetadata = {
12
- 'Content-Type': file.getMimeType(),
13
- 'Content-Length': fileBlob.getBytes().length
14
- };
15
- s3.putObject('my-bucket', file.getName(), fileContent, fileMetadata);
16
- }
17
-
18
- getS3Service(accessKey, secretKey) {
19
- var service = OAuth2.createService('s3')
20
- .setAuthorizationBaseUrl('https://s3.amazonaws.com/')
21
- .setTokenUrl('https://s3.amazonaws.com/')
22
- .setClientId(accessKey)
23
- .setClientSecret(secretKey)
24
- .setCallbackFunction('authCallback')
25
- .setPropertyStore(PropertiesService.getUserProperties());
26
- return service;
27
- }
28
-
29
- authCallback(request) {
30
- var service = getService();
31
- var authorized = service.handleCallback(request);
32
- if (authorized) {
33
- return HtmlService.createHtmlOutput('Authorized');
34
- } else {
35
- return HtmlService.createHtmlOutput('Access denied');
36
- }
37
- }
38
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/SecretManager.gs DELETED
@@ -1,6 +0,0 @@
1
- class SecretManager {
2
- getSecret(secretName) {
3
- var scriptProperties = PropertiesService.getUserProperties();
4
- return scriptProperties.getProperty(secretName);
5
- }
6
- }
 
 
 
 
 
 
 
routers/googleappsscript34/SystemDocument.gs DELETED
@@ -1,12 +0,0 @@
1
- class SystemDocument {
2
- generateDocumentation() {
3
- var document = DocumentApp.createDocument('System Documentation');
4
- var body = document.getBody();
5
- body.appendParagraph('System Overview');
6
- body.appendParagraph('This system receives data from Line and saves images to Google Drive and Amazon S3.');
7
- body.appendParagraph('Flow Diagram:');
8
- var plantUML = new PlantUML();
9
- var diagramFile = plantUML.generateFlowDiagram();
10
- body.appendImage(diagramFile);
11
- }
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/appsscript.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "timeZone": "Asia/Tokyo",
3
- "dependencies": {
4
- "enabledAdvancedServices": [
5
- {
6
- "userSymbol": "Drive",
7
- "serviceId": "drive",
8
- "version": "v2"
9
- },
10
- {
11
- "userSymbol": "S3",
12
- "serviceId": "s3",
13
- "version": "v1"
14
- }
15
- ]
16
- }
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/prompt DELETED
@@ -1,10 +0,0 @@
1
- googleappsscript
2
- ラインの画像検索システム
3
-
4
- 1,lineからデータがくる
5
- 2,doPostで取得
6
- 3.typeがイメージの場合はドライブに保存
7
- 4,保存したデータをS3にアップロード
8
- 5.データはシークレットから取得
9
- 6,plantumlでフローの作成
10
- 7,システムドキュメントの作成
 
 
 
 
 
 
 
 
 
 
 
routers/googleappsscript34/prompt.txt DELETED
@@ -1,5 +0,0 @@
1
- seleniumで
2
-
3
- kinkaimasu.jpのサイト情報を取得して
4
-
5
- 金の情報を抜き出し、CSVに登録
 
 
 
 
 
 
routers/googleappsscript34/run.sh DELETED
@@ -1,8 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Install dependencies
4
- clasp dependencies enable drive v2
5
- clasp dependencies enable s3 v1
6
-
7
- # Run the code
8
- clasp run Code.gs
 
 
 
 
 
 
 
 
 
routers/postg/{gradio_app.py → DataBase.py} RENAMED
@@ -72,83 +72,83 @@ def delete_ride(ride_id: int):
72
  cur.close()
73
  conn.close()
74
 
75
- def crud_interface():
76
- with gr.Blocks() as interface:
77
- with gr.Row():
78
- rideable_type = gr.Textbox(label="Rideable Type")
79
- start_station_id = gr.Number(label="Start Station ID")
80
- start_station_name = gr.Textbox(label="Start Station Name")
81
- end_station_id = gr.Number(label="End Station ID")
82
- end_station_name = gr.Textbox(label="End Station Name")
83
- started_at = gr.Textbox(label="Started At")
84
- ended_at = gr.Textbox(label="Ended At")
85
- member_casual = gr.Textbox(label="Member Casual")
86
- ride_id = gr.Number(label="Ride ID (for update/delete)", value=-1, interactive=False)
87
-
88
- create_button = gr.Button("Create Ride")
89
- update_button = gr.Button("Update Ride")
90
- delete_button = gr.Button("Delete Ride")
91
- read_button = gr.Button("Read Rides")
92
- output = gr.Dataframe(headers=["Ride ID", "Rideable Type", "Start Station ID", "Start Station Name", "End Station ID", "End Station Name", "Started At", "Ended At", "Member Casual"])
93
-
94
- def create_ride_click(rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual):
95
- ride = Ride(
96
- rideable_type=rideable_type,
97
- start_station_id=start_station_id,
98
- start_station_name=start_station_name,
99
- end_station_id=end_station_id,
100
- end_station_name=end_station_name,
101
- started_at=started_at,
102
- ended_at=ended_at,
103
- member_casual=member_casual
104
- )
105
- create_ride(ride)
106
- return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
107
-
108
- def update_ride_click(ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual):
109
- ride = Ride(
110
- ride_id=int(ride_id),
111
- rideable_type=rideable_type,
112
- start_station_id=start_station_id,
113
- start_station_name=start_station_name,
114
- end_station_id=end_station_id,
115
- end_station_name=end_station_name,
116
- started_at=started_at,
117
- ended_at=ended_at,
118
- member_casual=member_casual
119
- )
120
- update_ride(ride)
121
- return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
122
-
123
- def delete_ride_click(ride_id):
124
- delete_ride(int(ride_id))
125
- return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
126
-
127
- def read_rides_click():
128
- return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
129
-
130
- def load_ride_details(evt: gr.SelectData):
131
- row_index = evt.index[0] if isinstance(evt.index, list) else evt.index
132
- rides = read_rides()
133
- selected_row = rides[row_index]
134
- ride_id = selected_row[0]
135
- ride = read_ride(ride_id)
136
- if ride:
137
- return ride[1], ride[2], ride[3], ride[4], ride[5], ride[6], ride[7], ride[8], ride[0]
138
- return "", 0, "", 0, "", "", "", "", -1
139
-
140
- create_button.click(fn=create_ride_click,
141
- inputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual],
142
- outputs=output)
143
- update_button.click(fn=update_ride_click,
144
- inputs=[ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual],
145
- outputs=output)
146
- delete_button.click(fn=delete_ride_click, inputs=ride_id, outputs=output)
147
- read_button.click(fn=read_rides_click, outputs=output)
148
-
149
- output.select(fn=load_ride_details, inputs=None, outputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual, ride_id])
150
-
151
- return interface
152
 
153
  #d1 = crud_interface()
154
  #d1.launch()
 
72
  cur.close()
73
  conn.close()
74
 
75
+ #def crud_interface():
76
+ with gr.Blocks() as gradio_interface:
77
+ with gr.Row():
78
+ rideable_type = gr.Textbox(label="Rideable Type")
79
+ start_station_id = gr.Number(label="Start Station ID")
80
+ start_station_name = gr.Textbox(label="Start Station Name")
81
+ end_station_id = gr.Number(label="End Station ID")
82
+ end_station_name = gr.Textbox(label="End Station Name")
83
+ started_at = gr.Textbox(label="Started At")
84
+ ended_at = gr.Textbox(label="Ended At")
85
+ member_casual = gr.Textbox(label="Member Casual")
86
+ ride_id = gr.Number(label="Ride ID (for update/delete)", value=-1, interactive=False)
87
+
88
+ create_button = gr.Button("Create Ride")
89
+ update_button = gr.Button("Update Ride")
90
+ delete_button = gr.Button("Delete Ride")
91
+ read_button = gr.Button("Read Rides")
92
+ output = gr.Dataframe(headers=["Ride ID", "Rideable Type", "Start Station ID", "Start Station Name", "End Station ID", "End Station Name", "Started At", "Ended At", "Member Casual"])
93
+
94
+ def create_ride_click(rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual):
95
+ ride = Ride(
96
+ rideable_type=rideable_type,
97
+ start_station_id=start_station_id,
98
+ start_station_name=start_station_name,
99
+ end_station_id=end_station_id,
100
+ end_station_name=end_station_name,
101
+ started_at=started_at,
102
+ ended_at=ended_at,
103
+ member_casual=member_casual
104
+ )
105
+ create_ride(ride)
106
+ return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
107
+
108
+ def update_ride_click(ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual):
109
+ ride = Ride(
110
+ ride_id=int(ride_id),
111
+ rideable_type=rideable_type,
112
+ start_station_id=start_station_id,
113
+ start_station_name=start_station_name,
114
+ end_station_id=end_station_id,
115
+ end_station_name=end_station_name,
116
+ started_at=started_at,
117
+ ended_at=ended_at,
118
+ member_casual=member_casual
119
+ )
120
+ update_ride(ride)
121
+ return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
122
+
123
+ def delete_ride_click(ride_id):
124
+ delete_ride(int(ride_id))
125
+ return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
126
+
127
+ def read_rides_click():
128
+ return [[r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]] for r in read_rides()]
129
+
130
+ def load_ride_details(evt: gr.SelectData):
131
+ row_index = evt.index[0] if isinstance(evt.index, list) else evt.index
132
+ rides = read_rides()
133
+ selected_row = rides[row_index]
134
+ ride_id = selected_row[0]
135
+ ride = read_ride(ride_id)
136
+ if ride:
137
+ return ride[1], ride[2], ride[3], ride[4], ride[5], ride[6], ride[7], ride[8], ride[0]
138
+ return "", 0, "", 0, "", "", "", "", -1
139
+
140
+ create_button.click(fn=create_ride_click,
141
+ inputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual],
142
+ outputs=output)
143
+ update_button.click(fn=update_ride_click,
144
+ inputs=[ride_id, rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual],
145
+ outputs=output)
146
+ delete_button.click(fn=delete_ride_click, inputs=ride_id, outputs=output)
147
+ read_button.click(fn=read_rides_click, outputs=output)
148
+
149
+ output.select(fn=load_ride_details, inputs=None, outputs=[rideable_type, start_station_id, start_station_name, end_station_id, end_station_name, started_at, ended_at, member_casual, ride_id])
150
+
151
+ #return interface
152
 
153
  #d1 = crud_interface()
154
  #d1.launch()