PanarinI commited on
Commit
1ac5fcd
·
1 Parent(s): 207901a

it's alive!

Browse files
Files changed (9) hide show
  1. README.md +0 -0
  2. TASKS.md +4 -2
  3. app.log +222 -0
  4. app/app.log +8 -0
  5. app/test.py +131 -111
  6. docs/architecture.md +71 -11
  7. docs/scheme.mmd +12 -0
  8. requirements +1 -1
  9. test_url.py +18 -74
README.md CHANGED
Binary files a/README.md and b/README.md differ
 
TASKS.md CHANGED
@@ -14,13 +14,15 @@
14
  [ ] рекламный видеоролик со мной - инструкция по созданию
15
  [ ] демонстрация - урок по плану
16
  [ ] определить клюбчевые УМК и учебники в госшколах
17
-
 
 
18
 
19
 
20
 
21
 
22
  ## in progress
23
-
24
  [ ] проверка различных основных учебников
25
 
26
  [ ] проверка Responses API - web_search, vision
 
14
  [ ] рекламный видеоролик со мной - инструкция по созданию
15
  [ ] демонстрация - урок по плану
16
  [ ] определить клюбчевые УМК и учебники в госшколах
17
+ [ ] детектор качества изображения
18
+ [ ] загрузка нескольких страниц учебника
19
+ [ ] интеграция настроек
20
 
21
 
22
 
23
 
24
  ## in progress
25
+ [ ] базовый MVP: загрузка > url > LLM1 > настройки > LLM2 > план урока и возможность скачать. Streamlit
26
  [ ] проверка различных основных учебников
27
 
28
  [ ] проверка Responses API - web_search, vision
app.log ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025-04-01 01:22:27,946 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
2
+ 2025-04-01 01:22:27,948 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
3
+ 2025-04-01 01:22:27,948 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
4
+ 2025-04-01 01:22:27,949 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
5
+ 2025-04-01 01:22:27,949 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
6
+ 2025-04-01 01:22:27,949 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
7
+ 2025-04-01 01:23:51,282 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
8
+ 2025-04-01 01:23:51,283 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
9
+ 2025-04-01 01:23:51,283 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
10
+ 2025-04-01 01:23:51,284 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
11
+ 2025-04-01 01:23:51,284 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
12
+ 2025-04-01 01:23:51,284 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
13
+ 2025-04-01 01:24:55,286 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
14
+ 2025-04-01 01:24:55,287 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
15
+ 2025-04-01 01:24:55,287 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
16
+ 2025-04-01 01:24:55,288 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
17
+ 2025-04-01 01:24:55,288 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
18
+ 2025-04-01 01:24:55,288 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
19
+ 2025-04-01 01:28:03,386 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
20
+ 2025-04-01 01:28:03,388 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
21
+ 2025-04-01 01:28:03,388 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
22
+ 2025-04-01 01:28:03,388 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
23
+ 2025-04-01 01:28:03,389 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
24
+ 2025-04-01 01:28:03,389 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
25
+ 2025-04-01 01:32:01,395 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
26
+ 2025-04-01 01:32:01,396 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
27
+ 2025-04-01 01:32:01,397 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
28
+ 2025-04-01 01:32:01,397 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
29
+ 2025-04-01 01:32:01,397 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
30
+ 2025-04-01 01:32:01,397 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
31
+ 2025-04-01 01:34:20,876 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
32
+ 2025-04-01 01:34:20,877 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
33
+ 2025-04-01 01:34:20,877 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
34
+ 2025-04-01 01:34:20,877 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
35
+ 2025-04-01 01:34:20,877 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
36
+ 2025-04-01 01:34:20,878 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
37
+ 2025-04-01 01:36:01,629 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
38
+ 2025-04-01 01:36:01,631 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
39
+ 2025-04-01 01:36:01,631 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
40
+ 2025-04-01 01:36:01,632 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
41
+ 2025-04-01 01:36:01,632 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
42
+ 2025-04-01 01:36:02,967 - __main__ - INFO - ������ OpenAI ������� ���������������
43
+ 2025-04-01 01:36:02,967 - __main__ - INFO - ������ ����������
44
+ 2025-04-01 01:37:21,799 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
45
+ 2025-04-01 01:37:21,811 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
46
+ 2025-04-01 01:37:21,812 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
47
+ 2025-04-01 01:37:21,813 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
48
+ 2025-04-01 01:37:21,813 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
49
+ 2025-04-01 01:37:23,150 - __main__ - INFO - ������ OpenAI ������� ���������������
50
+ 2025-04-01 01:37:23,150 - __main__ - INFO - ������ ����������
51
+ 2025-04-01 01:37:27,045 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
52
+ 2025-04-01 01:40:37,348 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
53
+ 2025-04-01 01:40:37,349 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
54
+ 2025-04-01 01:40:37,349 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
55
+ 2025-04-01 01:40:37,349 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
56
+ 2025-04-01 01:40:37,349 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
57
+ 2025-04-01 01:40:38,526 - __main__ - INFO - ������ OpenAI ������� ���������������
58
+ 2025-04-01 01:40:38,527 - __main__ - INFO - ������ ����������
59
+ 2025-04-01 01:40:45,110 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
60
+ 2025-04-01 01:40:45,111 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
61
+ 2025-04-01 01:40:45,112 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
62
+ 2025-04-01 01:40:45,112 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
63
+ 2025-04-01 01:40:45,112 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
64
+ 2025-04-01 01:40:46,332 - __main__ - INFO - ������ OpenAI ������� ���������������
65
+ 2025-04-01 01:40:46,332 - __main__ - INFO - ������ ����������
66
+ 2025-04-01 01:40:48,810 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
67
+ 2025-04-01 01:42:19,412 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
68
+ 2025-04-01 01:42:19,445 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
69
+ 2025-04-01 01:42:19,445 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
70
+ 2025-04-01 01:42:19,445 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
71
+ 2025-04-01 01:42:19,446 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
72
+ 2025-04-01 01:42:21,587 - __main__ - INFO - ������ OpenAI ������� ���������������
73
+ 2025-04-01 01:47:09,200 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
74
+ 2025-04-01 01:47:09,201 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
75
+ 2025-04-01 01:47:09,202 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
76
+ 2025-04-01 01:47:09,202 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
77
+ 2025-04-01 01:47:09,202 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
78
+ 2025-04-01 01:47:10,399 - __main__ - INFO - ������ OpenAI ������� ���������������
79
+ 2025-04-01 01:47:19,051 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
80
+ 2025-04-01 01:47:19,053 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
81
+ 2025-04-01 01:47:19,057 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
82
+ 2025-04-01 01:47:19,058 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
83
+ 2025-04-01 01:47:19,058 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
84
+ 2025-04-01 01:47:20,327 - __main__ - INFO - ������ OpenAI ������� ���������������
85
+ 2025-04-01 01:47:22,870 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
86
+ 2025-04-01 01:47:31,810 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
87
+ 2025-04-01 01:47:31,813 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
88
+ 2025-04-01 01:47:31,815 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
89
+ 2025-04-01 01:47:31,815 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
90
+ 2025-04-01 01:47:31,816 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
91
+ 2025-04-01 01:47:33,105 - __main__ - INFO - ������ OpenAI ������� ���������������
92
+ 2025-04-01 01:47:35,952 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
93
+ 2025-04-01 01:47:40,627 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
94
+ 2025-04-01 01:47:40,629 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
95
+ 2025-04-01 01:47:40,630 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
96
+ 2025-04-01 01:47:40,631 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
97
+ 2025-04-01 01:47:40,633 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
98
+ 2025-04-01 01:47:42,447 - __main__ - INFO - ������ OpenAI ������� ���������������
99
+ 2025-04-01 01:47:43,119 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
100
+ 2025-04-01 01:47:43,121 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
101
+ 2025-04-01 01:47:43,123 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
102
+ 2025-04-01 01:47:43,124 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
103
+ 2025-04-01 01:47:43,125 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
104
+ 2025-04-01 01:47:44,607 - __main__ - INFO - ������ OpenAI ������� ���������������
105
+ 2025-04-01 01:47:44,714 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
106
+ 2025-04-01 01:47:46,782 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
107
+ 2025-04-01 01:47:50,120 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
108
+ 2025-04-01 01:47:50,122 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
109
+ 2025-04-01 01:47:50,142 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
110
+ 2025-04-01 01:47:50,144 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
111
+ 2025-04-01 01:47:50,148 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
112
+ 2025-04-01 01:47:52,330 - __main__ - INFO - ������ OpenAI ������� ���������������
113
+ 2025-04-01 01:47:54,863 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
114
+ 2025-04-01 01:48:09,433 - httpx - INFO - HTTP Request: POST https://api.aitunnel.ru/v1/chat/completions "HTTP/1.1 200 OK"
115
+ 2025-04-01 01:48:09,453 - __main__ - INFO - ���� ����� ������� ������������
116
+ 2025-04-01 01:55:53,243 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
117
+ 2025-04-01 01:55:53,261 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
118
+ 2025-04-01 01:55:53,261 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
119
+ 2025-04-01 01:55:53,262 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
120
+ 2025-04-01 01:55:53,262 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
121
+ 2025-04-01 01:55:54,587 - __main__ - INFO - ������ OpenAI ������� ���������������
122
+ 2025-04-01 01:56:00,249 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
123
+ 2025-04-01 01:56:00,252 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
124
+ 2025-04-01 01:56:00,254 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
125
+ 2025-04-01 01:56:00,255 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
126
+ 2025-04-01 01:56:00,255 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
127
+ 2025-04-01 01:56:01,550 - __main__ - INFO - ������ OpenAI ������� ���������������
128
+ 2025-04-01 01:56:04,054 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
129
+ 2025-04-01 01:56:36,166 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
130
+ 2025-04-01 01:56:36,166 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
131
+ 2025-04-01 01:56:36,167 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
132
+ 2025-04-01 01:56:36,167 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
133
+ 2025-04-01 01:56:36,167 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
134
+ 2025-04-01 01:56:37,372 - __main__ - INFO - ������ OpenAI ������� ���������������
135
+ 2025-04-01 01:57:29,750 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
136
+ 2025-04-01 01:57:29,751 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
137
+ 2025-04-01 01:57:29,757 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
138
+ 2025-04-01 01:57:29,759 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
139
+ 2025-04-01 01:57:29,760 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
140
+ 2025-04-01 01:57:30,183 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
141
+ 2025-04-01 01:57:30,185 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
142
+ 2025-04-01 01:57:30,185 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
143
+ 2025-04-01 01:57:30,185 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
144
+ 2025-04-01 01:57:30,186 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
145
+ 2025-04-01 01:57:31,484 - __main__ - INFO - ������ OpenAI ������� ���������������
146
+ 2025-04-01 01:57:31,839 - __main__ - INFO - ������ OpenAI ������� ���������������
147
+ 2025-04-01 01:57:36,655 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
148
+ 2025-04-01 01:57:36,655 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
149
+ 2025-04-01 01:57:36,656 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
150
+ 2025-04-01 01:57:36,656 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
151
+ 2025-04-01 01:57:36,658 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
152
+ 2025-04-01 01:57:37,976 - __main__ - INFO - ������ OpenAI ������� ���������������
153
+ 2025-04-01 01:57:41,240 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
154
+ 2025-04-01 01:57:41,245 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
155
+ 2025-04-01 01:57:41,247 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
156
+ 2025-04-01 01:57:41,248 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
157
+ 2025-04-01 01:57:41,249 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
158
+ 2025-04-01 01:57:42,579 - __main__ - INFO - ������ OpenAI ������� ���������������
159
+ 2025-04-01 01:58:39,679 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
160
+ 2025-04-01 01:58:39,679 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
161
+ 2025-04-01 01:58:39,680 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
162
+ 2025-04-01 01:58:39,680 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
163
+ 2025-04-01 01:58:39,680 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
164
+ 2025-04-01 01:58:40,978 - __main__ - INFO - ������ OpenAI ������� ���������������
165
+ 2025-04-01 01:58:43,376 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
166
+ 2025-04-01 01:58:48,116 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
167
+ 2025-04-01 01:58:48,119 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
168
+ 2025-04-01 01:58:48,119 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
169
+ 2025-04-01 01:58:48,119 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
170
+ 2025-04-01 01:58:48,120 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
171
+ 2025-04-01 01:58:49,451 - __main__ - INFO - ������ OpenAI ������� ���������������
172
+ 2025-04-01 01:58:52,061 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
173
+ 2025-04-01 01:58:55,988 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
174
+ 2025-04-01 01:58:55,991 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
175
+ 2025-04-01 01:58:55,992 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
176
+ 2025-04-01 01:58:55,993 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
177
+ 2025-04-01 01:58:55,993 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
178
+ 2025-04-01 01:58:57,219 - __main__ - INFO - ������ OpenAI ������� ���������������
179
+ 2025-04-01 01:58:59,508 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
180
+ 2025-04-01 01:59:13,465 - httpx - INFO - HTTP Request: POST https://api.aitunnel.ru/v1/chat/completions "HTTP/1.1 200 OK"
181
+ 2025-04-01 01:59:13,479 - __main__ - INFO - ���� ����� ������� ������������
182
+ 2025-04-01 01:59:57,157 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
183
+ 2025-04-01 01:59:57,158 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
184
+ 2025-04-01 01:59:57,158 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
185
+ 2025-04-01 01:59:57,158 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
186
+ 2025-04-01 01:59:57,158 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
187
+ 2025-04-01 01:59:58,492 - __main__ - INFO - ������ OpenAI ������� ���������������
188
+ 2025-04-01 02:00:12,813 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
189
+ 2025-04-01 02:00:12,827 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
190
+ 2025-04-01 02:00:12,829 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
191
+ 2025-04-01 02:00:12,830 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
192
+ 2025-04-01 02:00:12,831 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
193
+ 2025-04-01 02:00:14,134 - __main__ - INFO - ������ OpenAI ������� ���������������
194
+ 2025-04-01 02:00:16,556 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
195
+ 2025-04-01 02:00:27,314 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
196
+ 2025-04-01 02:00:27,334 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
197
+ 2025-04-01 02:00:27,335 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
198
+ 2025-04-01 02:00:27,338 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
199
+ 2025-04-01 02:00:27,345 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
200
+ 2025-04-01 02:00:29,034 - __main__ - INFO - ������ OpenAI ������� ���������������
201
+ 2025-04-01 02:00:31,422 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
202
+ 2025-04-01 02:01:30,811 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
203
+ 2025-04-01 02:01:30,812 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
204
+ 2025-04-01 02:01:30,817 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
205
+ 2025-04-01 02:01:30,817 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
206
+ 2025-04-01 02:01:30,819 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
207
+ 2025-04-01 02:01:32,102 - __main__ - INFO - ������ OpenAI ������� ���������������
208
+ 2025-04-01 02:01:34,895 - __main__ - ERROR - ������ �������� �� catbox.moe: 412 Client Error: Precondition Failed for url: https://catbox.moe/user/api.php
209
+ 2025-04-01 02:06:36,816 - __main__ - ERROR - ������ ������������� OpenAI: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable
210
+ 2025-04-01 02:08:10,426 - __main__ - ERROR - ������ ������������� OpenAI: name 'API_KEY' is not defined
211
+ 2025-04-01 02:11:21,874 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
212
+ 2025-04-01 02:11:21,876 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
213
+ 2025-04-01 02:11:21,876 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
214
+ 2025-04-01 02:11:21,876 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
215
+ 2025-04-01 02:11:21,876 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
216
+ 2025-04-01 02:11:23,024 - __main__ - INFO - OpenAI ������ ���������������
217
+ 2025-04-01 02:11:32,676 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
218
+ 2025-04-01 02:11:32,676 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
219
+ 2025-04-01 02:11:32,677 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
220
+ 2025-04-01 02:11:32,677 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
221
+ 2025-04-01 02:11:32,683 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
222
+ 2025-04-01 02:11:34,242 - __main__ - INFO - OpenAI ������ ���������������
app/app.log ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ 2025-04-01 01:31:35,016 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 14
2
+ 2025-04-01 01:31:35,018 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 17
3
+ 2025-04-01 01:31:35,018 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 18
4
+ 2025-04-01 01:31:35,018 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 19
5
+ 2025-04-01 01:31:35,018 - dotenv.main - WARNING - python-dotenv could not parse statement starting at line 21
6
+ 2025-04-01 01:31:35,019 - __main__ - ERROR - API_KEY �� ������ � ���������� ���������
7
+ 2025-04-01 01:31:35,458 - __main__ - ERROR - ������ ������������� ������� OpenAI: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable
8
+ 2025-04-01 01:31:35,459 - __main__ - INFO - ������ ����������
app/test.py CHANGED
@@ -1,16 +1,25 @@
1
- import logging
2
  import os
3
- import base64
4
- import json
5
- import streamlit as st
6
- from openai import OpenAI
7
  from dotenv import load_dotenv
 
 
 
 
8
 
9
- # --- Конфигурация ---
10
- logging.basicConfig(level=logging.INFO)
 
 
 
 
 
 
11
  logger = logging.getLogger(__name__)
12
 
 
13
  load_dotenv()
 
14
  API_KEY = os.getenv("API_KEY")
15
  BASE_URL = os.getenv("BASE_URL")
16
  if not API_KEY:
@@ -21,120 +30,131 @@ if not BASE_URL:
21
 
22
  client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
23
 
 
 
24
 
25
- def encode_image(uploaded_file):
26
- """Оптимизированная конвертация в base64"""
27
- try:
28
- return base64.b64encode(uploaded_file.read()).decode('utf-8')
29
- except Exception as e:
30
- logger.error(f"Ошибка конвертации: {e}")
31
- return None
32
 
 
 
 
 
33
 
34
- def analyze_content(image_b64: str):
35
- """Единый оптимизированный запрос для анализа"""
36
- try:
37
- response = client.chat.completions.create(
38
- model="gpt-4o-mini",
39
- messages=[{
40
- "role": "user",
41
- "content": [
42
- {"type": "text", "text": (
43
- "Анализ страницы учебника. Ответь ТОЛЬКО в формате:\n"
44
- "{\n"
45
- " \"subject\": \"Предмет\",\n"
46
- " \"textbook\": \"Учебник\",\n"
47
- " \"topic\": \"Тема\",\n"
48
- " \"exercises\": [\"конкретные задания из текста\"],\n"
49
- " \"examples\": [\"конкретные примеры из текста\"]\n"
50
- "}"
51
- )},
52
- {"type": "image_url", "image_url": {
53
- "url": f"data:image/jpeg;base64,{image_b64}",
54
- "detail": "high"
55
- }}
56
- ]
57
- }],
58
- max_tokens=1500
59
- )
60
- return json.loads(response.choices[0].message.content)
61
- except Exception as e:
62
- logger.error(f"Ошибка анализа: {e}")
63
- return None
64
 
65
-
66
- def generate_lesson_plan(context: dict):
67
- """Генерация плана с привязкой к контексту"""
68
  try:
69
- prompt = f"""
70
- СОЗДАЙ ДЕТАЛЬНЫЙ ПЛАН УРОКА С ОПОРОЙ НА МАТЕРИАЛ УЧЕБНИКА.
71
- Обязательно включи:
72
- - Конкретные упражнения: {context.get('exercises', [])[:3]}
73
- - Примеры из учебника: {context.get('examples', [])[:2]}
74
- - Номера страниц и разделов
75
- - Пошаговые инструкции для учителя
76
-
77
- Параметры:
78
- - Предмет: {context['subject']}
79
- - Учебник: {context['textbook']}
80
- - Тема: {context['topic']}
81
- """
82
-
83
- response = client.chat.completions.create(
84
- model="gpt-4o-mini",
85
- messages=[{"role": "user", "content": prompt}],
86
- temperature=0.3,
87
- max_tokens=2000
88
  )
89
- return response.choices[0].message.content
 
90
  except Exception as e:
91
- logger.error(f"Ошибка генерации: {e}")
92
  return None
93
 
 
 
 
 
 
94
 
95
- # --- Интерфейс ---
96
- st.set_page_config(layout="wide")
97
- st.title("📘 Генератор уроков с привязкой к учебнику")
98
-
99
- if "context" not in st.session_state:
100
- st.session_state.context = {}
101
 
102
- # Левая панель
103
- with st.sidebar:
104
- st.header("Загрузка материалов")
105
 
106
- uploaded_file = st.file_uploader("Страница учебника", type=["jpg", "png", "jpeg"])
107
  if uploaded_file:
108
- with st.spinner("Анализ контента..."):
109
- if image_b64 := encode_image(uploaded_file):
110
- analysis = analyze_content(image_b64)
111
- if analysis:
112
- st.session_state.context.update(analysis)
113
- st.success("Контент проанализирован!")
114
- else:
115
- st.error("Ошибка анализа изображения")
116
-
117
- # Основная панель
118
- col1, col2 = st.columns([1, 3])
119
-
120
- with col1:
121
- if st.session_state.context:
122
- st.subheader("Обнаруженные элементы:")
123
- st.json(st.session_state.context)
124
-
125
- if st.button("Сгенерировать план урока", disabled=not st.session_state.context):
126
- with st.spinner("Создаем персонализированный план..."):
127
- plan = generate_lesson_plan(st.session_state.context)
128
- if plan:
129
- st.session_state.plan = plan
130
- st.rerun()
131
-
132
- with col2:
133
- if "plan" in st.session_state:
134
- st.markdown(st.session_state.plan)
135
- st.download_button(
136
- "Скачать план",
137
- data=st.session_state.plan,
138
- file_name="lesson_plan.md",
139
- mime="text/markdown"
140
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
+ import logging
3
+
 
 
4
  from dotenv import load_dotenv
5
+ import requests
6
+ from pydantic import BaseModel
7
+ from openai import OpenAI, APIError
8
+ import streamlit as st
9
 
10
+
11
+
12
+ # --- Настройка логирования ---
13
+ logging.basicConfig(
14
+ level=logging.INFO,
15
+ format='%(asctime)s - %(levelname)s - %(message)s',
16
+ handlers=[logging.StreamHandler()]
17
+ )
18
  logger = logging.getLogger(__name__)
19
 
20
+ # --- Получение ключей API из окружения ---
21
  load_dotenv()
22
+
23
  API_KEY = os.getenv("API_KEY")
24
  BASE_URL = os.getenv("BASE_URL")
25
  if not API_KEY:
 
30
 
31
  client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
32
 
33
+ # Настройки
34
+ st.set_page_config(page_title="Генератор планов уроков", layout="wide")
35
 
 
 
 
 
 
 
 
36
 
37
+ # Pydantic модель для структурированного вывода
38
+ class TextbookInfo(BaseModel):
39
+ subject: str = ""
40
+ textbook_name: str = ""
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ # Функция загрузки изображения на catbox.moe
44
+ def upload_to_catbox(file_bytes):
45
+ """Загружает файл на catbox.moe и возвращает прямую ссылку"""
46
  try:
47
+ response = requests.post(
48
+ "https://catbox.moe/user/api.php",
49
+ files={"fileToUpload": file_bytes},
50
+ data={"reqtype": "fileupload"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  )
52
+ response.raise_for_status()
53
+ return response.text.strip() # Пример: https://files.catbox.moe/abc123.png
54
  except Exception as e:
55
+ st.error(f"Ошибка загрузки: {e}")
56
  return None
57
 
58
+ # Инициализация состояний
59
+ if "textbook_data" not in st.session_state:
60
+ st.session_state.textbook_data = TextbookInfo()
61
+ if "image_url" not in st.session_state:
62
+ st.session_state.image_url = None
63
 
64
+ # Интерфейс
65
+ left_col, right_col = st.columns([2, 3])
 
 
 
 
66
 
67
+ with left_col:
68
+ st.header("Загрузка учебника")
69
+ uploaded_file = st.file_uploader("Выберите изображение страницы", type=["jpg", "png", "jpeg"])
70
 
 
71
  if uploaded_file:
72
+ # Загрузка изображения и получение URL через catbox.moe
73
+ image_bytes = uploaded_file.getvalue()
74
+ try:
75
+ image_url = upload_to_catbox(image_bytes)
76
+ if not image_url:
77
+ logger.error("Не удалось получить URL изображения после загрузки.")
78
+ except Exception as e:
79
+ logger.error(f"Ошибка при загрузке изображения: {e}")
80
+ st.error("Не удалось загрузить изображение. Попробуйте снова.")
81
+ if image_url:
82
+ st.session_state.image_url = image_url
83
+ st.success("Изображение загружено успешно!")
84
+
85
+ # Первый запрос к LLM для определения предмета и учебника
86
+ with st.spinner("Анализ изображения..."):
87
+ try:
88
+ completion = client.beta.chat.completions.parse(
89
+ model="gpt-4o-mini",
90
+ messages=[
91
+ {"role": "system",
92
+ "content": "Определи предмет и название учебника по изображению страницы. Если не уверен — оставь поля пустыми."},
93
+ {"role": "user", "content": [
94
+ {"type": "image_url", "image_url": {"url": image_url}},
95
+ {"type": "text", "text": "Что это за учебник? Определи предмет и точное название."}
96
+ ]}
97
+ ],
98
+ response_format=TextbookInfo
99
+ )
100
+ st.session_state.textbook_data = completion.choices[0].message.parsed
101
+ except Exception as e:
102
+ st.error(f"Ошибка анализа: {e}")
103
+ st.session_state.textbook_data = TextbookInfo()
104
+
105
+ else:
106
+ st.error("Не удалось загрузить изображение")
107
+
108
+ # Поля для редактирования
109
+ if st.session_state.image_url:
110
+ st.subheader("Данные учебника")
111
+ subject = st.text_input("Предмет", value=st.session_state.textbook_data.subject)
112
+ textbook_name = st.text_input("Название учебника", value=st.session_state.textbook_data.textbook_name)
113
+
114
+ # Обновление состояния при ручном вводе
115
+ st.session_state.textbook_data.subject = subject
116
+ st.session_state.textbook_data.textbook_name = textbook_name
117
+
118
+ # Настройки
119
+ num_students = st.slider("Количество учеников", 1, 40, 10)
120
+ generate_disabled = not (
121
+ st.session_state.textbook_data.subject.strip() and
122
+ st.session_state.textbook_data.textbook_name.strip()
123
+ )
124
+
125
+ if st.button("Создать план урока", disabled=generate_disabled):
126
+ if not st.session_state.textbook_data.subject or not st.session_state.textbook_data.textbook_name:
127
+ st.error("Пожалуйста, заполните все обязательные поля.")
128
+ else:
129
+ with st.spinner("Генерация плана..."):
130
+ try:
131
+ response = client.chat.completions.create(
132
+ model="gpt-4o-mini",
133
+ messages=[
134
+ {"role": "system",
135
+ "content": "Ты опытный учитель. Создай детальный план урока на русском языке."},
136
+ {"role": "user", "content": [
137
+ {"type": "image_url", "image_url": {"url": st.session_state.image_url}},
138
+ {"type": "text", "text": f"""
139
+ Создай план урока для:
140
+ - Предмет: {st.session_state.textbook_data.subject}
141
+ - Учебник: {st.session_state.textbook_data.textbook_name}
142
+ - Количество учеников: {num_students}
143
+
144
+ Используй материалы с загруженной страницы: укажи номера упражнений, примеры,
145
+ ключевые темы и методические рекомендации.
146
+ """}
147
+ ]}
148
+ ]
149
+ )
150
+ lesson_plan = response.choices[0].message.content
151
+ right_col.write(lesson_plan)
152
+ except Exception as e:
153
+ logger.error(f"Ошибка при генерации плана урока: {e}")
154
+ st.error("Не удалось создать план урока. Попробуйте снова.")
155
+
156
+
157
+ with right_col:
158
+ st.header("План урока")
159
+ if not st.session_state.textbook_data.subject or not st.session_state.textbook_data.textbook_name:
160
+ st.info("Загрузите изображение и укажите данные учебника")
docs/architecture.md CHANGED
@@ -1,19 +1,79 @@
1
- page picture / select coursebook and page +
2
- settings >
3
- LLM >
4
- Output
 
 
 
 
 
 
 
 
 
5
 
 
 
6
 
7
 
 
8
 
9
 
 
 
10
 
 
 
 
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
- API:
14
- file_search:
15
- Assistants API ->
16
- ProxyAPI (1500р/месяц)
17
- openai:
18
- VPN?
19
- Hosting: Google Colab - OK
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ мне нужно сделать простое приложение по генерации планов уроков на базе предоставленной фотографии страницы учебника.
2
+ Для интерфейса используем streamlit. Логика такая - экран делится не левую и правую части. В левой части область загрузки
3
+ фотографии страницы учебника + поля заполнения и настройки (они появляются после успешной загрузки).
4
+ При загрузке файла и получения его url, url первый раз передается в LLM (gpt-4o-mini) через chat.completions.
5
+ Промпт дает модели задание определить предмет (английский, математика и т.п.) и название учебника.
6
+ Я предлагаю использовать structured output для этого. Предмет и название учебника попадают в поля, которые появляются под областью загрузки (в области слева).
7
+ Если модель не смогла определить предмет и/или учебник - поля просто остаются пустыми и являются обязательнми для заполнения учителем.
8
+ Это первый шаг. Второй шаг - это настройки. Учитель определяет количество детей в классе от 1 до 40 (ползунок) и нажимает кнопку "создать план урока",
9
+ которая становится активна только после заполнения полей предмета и учебника. Ползунок количества детей изначально стоит на значении 10.
10
+ Эти данные (предмет, учебник, количество детей в классе) передаются на второй запрос к chat.completions вместе с url страницы учебника.
11
+ Этот второй запрос должен создать план урока по промпту. В промпте мы просим модель создать план урока на основании предоставленного изображения
12
+ страницы учебника и на основании переданных данных (предмет, учебник, количество детей в классе) План урока должен обязательно опираться на
13
+ предоставленный материал - где нужно указываются номера упражнений, примеры и так далее.
14
 
15
+ Модель gpt-4o-mini поддержкивает input image.
16
+ Длительное хранение загруженных изображений не требуется, поэтому решение tmpfiles.org подходит.
17
 
18
 
19
+ Structured Outputs через response_format с JSON Schema , так как:
20
 
21
 
22
+ from pydantic import BaseModel
23
+ from openai import OpenAI
24
 
25
+ class TextbookInfo(BaseModel):
26
+ subject: str # Предмет (например, "Английский язык")
27
+ textbook_name: str # Название учебника (например, "Spotlight 5")
28
 
29
+ client = OpenAI()
30
+ completion = client.beta.chat.completions.parse(
31
+ model="gpt-4o-mini-2024-07-18", # Убедитесь, что модель поддерживает Structured Outputs
32
+ messages=[
33
+ {"role": "system", "content": "Определи предмет и название учебника по изображению страницы. Если не уверен — оставь поля пустыми."},
34
+ {"role": "user", "content": [
35
+ {"type": "image_url", "image_url": {"url": uploaded_image_url}},
36
+ {"type": "text", "text": "Что это за учебник? Определи предмет и точное название."}
37
+ ]}
38
+ ],
39
+ response_format=TextbookInfo # Автоматически генерирует JSON Schema
40
+ )
41
+ textbook_data = completion.choices[0].message.parsed
42
 
43
+ Image input:
44
+
45
+ Analyze the content of an image
46
+
47
+ response = client.chat.completions.create(
48
+ model="gpt-4o-mini",
49
+ messages=[{
50
+ "role": "user",
51
+ "content": [
52
+ {"type": "text", "text": "What's in this image?"},
53
+ {
54
+ "type": "image_url",
55
+ "image_url": {
56
+ "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
57
+ },
58
+ },
59
+ ],
60
+ }],
61
+ )
62
+
63
+ print(response.choices[0].message.content)
64
+
65
+
66
+ Вот так мы получаем url:
67
+
68
+ def upload_image(image_bytes):
69
+ """Загрузка изображения"""
70
+ try:
71
+ response = requests.post(
72
+ "https://tmpfiles.org/api/v1/upload",
73
+ files={"file": image_bytes},
74
+ timeout=10
75
+ )
76
+ return response.json()["url"].replace("tmpfiles.org/", "tmpfiles.org/dl/")
77
+ except Exception as e:
78
+ st.error(f"Ошибка загрузки: {e}")
79
+ return None
docs/scheme.mmd ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ graph TD
2
+ A[Пользователь загружает изображение] --> B[Загрузка на Catbox.moe]
3
+ B --> C[Запрос к GPT-4o-mini для анализа]
4
+ C --> D{Определены subject/textbook?}
5
+ D -->|Да| E[Автозаполнение полей]
6
+ D -->|Нет| F[Ручной ввод]
7
+ E --> G[Настройки урока]
8
+ F --> G
9
+ G --> H[Генерация промпта]
10
+ H --> I[Запрос к GPT-4o-mini]
11
+ I --> J[Отображение плана урока]
12
+ J --> K[Скачивание DOCX]
requirements CHANGED
@@ -2,7 +2,7 @@ streamlit
2
  python-dotenv
3
  python-docx
4
  openai
5
- boto3
6
 
7
 
8
 
 
2
  python-dotenv
3
  python-docx
4
  openai
5
+
6
 
7
 
8
 
test_url.py CHANGED
@@ -1,78 +1,22 @@
1
- import boto3
2
- from botocore.exceptions import ClientError
3
 
4
- # Конфигурация (замените своими значениями)
5
- CONFIG = {
6
- "endpoint": "https://s3.timeweb.cloud", # или https://s3.twcstorage.ru
7
- "bucket": "47ebf6c8-b07131f2-a7c5-45b2-9db0-9b0a86ad3cca", # ваш bucket ID
8
- "access_key": "SCJC187UUO758WCR6BGV", # ваш ключ (начинается на SCJ)
9
- "secret_key": "Rd9LmpU1F2KErPA7aEQvDwDDIzQ8FD8YzymiBQEt", # длинная строка из TimeWeb S3 API
10
- "file_path": "Materials/small.txt" # путь к тестовому файлу
11
- }
12
-
13
-
14
- def test_upload():
15
- """Тест загрузки файла с максимально простой конфигурацией"""
16
  try:
17
- # 1. Инициализация клиента
18
- s3 = boto3.client(
19
- 's3',
20
- endpoint_url=CONFIG['endpoint'],
21
- aws_access_key_id=CONFIG['access_key'],
22
- aws_secret_access_key=CONFIG['secret_key'],
23
- region_name='ru-1',
24
- config=boto3.session.Config(
25
- signature_version='s3v4',
26
- s3={'addressing_style': 'path'}
27
  )
28
- )
29
-
30
- # 2. Проверка доступа к бакету
31
- print("\n1. Проверка доступа к бакету...")
32
- s3.head_bucket(Bucket=CONFIG['bucket'])
33
- print(f"✅ Бакет '{CONFIG['bucket']}' доступен")
34
-
35
- # 3. Чтение файла
36
- print("\n2. Чтение файла...")
37
- with open(CONFIG['file_path'], 'rb') as f:
38
- file_data = f.read()
39
- print(f"✅ Файл прочитан ({len(file_data)} байт)")
40
-
41
- # 4. Загрузка файла
42
- print("\n3. Загрузка файла...")
43
- # Вместо put_object используем upload_file
44
- s3.upload_file(
45
- CONFIG['file_path'],
46
- CONFIG['bucket'],
47
- "test_upload.png",
48
- ExtraArgs={
49
- 'ACL': 'public-read',
50
- 'ContentType': 'image/png'
51
- }
52
- )
53
- print("✅ Файл успешно загружен")
54
-
55
- # 5. Проверка доступности
56
- print("\n4. Проверка доступности...")
57
- url = f"{CONFIG['endpoint']}/{CONFIG['bucket']}/test_upload.png"
58
- print(f"URL файла: {url}")
59
-
60
- # Проверка через head_object
61
- response = s3.head_object(Bucket=CONFIG['bucket'], Key="test_upload.png")
62
- print(f"Статус: {response['ResponseMetadata']['HTTPStatusCode']}")
63
- print(f"Размер: {response['ContentLength']} байт")
64
-
65
- except ClientError as e:
66
- print("\n❌ Критическая ошибка:")
67
- print(f"Тип: {type(e).__name__}")
68
- print(f"Код: {e.response['Error']['Code']}")
69
- print(f"Сообщение: {e.response['Error']['Message']}")
70
- print(f"Детали: {e.response}")
71
-
72
  except Exception as e:
73
- print(f"\nНеожиданная ошибка: {str(e)}")
74
-
75
-
76
- if __name__ == "__main__":
77
- print("=== Тест загрузки в TimeWeb S3 ===")
78
- test_upload()
 
 
 
1
+ import requests
 
2
 
3
+ def upload_to_catbox(file_path):
4
+ """Загружает файл на catbox.moe и возвращает прямую ссылку"""
 
 
 
 
 
 
 
 
 
 
5
  try:
6
+ with open(file_path, "rb") as f:
7
+ response = requests.post(
8
+ "https://catbox.moe/user/api.php",
9
+ files={"fileToUpload": f},
10
+ data={"reqtype": "fileupload"}
 
 
 
 
 
11
  )
12
+ response.raise_for_status()
13
+ return response.text.strip() # Пример: https://files.catbox.moe/abc123.png
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  except Exception as e:
15
+ print(f"❌ Ошибка: {e}")
16
+ return None
17
+
18
+ url = upload_to_catbox("Materials/test.png")
19
+ if url:
20
+ print(f"✅ Прямая ссылка на файл: {url}")
21
+ else:
22
+ print("Не удалось загрузить файл")