Oscarli commited on
Commit
a7829b6
ยท
verified ยท
1 Parent(s): 22644d7

Upload 8 files

Browse files
README.md CHANGED
@@ -4,13 +4,14 @@ emoji: ๐Ÿš€
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: docker
7
- sdk_version: "3.10"
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
- # ๐Ÿš€ CareerForge AI - AI-Powered Career Development Platform
12
 
13
- > A comprehensive career development tool fully driven by AI to help you optimize your resume, prepare for interviews, plan your learning path, and more.
 
 
14
 
15
  <div align="center">
16
 
@@ -18,221 +19,153 @@ pinned: false
18
  ![AI](https://img.shields.io/badge/AI-DeepSeek-blue.svg)
19
  ![License](https://img.shields.io/badge/license-MIT-green.svg)
20
 
21
- [Quick Start](#quick-start) โ€ข [Features](#features) โ€ข [User Guide](./INSTRUCTIONS.md)
22
-
23
  </div>
24
 
25
  ---
26
 
27
- ## โœจ Features
28
 
29
- This is a **purely frontend, zero-backend** AI application with 6 core features:
 
30
 
31
- ### ๐ŸŽฏ 1. Smart Resume
32
- Based on the job description, AI automatically generates an optimized resume and a matching analysis.
33
 
34
- ### ๐Ÿ’ผ 2. Interview Coach
35
- Generates interview questions, key points to assess, and answering strategies for a specific position.
36
 
37
- ### ๐Ÿ“š 3. Learning Path
38
- Based on your current skills and target position, AI plans a personalized learning path.
39
 
40
- ### โœ‰๏ธ 4. Cover Letter
41
- AI writes a professional, personalized cover letter.
42
 
43
- ### ๐Ÿ’ผ 5. LinkedIn Optimizer
44
- Optimizes your LinkedIn headline, summary, and personal brand.
45
-
46
- ### ๐Ÿ’ฐ 6. Salary Intelligence
47
- Analyzes market salaries and provides negotiation strategies.
48
 
49
  ---
50
 
51
- ## ๐Ÿš€ Quick Start
52
-
53
- ### Step 1: Get API Key
54
 
55
- 1. Visit [DeepSeek Official Website](https://platform.deepseek.com)
56
- 2. Register and log in
57
- 3. Go to the "API Keys" page and create a new key
58
- 4. Copy the API Key
59
- 5. Top up your account (ยฅ10-20 recommended)
60
 
61
- ### Step 2: Open the Application
 
62
 
63
- Double-click the `index.html` file to open the application in your browser.
 
64
 
65
- ### Step 3: Configure API
 
66
 
67
- 1. Find the "๐Ÿ”‘ DeepSeek API Key" input box at the top of the page
68
- 2. Paste your API Key
69
- 3. A โœ… indicates successful configuration
70
-
71
- ### Step 4: Start Using
72
-
73
- Select any feature tab, fill in the relevant information, and click the generate button!
74
 
75
  ---
76
 
77
- ## ๐Ÿ“‹ File Structure
78
 
79
- ```
80
- CareerForge-AI/
81
- โ”œโ”€โ”€ index.html # Main application (single-file app)
82
- โ”œโ”€โ”€ INSTRUCTIONS.md # Detailed user guide
83
- โ””โ”€โ”€ README.md # This file
84
- ```
85
-
86
- ---
87
 
88
- ## ๐Ÿ’ฐ Cost
 
 
 
89
 
90
- - **API Cost**: Approx. ยฅ0.005-0.02 / generation
91
- - **Top-up Suggestion**: ยฅ10 can be used for hundreds of generations
92
- - **Total Cost**: Extremely low, suitable for personal use
 
93
 
94
  ---
95
 
96
- ## ๐ŸŽฏ Use Cases
97
 
98
- ### Job Seekers
99
- - Customize resumes for different positions
100
- - Prepare for interview questions and answers
101
- - Understand market salary trends
102
 
103
- ### Career Planning
104
- - Assess skill gaps
105
- - Create a learning plan
106
- - Plan your career development path
107
 
108
- ### Personal Branding
109
- - Optimize your LinkedIn profile
110
- - Write professional cover letters
111
- - Enhance your personal brand influence
112
 
113
- ---
114
-
115
- ## ๐Ÿ” Privacy & Security
116
-
117
- - โœ… API Key is saved only in your browser's local storage
118
- - โœ… Not uploaded to any third-party servers
119
- - โœ… All requests are sent directly to DeepSeek
120
- - โœ… Fully open-source, code is auditable
121
 
122
  ---
123
 
124
- ## ๐Ÿ› ๏ธ Technical Features
125
 
126
- - **Pure Frontend Application** - No backend server required
127
- - **Single-File Application** - One HTML file contains all features
128
- - **AI-Driven** - All 6 features use DeepSeek AI
129
- - **Responsive Design** - Supports desktop and mobile
130
- - **Local Storage** - API Key is saved automatically
131
 
132
  ---
133
 
134
- ## ๐Ÿ“– Detailed Documentation
135
 
136
- Check out [INSTRUCTIONS.md](./INSTRUCTIONS.md) to learn about:
137
- - Detailed usage of each feature
138
- - Troubleshooting guide
139
- - Best practice recommendations
140
- - Advanced usage tips
141
 
142
  ---
143
 
144
- ## ๐ŸŽ“ Usage Tips
145
-
146
- ### Writing High-Quality Input
147
 
148
- **Resume Optimization:**
149
- - Provide the complete job description
150
- - Include specific technical requirements
151
- - Explain the company background information
152
 
153
- **Interview Preparation:**
154
- - List all relevant skills
155
- - Include both soft and hard skills
156
- - Specify the job level
157
-
158
- **Learning Path:**
159
- - List your current skills in detail
160
- - Specify your skill proficiency
161
- - Clearly define your learning goals
162
-
163
- ---
164
-
165
- ## โ“ FAQ
166
-
167
- ### Q: How is the API Key saved?
168
- A: It is saved in your browser's localStorage, only locally, and will not be uploaded.
169
-
170
- ### Q: How much does it cost?
171
- A: Each generation costs about ยฅ0.005-0.02. A ยฅ10 top-up will last a long time.
172
-
173
- ### Q: Is an internet connection required?
174
- A: Yes, an internet connection is needed to call the DeepSeek API.
175
-
176
- ### Q: Does it support other languages?
177
- A: It currently supports both Chinese and English input/output.
178
-
179
- ### Q: Is my data secure?
180
- A: Very secure. All data is transmitted only between your browser and DeepSeek.
181
-
182
- ---
183
-
184
- ## ๐Ÿ”ง Troubleshooting
185
-
186
- ### API Key Error
187
- 1. Check if the API Key is copied completely
188
- 2. Confirm it has been activated in the DeepSeek console
189
- 3. Check if your account balance is sufficient
190
-
191
- ### Generation Failed
192
- 1. Check your internet connection
193
- 2. Check the browser console for error messages (F12)
194
- 3. Try again later
195
-
196
- ### Content Formatting Issues
197
- 1. Refresh the page and regenerate
198
- 2. Simplify the input content
199
- 3. Manually adjust the format
200
-
201
- ---
202
 
203
- ## ๐Ÿš€ Version History
 
204
 
205
- ### v2.0 (Current Version)
206
- - โœ… All 6 features are integrated with AI
207
- - โœ… Simplified to DeepSeek only
208
- - โœ… Optimized Prompt templates
209
- - โœ… Improved error handling
210
- - โœ… Enhanced Chinese support
211
 
212
- ### v1.0
213
- - Initial version
214
- - Only the resume feature used AI
215
 
216
  ---
217
 
218
- ## ๐Ÿ“ž Get Help
219
 
220
- - **DeepSeek Documentation**: [https://platform.deepseek.com/docs](https://platform.deepseek.com/docs)
221
- - **DeepSeek Console**: [https://platform.deepseek.com/usage](https://platform.deepseek.com/usage)
 
 
 
222
 
223
  ---
224
 
225
- ## ๐Ÿ“„ License
226
 
227
- This project is licensed under the MIT License - see the LICENSE file for details.
228
 
229
  ---
230
 
231
- ## ๐ŸŽ‰ Get Started
232
 
233
- Now open `index.html`, configure your API Key, and start using AI to boost your career development!
234
 
235
- **Wishing you success in your job search and a prosperous career!** ๐Ÿš€โœจ
236
 
237
  ---
238
 
 
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: docker
 
7
  app_file: app.py
8
  pinned: false
9
+ license: mit
10
  ---
 
11
 
12
+ # ๐Ÿš€ CareerForge AI - AI้ฉฑๅŠจ็š„่Œไธšๅ‘ๅฑ•ๅนณๅฐ
13
+
14
+ > ไธ€ไธชๅฎŒๅ…จ็”ฑ AI ้ฉฑๅŠจ็š„็ปผๅˆๆ€ง่Œไธšๅ‘ๅฑ•ๅทฅๅ…ท๏ผŒๅธฎๅŠฉๆ‚จไผ˜ๅŒ–็ฎ€ๅކใ€ๅ‡†ๅค‡้ข่ฏ•ใ€่ง„ๅˆ’ๅญฆไน ่ทฏๅพ„็ญ‰ใ€‚
15
 
16
  <div align="center">
17
 
 
19
  ![AI](https://img.shields.io/badge/AI-DeepSeek-blue.svg)
20
  ![License](https://img.shields.io/badge/license-MIT-green.svg)
21
 
 
 
22
  </div>
23
 
24
  ---
25
 
26
+ ## โœจ ๅŠŸ่ƒฝ็‰น็‚น
27
 
28
+ ### ๐ŸŽฏ 1. Smart Resume๏ผˆๆ™บ่ƒฝ็ฎ€ๅކไผ˜ๅŒ–๏ผ‰
29
+ ๆ นๆฎ่Œไฝๆ่ฟฐ๏ผŒAI ่‡ชๅŠจ็”Ÿๆˆไผ˜ๅŒ–็š„็ฎ€ๅކๅ’ŒๅŒน้…ๅบฆๅˆ†ๆž
30
 
31
+ ### ๐Ÿ’ผ 2. Interview Coach๏ผˆAI ้ข่ฏ•ๆ•™็ปƒ๏ผ‰
32
+ ็”Ÿๆˆ้’ˆๅฏน็‰นๅฎš่Œไฝ็š„้ข่ฏ•้—ฎ้ข˜ใ€่€ƒๅฏŸ็‚นๅ’Œๅ›ž็ญ”็ญ–็•ฅ
33
 
34
+ ### ๐Ÿ“š 3. Learning Path๏ผˆๅญฆไน ่ทฏๅพ„่ง„ๅˆ’๏ผ‰
35
+ ๆ นๆฎๅฝ“ๅ‰ๆŠ€่ƒฝๅ’Œ็›ฎๆ ‡่Œไฝ๏ผŒAI ่ง„ๅˆ’ไธชๆ€งๅŒ–ๅญฆไน ่ทฏๅพ„
36
 
37
+ ### โœ‰๏ธ 4. Cover Letter๏ผˆๆฑ‚่Œไฟก็”Ÿๆˆ๏ผ‰
38
+ AI ๆ’ฐๅ†™ไธ“ไธšใ€ไธชๆ€งๅŒ–็š„ๆฑ‚่Œไฟก
39
 
40
+ ### ๐Ÿ’ผ 5. LinkedIn Optimizer๏ผˆ้ข†่‹ฑไผ˜ๅŒ–๏ผ‰
41
+ ไผ˜ๅŒ–ๆ‚จ็š„ LinkedIn ๆ ‡้ข˜ใ€็ฎ€ไป‹ๅ’Œไธชไบบๅ“็‰Œ
42
 
43
+ ### ๐Ÿ’ฐ 6. Salary Intelligence๏ผˆ่–ช่ต„ๅˆ†ๆž๏ผ‰
44
+ ๅˆ†ๆžๅธ‚ๅœบ่–ช่ต„ๅนถๆไพ›่ฐˆๅˆค็ญ–็•ฅ
 
 
 
45
 
46
  ---
47
 
48
+ ## ๐Ÿš€ ไฝฟ็”จๆ–นๆณ•
 
 
49
 
50
+ ### ็ฌฌไธ€ๆญฅ๏ผšๆ‰“ๅผ€ๅบ”็”จ
51
+ ็‚นๅ‡ปไธŠๆ–น็š„ใ€ŒAppใ€ๆ ‡็ญพๅณๅฏไฝฟ็”จ
 
 
 
52
 
53
+ ### ็ฌฌไบŒๆญฅ๏ผš้€‰ๆ‹ฉๅŠŸ่ƒฝ
54
+ ้€‰ๆ‹ฉๆ‚จ้œ€่ฆ็š„ๅŠŸ่ƒฝๆ ‡็ญพ๏ผˆ็ฎ€ๅކใ€้ข่ฏ•ใ€ๅญฆไน ่ทฏๅพ„็ญ‰๏ผ‰
55
 
56
+ ### ็ฌฌไธ‰ๆญฅ๏ผšๅกซๅ†™ไฟกๆฏ
57
+ ๆ นๆฎๆ็คบๅกซๅ†™็›ธๅ…ณไฟกๆฏ๏ผˆ่ถŠ่ฏฆ็ป†่ถŠๅฅฝ๏ผ‰
58
 
59
+ ### ็ฌฌๅ››ๆญฅ๏ผš็”Ÿๆˆๅ†…ๅฎน
60
+ ็‚นๅ‡ป็”ŸๆˆๆŒ‰้’ฎ๏ผŒ็ญ‰ๅพ… AI ไธบๆ‚จๅˆ›ๅปบๅ†…ๅฎน๏ผˆ้€šๅธธ้œ€่ฆ 10-30 ็ง’๏ผ‰
61
 
62
+ ### ็ฌฌไบ”ๆญฅ๏ผšไฝฟ็”จ็ป“ๆžœ
63
+ - ๅคๅˆถ็”Ÿๆˆ็š„ๅ†…ๅฎน
64
+ - ๅฏผๅ‡บไธบ PDF๏ผˆ็ฎ€ๅކๅŠŸ่ƒฝ๏ผ‰
65
+ - ๆ นๆฎๅปบ่ฎฎ่ฟ›่กŒไผ˜ๅŒ–
 
 
 
66
 
67
  ---
68
 
69
+ ## ๐ŸŽฏ ไฝฟ็”จๅœบๆ™ฏ
70
 
71
+ ### ๆฑ‚่Œ่€…
72
+ - ้’ˆๅฏนไธๅŒ่Œไฝๅฎšๅˆถ็ฎ€ๅކ
73
+ - ๅ‡†ๅค‡้ข่ฏ•้—ฎ้ข˜ๅ’Œ็ญ”ๆกˆ
74
+ - ไบ†่งฃๅธ‚ๅœบ่–ช่ต„่กŒๆƒ…
 
 
 
 
75
 
76
+ ### ่Œไธš่ง„ๅˆ’
77
+ - ่ฏ„ไผฐๆŠ€่ƒฝๅทฎ่ท
78
+ - ๅˆถๅฎšๅญฆไน ่ฎกๅˆ’
79
+ - ่ง„ๅˆ’่Œไธšๅ‘ๅฑ•่ทฏๅพ„
80
 
81
+ ### ่Œไธšๅ“็‰Œ
82
+ - ไผ˜ๅŒ– LinkedIn ่ต„ๆ–™
83
+ - ๆ’ฐๅ†™ไธ“ไธšๆฑ‚่Œไฟก
84
+ - ๆๅ‡ไธชไบบๅ“็‰Œๅฝฑๅ“ๅŠ›
85
 
86
  ---
87
 
88
+ ## ๐Ÿ’ก ไฝฟ็”จๆŠ€ๅทง
89
 
90
+ ### ็ผ–ๅ†™้ซ˜่ดจ้‡่พ“ๅ…ฅ
 
 
 
91
 
92
+ **็ฎ€ๅކไผ˜ๅŒ–๏ผš**
93
+ - ๆไพ›ๅฎŒๆ•ด็š„่Œไฝๆ่ฟฐ
94
+ - ๅŒ…ๅซๅ…ทไฝ“็š„ๆŠ€ๆœฏ่ฆๆฑ‚
95
+ - ่ฏดๆ˜Žๅ…ฌๅธ่ƒŒๆ™ฏไฟกๆฏ
96
 
97
+ **้ข่ฏ•ๅ‡†ๅค‡๏ผš**
98
+ - ๅˆ—ๅ‡บๆ‰€ๆœ‰็›ธๅ…ณๆŠ€่ƒฝ
99
+ - ๅŒ…ๅซ่ฝฏๆŠ€่ƒฝๅ’Œ็กฌๆŠ€่ƒฝ
100
+ - ๆ˜Ž็กฎ่Œไฝ็บงๅˆซ
101
 
102
+ **ๅญฆไน ่ทฏๅพ„๏ผš**
103
+ - ่ฏฆ็ป†ๅˆ—ๅ‡บๅฝ“ๅ‰ๆŠ€่ƒฝ
104
+ - ่ฏดๆ˜ŽๆŠ€่ƒฝ็†Ÿ็ปƒ็จ‹ๅบฆ
105
+ - ๆ˜Ž็กฎๅญฆไน ็›ฎๆ ‡
 
 
 
 
106
 
107
  ---
108
 
109
+ ## ๐Ÿ” ้š็งไธŽๅฎ‰ๅ…จ
110
 
111
+ - โœ… ๆ— ้œ€ๆณจๅ†Œๆˆ–็™ปๅฝ•
112
+ - โœ… ไธไฟๅญ˜ไปปไฝ•ไธชไบบๆ•ฐๆฎ
113
+ - โœ… ๆ‰€ๆœ‰ๅ†…ๅฎนไป…็”จไบŽ็”Ÿๆˆ๏ผŒๅณๆ—ถๅˆ ้™ค
114
+ - โœ… API Key ๅฎ‰ๅ…จๅญ˜ๅ‚จๅœจๆœๅŠกๅ™จ็ซฏ
115
+ - โœ… ๅฎŒๅ…จๅผ€ๆบ๏ผŒไปฃ็ ๅฏๅฎกๆŸฅ
116
 
117
  ---
118
 
119
+ ## ๐Ÿ› ๏ธ ๆŠ€ๆœฏ็‰น็‚น
120
 
121
+ - **AI ้ฉฑๅŠจ** - ๆ‰€ๆœ‰ 6 ไธชๅŠŸ่ƒฝ้ƒฝไฝฟ็”จ DeepSeek AI
122
+ - **ๅ“ๅบ”ๅผ่ฎพ่ฎก** - ๆ”ฏๆŒๆกŒ้ขๅ’Œ็งปๅŠจ็ซฏ
123
+ - **ๅฟซ้€Ÿ็”Ÿๆˆ** - ้€šๅธธ 10-30 ็ง’ๅฎŒๆˆ
124
+ - **้ซ˜่ดจ้‡่พ“ๅ‡บ** - ไธ“ไธš็บง AI ๆจกๅž‹
125
+ - **ๅฎŒๅ…จๅ…่ดน** - ๆ— ้œ€ไป˜่ดนๆˆ–่ฎข้˜…
126
 
127
  ---
128
 
129
+ ## โ“ ๅธธ่ง้—ฎ้ข˜
 
 
130
 
131
+ ### Q: ๆ˜ฏๅฆ้œ€่ฆๆณจๅ†Œ๏ผŸ
132
+ A: ไธ้œ€่ฆ๏ผŒๆ‰“ๅผ€ๅณ็”จ๏ผŒๆ— ้œ€ๆณจๅ†Œๆˆ–็™ปๅฝ•ใ€‚
 
 
133
 
134
+ ### Q: ๆ•ฐๆฎไผš่ขซไฟๅญ˜ๅ—๏ผŸ
135
+ A: ไธไผš๏ผŒๆ‰€ๆœ‰ๆ•ฐๆฎไป…็”จไบŽ็”Ÿๆˆ๏ผŒไธไผšไฟๅญ˜ๆˆ–ๅˆ†ไบซใ€‚
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
 
137
+ ### Q: ็”Ÿๆˆ้œ€่ฆๅคš้•ฟๆ—ถ้—ด๏ผŸ
138
+ A: ้€šๅธธ 10-30 ็ง’๏ผŒๅคๆ‚็š„่ฏทๆฑ‚ๅฏ่ƒฝ้œ€่ฆๆ›ด้•ฟๆ—ถ้—ดใ€‚
139
 
140
+ ### Q: ็”Ÿๆˆๅคฑ่ดฅๆ€ŽไนˆๅŠž๏ผŸ
141
+ A: ๅˆทๆ–ฐ้กต้ข้‡่ฏ•๏ผŒๆˆ–็ฎ€ๅŒ–่พ“ๅ…ฅๅ†…ๅฎนใ€‚
 
 
 
 
142
 
143
+ ### Q: ๆ”ฏๆŒไป€ไนˆ่ฏญ่จ€๏ผŸ
144
+ A: ็›ฎๅ‰ไธป่ฆๆ”ฏๆŒไธญๆ–‡ๅ’Œ่‹ฑๆ–‡่พ“ๅ…ฅ่พ“ๅ‡บใ€‚
 
145
 
146
  ---
147
 
148
+ ## ๐ŸŽ“ ๆœ€ไฝณๅฎž่ทต
149
 
150
+ 1. **ๆไพ›่ฏฆ็ป†ไฟกๆฏ** - ่พ“ๅ…ฅ่ถŠ่ฏฆ็ป†๏ผŒ็”Ÿๆˆ่ดจ้‡่ถŠ้ซ˜
151
+ 2. **ๅคšๆฌกๅฐ่ฏ•** - ๅฏไปฅๅคš็”Ÿๆˆๅ‡ ๆฌก๏ผŒ้€‰ๆ‹ฉๆœ€ๅฅฝ็š„็ป“ๆžœ
152
+ 3. **ไบบๅทฅไผ˜ๅŒ–** - AI ็”Ÿๆˆๆ˜ฏๅŸบ็ก€๏ผŒๅปบ่ฎฎๆ นๆฎๅฎž้™…ๆƒ…ๅ†ต่ฐƒๆ•ด
153
+ 4. **ไฟๅญ˜็ป“ๆžœ** - ๅŠๆ—ถไฟๅญ˜ๆปกๆ„็š„็ป“ๆžœ๏ผŒ้ฟๅ…ไธขๅคฑ
154
+ 5. **็ป„ๅˆไฝฟ็”จ** - ็ป“ๅˆๅคšไธชๅŠŸ่ƒฝ๏ผŒๆ‰“้€ ๅฎŒๆ•ด็š„ๆฑ‚่Œๆๆ–™
155
 
156
  ---
157
 
158
+ ## ๐Ÿ“„ ่ฎธๅฏ่ฏ
159
 
160
+ ๆœฌ้กน็›ฎ้‡‡็”จ MIT ่ฎธๅฏ่ฏ
161
 
162
  ---
163
 
164
+ ## ๐ŸŽ‰ ็ซ‹ๅณๅผ€ๅง‹
165
 
166
+ ็‚นๅ‡ปไธŠๆ–น็š„ใ€ŒAppใ€ๆ ‡็ญพ๏ผŒๅผ€ๅง‹ไฝฟ็”จ AI ๅŠฉๅŠ›ๆ‚จ็š„่Œไธšๅ‘ๅฑ•๏ผ
167
 
168
+ **็ฅๆ‚จๆฑ‚่Œ้กบๅˆฉ๏ผŒ่Œไธšๅ‘ๅฑ•่’ธ่’ธๆ—ฅไธŠ๏ผ** ๐Ÿš€โœจ
169
 
170
  ---
171
 
README.txt ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
2
+ โ•‘ โ•‘
3
+ โ•‘ ๐Ÿš€ CareerForge AI - ๅฎŒๆ•ดไปฃ็ ๅŒ… โ•‘
4
+ โ•‘ โ•‘
5
+ โ•‘ ๅผ€็ฎฑๅณ็”จ็š„้ƒจ็ฝฒๆ–‡ไปถ โ•‘
6
+ โ•‘ โ•‘
7
+ โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
8
+
9
+
10
+ ๐Ÿ“ฆ ๆœฌๆ–‡ไปถๅคนๅŒ…ๅซๆ‰€ๆœ‰ๅฟ…้œ€ๆ–‡ไปถ
11
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
12
+
13
+ โœ… app.py - FastAPI ๅŽ็ซฏๆœๅŠกๅ™จ
14
+ โœ… requirements.txt - Python ไพ่ต–ๅˆ—่กจ
15
+ โœ… Dockerfile - Docker ๅฎนๅ™จ้…็ฝฎ
16
+ โœ… README.md - Hugging Face Space ่ฏดๆ˜Ž
17
+ โœ… static/index.html - ๅ‰็ซฏๅบ”็”จ๏ผˆๅฎŒๆ•ดไปฃ็ ๏ผ‰
18
+
19
+
20
+ ๐Ÿš€ ๅฟซ้€Ÿ้ƒจ็ฝฒๆญฅ้ชค
21
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
+
23
+ 1๏ธโƒฃ ๆณจๅ†Œ่ดฆๅท
24
+ - Hugging Face: https://huggingface.co/join
25
+ - DeepSeek: https://platform.deepseek.com
26
+
27
+ 2๏ธโƒฃ ๅˆ›ๅปบ Hugging Face Space
28
+ - ่ฎฟ้—ฎ: https://huggingface.co/new-space
29
+ - SDK ้€‰ๆ‹ฉ: Docker โš ๏ธ๏ผˆๅฟ…้กป๏ผ‰
30
+ - ็‚นๅ‡ป Create Space
31
+
32
+ 3๏ธโƒฃ ไธŠไผ ๆ–‡ไปถ
33
+ ๆ–นๆณ•A: ๆ‹–ๆ‹ฝไธŠไผ ๏ผˆ็ฎ€ๅ•๏ผ‰
34
+ ๆ–นๆณ•B: Git ไธŠไผ ๏ผˆๆŽจ่๏ผ‰
35
+
36
+ 4๏ธโƒฃ ้…็ฝฎ API Key
37
+ - ่ฟ›ๅ…ฅ Settings โ†’ Secrets
38
+ - ๆทปๅŠ : DEEPSEEK_API_KEY = sk-ไฝ ็š„ๅฏ†้’ฅ
39
+
40
+ 5๏ธโƒฃ ็ญ‰ๅพ…ๆž„ๅปบ๏ผˆ3-5 ๅˆ†้’Ÿ๏ผ‰
41
+
42
+ 6๏ธโƒฃ ๆต‹่ฏ•ไฝฟ็”จ๏ผ
43
+
44
+
45
+ ๐Ÿ“– ่ฏฆ็ป†ๆ•™็จ‹
46
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
47
+
48
+ ๆŸฅ็œ‹๏ผšCareerForge-AIๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ—.md
49
+
50
+ ๅŒ…ๅซ๏ผš
51
+ โ€ข ้›ถๅŸบ็ก€้ƒจ็ฝฒๆ•™็จ‹
52
+ โ€ข ่ฏฆ็ป†ๆ“ไฝœๆˆชๅ›พ
53
+ โ€ข ๅธธ่ง้—ฎ้ข˜่งฃๅ†ณ
54
+ โ€ข ๅฎŒๆ•ดๆ•…้šœๆŽ’ๆŸฅ
55
+
56
+
57
+ ๐Ÿ“‹ ๆ–‡ไปถ่ฏดๆ˜Ž
58
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
59
+
60
+ app.py
61
+ ------
62
+ โ€ข ๅŽ็ซฏๆœๅŠกๅ™จไปฃ็ 
63
+ โ€ข ๅค„็† API ่ฏทๆฑ‚
64
+ โ€ข ไปฃ็† DeepSeek AI ่ฐƒ็”จ
65
+ โ€ข 300็ง’่ถ…ๆ—ถ้…็ฝฎ
66
+
67
+ requirements.txt
68
+ ----------------
69
+ โ€ข Python ไพ่ต–ๅŒ…ๅˆ—่กจ
70
+ โ€ข fastapi - Web ๆก†ๆžถ
71
+ โ€ข uvicorn - ASGI ๆœๅŠกๅ™จ
72
+ โ€ข httpx - HTTP ๅฎขๆˆท็ซฏ
73
+
74
+ Dockerfile
75
+ ----------
76
+ โ€ข Docker ๅฎนๅ™จ้…็ฝฎ
77
+ โ€ข Python 3.10 ็Žฏๅขƒ
78
+ โ€ข ็ซฏๅฃ 7860
79
+ โ€ข ่‡ชๅŠจๅฏๅŠจๅบ”็”จ
80
+
81
+ README.md
82
+ ---------
83
+ โ€ข Hugging Face Space ้…็ฝฎ
84
+ โ€ข ๅฟ…้กปๅŒ…ๅซ YAML front matter
85
+ โ€ข SDK: docker
86
+ โ€ข app_file: app.py
87
+
88
+ static/index.html
89
+ -----------------
90
+ โ€ข ๅฎŒๆ•ด็š„ๅ‰็ซฏๅบ”็”จ
91
+ โ€ข 6 ๅคงๅŠŸ่ƒฝๆจกๅ—
92
+ โ€ข AI ่ฐƒ็”จ้€ป่พ‘
93
+ โ€ข ็พŽ่ง‚็š„ UI ็•Œ้ข
94
+
95
+
96
+ โš ๏ธ ้‡่ฆๆ็คบ
97
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
98
+
99
+ 1. SDK ๅฟ…้กป้€‰ๆ‹ฉ "Docker"๏ผˆไธๆ˜ฏ Gradio๏ผ‰
100
+ 2. Secret ๅ็งฐๅฟ…้กปๆ˜ฏ "DEEPSEEK_API_KEY"
101
+ 3. index.html ๅฟ…้กปๆ”พๅœจ static ๆ–‡ไปถๅคน้‡Œ
102
+ 4. DeepSeek ่ดฆๆˆท้œ€่ฆๆœ‰ไฝ™้ข
103
+
104
+
105
+ ๐Ÿ”ง ๆœฌๅœฐๆต‹่ฏ•๏ผˆๅฏ้€‰๏ผ‰
106
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
107
+
108
+ ๅฆ‚ๆžœๆƒณๅœจๆœฌๅœฐๆต‹่ฏ•๏ผš
109
+
110
+ 1. ๅฎ‰่ฃ… Python 3.10+
111
+ 2. ๅฎ‰่ฃ…ไพ่ต–๏ผšpip install -r requirements.txt
112
+ 3. ่ฎพ็ฝฎ็Žฏๅขƒๅ˜้‡๏ผšexport DEEPSEEK_API_KEY=sk-xxxxx
113
+ 4. ่ฟ่กŒ๏ผšuvicorn app:app --reload
114
+ 5. ่ฎฟ้—ฎ๏ผšhttp://localhost:8000
115
+
116
+
117
+ ๐Ÿ“ž ่Žทๅ–ๅธฎๅŠฉ
118
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
119
+
120
+ Hugging Face ๆ–‡ๆกฃ๏ผš
121
+ https://huggingface.co/docs/hub/spaces
122
+
123
+ DeepSeek ๆ–‡ๆกฃ๏ผš
124
+ https://platform.deepseek.com/docs
125
+
126
+
127
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
128
+
129
+ ๅ‡†ๅค‡ๅฅฝไบ†ๅ—๏ผŸๅผ€ๅง‹้ƒจ็ฝฒๅง๏ผ
130
+
131
+ ็ฅไฝ ้ƒจ็ฝฒ้กบๅˆฉ๏ผ๐Ÿš€โœจ
132
+
133
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
134
+
app.py CHANGED
@@ -3,11 +3,6 @@ import httpx
3
  from fastapi import FastAPI, Request, HTTPException
4
  from fastapi.responses import HTMLResponse
5
  from fastapi.staticfiles import StaticFiles
6
- import logging
7
-
8
- # --- Basic Logging Configuration ---
9
- logging.basicConfig(level=logging.INFO)
10
- logger = logging.getLogger(__name__)
11
 
12
  # --- Configuration ---
13
  # Get the API key from Hugging Face Secrets
@@ -34,11 +29,13 @@ async def proxy_deepseek(request: Request):
34
  This endpoint receives the request from our frontend (index.html),
35
  adds the secret API key, and forwards it to the DeepSeek API.
36
  """
37
- logger.info("Received request for /call-deepseek proxy.")
38
-
39
  # Check if the API key is configured in HF Secrets
 
 
 
 
40
  if not DEEPSEEK_API_KEY:
41
- logger.error("DEEPSEEK_API_KEY is not set on the server.")
42
  raise HTTPException(
43
  status_code=500,
44
  detail="DEEPSEEK_API_KEY is not set on the server."
@@ -47,45 +44,44 @@ async def proxy_deepseek(request: Request):
47
  try:
48
  # Get the original JSON body from the frontend
49
  body = await request.json()
50
- logger.info(f"Request body model: {body.get('model')}")
51
 
52
  # Prepare the authorization headers for DeepSeek
53
- # Use .strip() to remove potential leading/trailing whitespace from the secret
54
- stripped_api_key = DEEPSEEK_API_KEY.strip()
55
  headers = {
56
  "Content-Type": "application/json",
57
- "Authorization": f"Bearer {stripped_api_key}"
58
  }
59
 
60
- logger.info("Forwarding request to DeepSeek API.")
61
  # Make the asynchronous request to DeepSeek
62
  response = await client.post(
63
  DEEPSEEK_ENDPOINT,
64
  json=body, # Forward the body from the frontend
65
  headers=headers,
66
- timeout=30.0 # Set a 30-second timeout
67
  )
68
 
69
  # Check if DeepSeek returned an error
70
  response.raise_for_status()
71
 
72
- logger.info("Successfully received response from DeepSeek.")
73
  # Return DeepSeek's successful response directly to the frontend
74
  return response.json()
75
 
76
  except httpx.HTTPStatusError as e:
77
  # Handle errors from the DeepSeek API
78
- logger.error(f"Error from DeepSeek API. Status: {e.response.status_code}, Response: {e.response.text}")
 
79
  raise HTTPException(
80
  status_code=e.response.status_code,
81
- detail=f"Error from DeepSeek API: {e.response.text}"
82
  )
83
  except Exception as e:
84
  # Handle any other unexpected errors
85
- logger.error(f"An internal server error occurred: {str(e)}", exc_info=True)
 
 
 
86
  raise HTTPException(
87
  status_code=500,
88
- detail=f"Internal server error: {str(e)}"
89
  )
90
 
91
 
@@ -104,8 +100,7 @@ async def read_root():
104
  with open(os.path.join(STATIC_DIR, "index.html")) as f:
105
  return HTMLResponse(content=f.read(), status_code=200)
106
  except FileNotFoundError:
107
- logger.error("index.html not found in static directory.")
108
  return HTMLResponse(
109
  content="<h1>Error: index.html not found</h1><p>Ensure index.html is in a 'static' folder.</p>",
110
  status_code=404
111
- )
 
3
  from fastapi import FastAPI, Request, HTTPException
4
  from fastapi.responses import HTMLResponse
5
  from fastapi.staticfiles import StaticFiles
 
 
 
 
 
6
 
7
  # --- Configuration ---
8
  # Get the API key from Hugging Face Secrets
 
29
  This endpoint receives the request from our frontend (index.html),
30
  adds the secret API key, and forwards it to the DeepSeek API.
31
  """
 
 
32
  # Check if the API key is configured in HF Secrets
33
+ print(f"[DEBUG] DEEPSEEK_API_KEY exists: {bool(DEEPSEEK_API_KEY)}")
34
+ if DEEPSEEK_API_KEY:
35
+ print(f"[DEBUG] API Key starts with: {DEEPSEEK_API_KEY[:10]}...")
36
+
37
  if not DEEPSEEK_API_KEY:
38
+ print("[ERROR] DEEPSEEK_API_KEY is not set!")
39
  raise HTTPException(
40
  status_code=500,
41
  detail="DEEPSEEK_API_KEY is not set on the server."
 
44
  try:
45
  # Get the original JSON body from the frontend
46
  body = await request.json()
 
47
 
48
  # Prepare the authorization headers for DeepSeek
 
 
49
  headers = {
50
  "Content-Type": "application/json",
51
+ "Authorization": f"Bearer {DEEPSEEK_API_KEY}"
52
  }
53
 
 
54
  # Make the asynchronous request to DeepSeek
55
  response = await client.post(
56
  DEEPSEEK_ENDPOINT,
57
  json=body, # Forward the body from the frontend
58
  headers=headers,
59
+ timeout=300.0 # Set a 300-second timeout (5 minutes)
60
  )
61
 
62
  # Check if DeepSeek returned an error
63
  response.raise_for_status()
64
 
 
65
  # Return DeepSeek's successful response directly to the frontend
66
  return response.json()
67
 
68
  except httpx.HTTPStatusError as e:
69
  # Handle errors from the DeepSeek API
70
+ error_msg = f"DeepSeek API Error: {e.response.status_code} - {e.response.text}"
71
+ print(f"[ERROR] {error_msg}")
72
  raise HTTPException(
73
  status_code=e.response.status_code,
74
+ detail=error_msg
75
  )
76
  except Exception as e:
77
  # Handle any other unexpected errors
78
+ error_msg = f"Internal server error: {type(e).__name__} - {str(e)}"
79
+ print(f"[ERROR] {error_msg}")
80
+ import traceback
81
+ print(f"[TRACEBACK] {traceback.format_exc()}")
82
  raise HTTPException(
83
  status_code=500,
84
+ detail=error_msg
85
  )
86
 
87
 
 
100
  with open(os.path.join(STATIC_DIR, "index.html")) as f:
101
  return HTMLResponse(content=f.read(), status_code=200)
102
  except FileNotFoundError:
 
103
  return HTMLResponse(
104
  content="<h1>Error: index.html not found</h1><p>Ensure index.html is in a 'static' folder.</p>",
105
  status_code=404
106
+ )
ไธ€้”ฎ้ƒจ็ฝฒ.sh ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # ้ขœ่‰ฒๅฎšไน‰
4
+ GREEN='\033[0;32m'
5
+ RED='\033[0;31m'
6
+ YELLOW='\033[1;33m'
7
+ BLUE='\033[0;34m'
8
+ CYAN='\033[0;36m'
9
+ NC='\033[0m'
10
+
11
+ clear
12
+
13
+ echo -e "${CYAN}"
14
+ cat << "EOF"
15
+ โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
16
+ โ•‘ โ•‘
17
+ โ•‘ ๐Ÿš€ CareerForge AI - ไธ€้”ฎ้ƒจ็ฝฒๅˆฐ Hugging Face โ•‘
18
+ โ•‘ โ•‘
19
+ โ•‘ ่ฎฉ AI ๅŠฉๅŠ›ไฝ ็š„่Œไธšๅ‘ๅฑ•๏ผ โ•‘
20
+ โ•‘ โ•‘
21
+ โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
22
+ EOF
23
+ echo -e "${NC}"
24
+ echo ""
25
+
26
+ # ๆฃ€ๆŸฅๅฝ“ๅ‰็›ฎๅฝ•
27
+ if [ ! -f "app.py" ] || [ ! -f "Dockerfile" ]; then
28
+ echo -e "${RED}โŒ ้”™่ฏฏ๏ผš่ฏทๅœจ CareerForge-ๅฎŒๆ•ดไปฃ็ ๅŒ… ๆ–‡ไปถๅคนไธญ่ฟ่กŒๆญค่„šๆœฌ${NC}"
29
+ echo ""
30
+ echo "ๅฝ“ๅ‰็›ฎๅฝ•๏ผš$(pwd)"
31
+ echo "่ฏท็กฎไฟๅŒ…ๅซไปฅไธ‹ๆ–‡ไปถ๏ผš"
32
+ echo " โ€ข app.py"
33
+ echo " โ€ข requirements.txt"
34
+ echo " โ€ข Dockerfile"
35
+ echo " โ€ข README.md"
36
+ echo " โ€ข static/index.html"
37
+ echo ""
38
+ exit 1
39
+ fi
40
+
41
+ echo -e "${GREEN}โœ… ๆฃ€ๆต‹ๅˆฐๆ‰€ๆœ‰ๅฟ…้œ€ๆ–‡ไปถ${NC}"
42
+ echo ""
43
+
44
+ # ๆ˜พ็คบๆ–‡ไปถๅˆ—่กจ
45
+ echo -e "${BLUE}๐Ÿ“ ๅณๅฐ†้ƒจ็ฝฒไปฅไธ‹ๆ–‡ไปถ๏ผš${NC}"
46
+ echo " โœ“ app.py - ๅŽ็ซฏๆœๅŠกๅ™จ"
47
+ echo " โœ“ requirements.txt - Python ไพ่ต–"
48
+ echo " โœ“ Dockerfile - Docker ้…็ฝฎ"
49
+ echo " โœ“ README.md - Space ่ฏดๆ˜Ž"
50
+ echo " โœ“ static/index.html - ๅ‰็ซฏๅบ”็”จ"
51
+ echo ""
52
+
53
+ # ๆญฅ้ชค 1๏ผš่Žทๅ–็”จๆˆทไฟกๆฏ
54
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
55
+ echo -e "${YELLOW}๐Ÿ“ ๆญฅ้ชค 1/5: ้…็ฝฎ้ƒจ็ฝฒไฟกๆฏ${NC}"
56
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
57
+ echo ""
58
+
59
+ read -p "่ฏท่พ“ๅ…ฅไฝ ็š„ Hugging Face ็”จๆˆทๅ: " HF_USERNAME
60
+ if [ -z "$HF_USERNAME" ]; then
61
+ echo -e "${RED}โŒ ็”จๆˆทๅไธ่ƒฝไธบ็ฉบ${NC}"
62
+ exit 1
63
+ fi
64
+
65
+ read -p "่ฏท่พ“ๅ…ฅ Space ๅ็งฐ [้ป˜่ฎค: careerforge-ai]: " SPACE_NAME
66
+ SPACE_NAME=${SPACE_NAME:-careerforge-ai}
67
+
68
+ echo ""
69
+ echo -e "${GREEN}โœ… ็”จๆˆทๅ: ${CYAN}$HF_USERNAME${NC}"
70
+ echo -e "${GREEN}โœ… Space ๅ็งฐ: ${CYAN}$SPACE_NAME${NC}"
71
+ echo -e "${GREEN}โœ… Space ๅœฐๅ€: ${BLUE}https://huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME${NC}"
72
+ echo ""
73
+
74
+ read -p "ไฟกๆฏๆญฃ็กฎๅ—๏ผŸ(y/n) " -n 1 -r
75
+ echo ""
76
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
77
+ echo -e "${YELLOW}โš ๏ธ ๅทฒๅ–ๆถˆ${NC}"
78
+ exit 1
79
+ fi
80
+
81
+ echo ""
82
+
83
+ # ๆญฅ้ชค 2๏ผšๆฃ€ๆŸฅ Git
84
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
85
+ echo -e "${YELLOW}๐Ÿ” ๆญฅ้ชค 2/5: ๆฃ€ๆŸฅ Git ็Žฏๅขƒ${NC}"
86
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
87
+ echo ""
88
+
89
+ if ! command -v git &> /dev/null; then
90
+ echo -e "${RED}โŒ Git ๆœชๅฎ‰่ฃ…${NC}"
91
+ echo ""
92
+ echo "่ฏทๅ…ˆๅฎ‰่ฃ… Git๏ผš"
93
+ echo " Mac: brew install git"
94
+ echo " Windows: https://git-scm.com/download/win"
95
+ echo ""
96
+ exit 1
97
+ fi
98
+
99
+ echo -e "${GREEN}โœ… Git ๅทฒๅฎ‰่ฃ…: $(git --version)${NC}"
100
+ echo ""
101
+
102
+ # ้…็ฝฎ Git ็”จๆˆทไฟกๆฏ๏ผˆๅฆ‚ๆžœๆœช้…็ฝฎ๏ผ‰
103
+ if [ -z "$(git config user.name)" ]; then
104
+ read -p "่ฏท่พ“ๅ…ฅ Git ็”จๆˆทๅ: " GIT_NAME
105
+ git config user.name "$GIT_NAME"
106
+ echo -e "${GREEN}โœ… ๅทฒ่ฎพ็ฝฎ Git ็”จๆˆทๅ${NC}"
107
+ fi
108
+
109
+ if [ -z "$(git config user.email)" ]; then
110
+ read -p "่ฏท่พ“ๅ…ฅ Git ้‚ฎ็ฎฑ: " GIT_EMAIL
111
+ git config user.email "$GIT_EMAIL"
112
+ echo -e "${GREEN}โœ… ๅทฒ่ฎพ็ฝฎ Git ้‚ฎ็ฎฑ${NC}"
113
+ fi
114
+
115
+ echo ""
116
+
117
+ # ๆญฅ้ชค 3๏ผšๅˆๅง‹ๅŒ– Git ไป“ๅบ“
118
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
119
+ echo -e "${YELLOW}๐Ÿ“ฆ ๆญฅ้ชค 3/5: ๅˆๅง‹ๅŒ– Git ไป“ๅบ“${NC}"
120
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
121
+ echo ""
122
+
123
+ if [ -d ".git" ]; then
124
+ echo -e "${YELLOW}โš ๏ธ Git ไป“ๅบ“ๅทฒๅญ˜ๅœจ๏ผŒ่ทณ่ฟ‡ๅˆๅง‹ๅŒ–${NC}"
125
+ else
126
+ echo "ๆญฃๅœจๅˆๅง‹ๅŒ– Git ไป“ๅบ“..."
127
+ git init
128
+ echo -e "${GREEN}โœ… Git ไป“ๅบ“ๅˆๅง‹ๅŒ–ๅฎŒๆˆ${NC}"
129
+ fi
130
+
131
+ echo ""
132
+
133
+ # ๆญฅ้ชค 4๏ผšๆทปๅŠ ่ฟœ็จ‹ไป“ๅบ“
134
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
135
+ echo -e "${YELLOW}๐Ÿ”— ๆญฅ้ชค 4/5: ้…็ฝฎ่ฟœ็จ‹ไป“ๅบ“${NC}"
136
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
137
+ echo ""
138
+
139
+ REMOTE_URL="https://huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME"
140
+
141
+ # ๆฃ€ๆŸฅๆ˜ฏๅฆๅทฒๆœ‰ origin
142
+ if git remote | grep -q "origin"; then
143
+ echo "็งป้™คๆ—ง็š„ origin..."
144
+ git remote remove origin
145
+ fi
146
+
147
+ echo "ๆทปๅŠ ่ฟœ็จ‹ไป“ๅบ“: $REMOTE_URL"
148
+ git remote add origin $REMOTE_URL
149
+ echo -e "${GREEN}โœ… ่ฟœ็จ‹ไป“ๅบ“้…็ฝฎๅฎŒๆˆ${NC}"
150
+ echo ""
151
+
152
+ # ๆญฅ้ชค 5๏ผšๆไบคๅนถๆŽจ้€
153
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
154
+ echo -e "${YELLOW}๐Ÿš€ ๆญฅ้ชค 5/5: ๆไบคๅนถๆŽจ้€ไปฃ็ ${NC}"
155
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
156
+ echo ""
157
+
158
+ echo "ๆทปๅŠ ๆ‰€ๆœ‰ๆ–‡ไปถ..."
159
+ git add .
160
+
161
+ echo "ๆไบคๆ›ดๆ”น..."
162
+ git commit -m "Initial commit: Deploy CareerForge AI to Hugging Face Space"
163
+
164
+ echo ""
165
+ echo -e "${BLUE}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}"
166
+ echo -e "${BLUE}โ•‘ โ•‘${NC}"
167
+ echo -e "${BLUE}โ•‘ โš ๏ธ ๅ‡†ๅค‡ๆŽจ้€ๅˆฐ Hugging Face โ•‘${NC}"
168
+ echo -e "${BLUE}โ•‘ โ•‘${NC}"
169
+ echo -e "${BLUE}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}"
170
+ echo ""
171
+ echo -e "${YELLOW}ๆŽฅไธ‹ๆฅไผš่ฆๆฑ‚ไฝ ่พ“ๅ…ฅ๏ผš${NC}"
172
+ echo ""
173
+ echo -e " ${CYAN}Username:${NC} $HF_USERNAME"
174
+ echo -e " ${CYAN}Password:${NC} ไฝฟ็”จไฝ ็š„ Hugging Face Access Token"
175
+ echo ""
176
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
177
+ echo -e "${YELLOW}๐Ÿ”‘ ๅฆ‚ไฝ•่Žทๅ– Access Token๏ผš${NC}"
178
+ echo ""
179
+ echo " 1๏ธโƒฃ ่ฎฟ้—ฎ: ${BLUE}https://huggingface.co/settings/tokens${NC}"
180
+ echo " 2๏ธโƒฃ ็‚นๅ‡ป 'New token' ๆŒ‰้’ฎ"
181
+ echo " 3๏ธโƒฃ ้€‰ๆ‹ฉ 'write' ๆƒ้™ โš ๏ธ"
182
+ echo " 4๏ธโƒฃ ็‚นๅ‡ป 'Generate'"
183
+ echo " 5๏ธโƒฃ ๅคๅˆถ็”Ÿๆˆ็š„ token๏ผˆไปฅ hf_ ๅผ€ๅคด๏ผ‰"
184
+ echo ""
185
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
186
+ echo ""
187
+
188
+ read -p "ๅ‡†ๅค‡ๅฅฝ Token ไบ†ๅ—๏ผŸๆŒ‰ๅ›ž่ฝฆ็ปง็ปญๆŽจ้€..."
189
+
190
+ echo ""
191
+ echo "ๆญฃๅœจๆŽจ้€ๅˆฐ Hugging Face..."
192
+ echo ""
193
+
194
+ if git push origin main 2>&1; then
195
+ echo ""
196
+ echo -e "${GREEN}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}"
197
+ echo -e "${GREEN}โ•‘ โ•‘${NC}"
198
+ echo -e "${GREEN}โ•‘ ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰ ๆŽจ้€ๆˆๅŠŸ๏ผ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰ โ•‘${NC}"
199
+ echo -e "${GREEN}โ•‘ โ•‘${NC}"
200
+ echo -e "${GREEN}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}"
201
+ echo ""
202
+ echo -e "${GREEN}โœ… CareerForge AI ๅทฒๆˆๅŠŸไธŠไผ ๅˆฐ Hugging Face๏ผ${NC}"
203
+ echo ""
204
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
205
+ echo ""
206
+ echo -e "${RED}โš ๏ธ ้‡่ฆ๏ผš่ฟ˜้œ€่ฆๅฎŒๆˆๆœ€ๅŽไธ€ๆญฅ๏ผ${NC}"
207
+ echo ""
208
+ echo -e "${CYAN}๐Ÿ“ ่ฏท่ฎฟ้—ฎไฝ ็š„ Space ่ฎพ็ฝฎ้กต้ข๏ผš${NC}"
209
+ echo -e " ${BLUE}$REMOTE_URL/settings${NC}"
210
+ echo ""
211
+ echo -e "${CYAN}๐Ÿ” ๆทปๅŠ  DeepSeek API Key๏ผš${NC}"
212
+ echo ""
213
+ echo " 1๏ธโƒฃ ็‚นๅ‡ป 'Settings' ๆ ‡็ญพ"
214
+ echo " 2๏ธโƒฃ ๆ‰พๅˆฐ 'Repository secrets' ้ƒจๅˆ†"
215
+ echo " 3๏ธโƒฃ ็‚นๅ‡ป 'New secret' ๆŒ‰้’ฎ"
216
+ echo " 4๏ธโƒฃ ๅกซๅ†™๏ผš"
217
+ echo -e " Name: ${GREEN}DEEPSEEK_API_KEY${NC}"
218
+ echo -e " Value: ${GREEN}sk-ไฝ ็š„DeepSeek APIๅฏ†้’ฅ${NC}"
219
+ echo " 5๏ธโƒฃ ็‚นๅ‡ป 'Add' ๆŒ‰้’ฎ"
220
+ echo ""
221
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
222
+ echo ""
223
+ echo -e "${CYAN}๐Ÿ’ก ่Žทๅ– DeepSeek API Key๏ผš${NC}"
224
+ echo ""
225
+ echo " 1. ่ฎฟ้—ฎ: ${BLUE}https://platform.deepseek.com${NC}"
226
+ echo " 2. ๆณจๅ†Œๅนถ็™ปๅฝ•"
227
+ echo " 3. ็‚นๅ‡ปๅทฆไพง 'API Keys'"
228
+ echo " 4. ๅˆ›ๅปบๆ–ฐๅฏ†้’ฅ"
229
+ echo " 5. ๅ……ๅ€ผ ยฅ10-20"
230
+ echo ""
231
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
232
+ echo ""
233
+ echo -e "${CYAN}โณ ้…็ฝฎๅฎŒๆˆๅŽ๏ผš${NC}"
234
+ echo ""
235
+ echo " โ€ข ็ญ‰ๅพ… 3-5 ๅˆ†้’Ÿ่ฎฉ Space ๆž„ๅปบ"
236
+ echo " โ€ข ่ฎฟ้—ฎ App ๆ ‡็ญพๆต‹่ฏ•ๅŠŸ่ƒฝ"
237
+ echo " โ€ข ็”Ÿๆˆไธ€ไปฝ็ฎ€ๅކ่ฏ•่ฏ•๏ผ"
238
+ echo ""
239
+ echo -e "${YELLOW}โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”${NC}"
240
+ echo ""
241
+ echo -e "${CYAN}๐ŸŒ ไฝ ็š„ๅบ”็”จๅœฐๅ€๏ผš${NC}"
242
+ echo -e " ${BLUE}$REMOTE_URL${NC}"
243
+ echo ""
244
+ echo -e "${CYAN}๐Ÿ“Š ๆŸฅ็œ‹ๆž„ๅปบๆ—ฅๅฟ—๏ผš${NC}"
245
+ echo -e " ${BLUE}$REMOTE_URL?logs=build${NC}"
246
+ echo ""
247
+ echo -e "${GREEN}็ฅไฝ ไฝฟ็”จๆ„‰ๅฟซ๏ผ๐Ÿš€โœจ${NC}"
248
+ echo ""
249
+ else
250
+ echo ""
251
+ echo -e "${RED}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}"
252
+ echo -e "${RED}โ•‘ โ•‘${NC}"
253
+ echo -e "${RED}โ•‘ โŒ ๆŽจ้€ๅคฑ่ดฅ โ•‘${NC}"
254
+ echo -e "${RED}โ•‘ โ•‘${NC}"
255
+ echo -e "${RED}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}"
256
+ echo ""
257
+ echo -e "${YELLOW}ๅฏ่ƒฝ็š„ๅŽŸๅ› ๏ผš${NC}"
258
+ echo ""
259
+ echo " 1. Access Token ไธๆญฃ็กฎๆˆ–ๆƒ้™ไธ่ถณ"
260
+ echo " 2. Space ๅฐšๆœชๅœจ Hugging Face ๅˆ›ๅปบ"
261
+ echo " 3. ็ฝ‘็ปœ่ฟžๆŽฅ้—ฎ้ข˜"
262
+ echo " 4. Token ๅทฒ่ฟ‡ๆœŸ"
263
+ echo ""
264
+ echo -e "${YELLOW}่งฃๅ†ณๆ–นๆณ•๏ผš${NC}"
265
+ echo ""
266
+ echo " 1. ็กฎไฟๅ…ˆๅœจ HF ็ฝ‘็ซ™ๅˆ›ๅปบ Space๏ผš"
267
+ echo -e " ${BLUE}https://huggingface.co/new-space${NC}"
268
+ echo " 2. ็กฎไฟ SDK ้€‰ๆ‹ฉไบ† 'Docker'"
269
+ echo " 3. ่Žทๅ–ๆ–ฐ็š„ Access Token๏ผˆ้œ€่ฆ write ๆƒ้™๏ผ‰๏ผš"
270
+ echo -e " ${BLUE}https://huggingface.co/settings/tokens${NC}"
271
+ echo " 4. ๆฃ€ๆŸฅ็ฝ‘็ปœ่ฟžๆŽฅ"
272
+ echo ""
273
+ echo " ็„ถๅŽ้‡ๆ–ฐ่ฟ่กŒๆญค่„šๆœฌใ€‚"
274
+ echo ""
275
+ fi
276
+
ๅฟซ้€Ÿๅผ€ๅง‹.txt ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
2
+ โ•‘ โ•‘
3
+ โ•‘ ๐Ÿš€ CareerForge AI - 5ๅˆ†้’Ÿๅฟซ้€Ÿ้ƒจ็ฝฒ โ•‘
4
+ โ•‘ โ•‘
5
+ โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
6
+
7
+
8
+ ๐Ÿ“‹ ๅ‡†ๅค‡ๅทฅไฝœ๏ผˆ5ๅˆ†้’Ÿ๏ผ‰
9
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
10
+
11
+ 1๏ธโƒฃ ๆณจๅ†Œ Hugging Face ่ดฆๅท
12
+ ่ฎฟ้—ฎ๏ผšhttps://huggingface.co/join
13
+ ๅกซๅ†™้‚ฎ็ฎฑใ€็”จๆˆทๅใ€ๅฏ†็  โ†’ ้ชŒ่ฏ้‚ฎ็ฎฑ โ†’ ๅฎŒๆˆ
14
+
15
+ 2๏ธโƒฃ ๆณจๅ†Œ DeepSeek ่ดฆๅทๅนถ่Žทๅ– API Key
16
+ ่ฎฟ้—ฎ๏ผšhttps://platform.deepseek.com
17
+ ๆณจๅ†Œ็™ปๅฝ• โ†’ API Keys โ†’ ๅˆ›ๅปบๆ–ฐๅฏ†้’ฅ โ†’ ๅคๅˆถไฟๅญ˜
18
+ ่ฎฐๅพ—ๅ……ๅ€ผ ยฅ10-20
19
+
20
+ 3๏ธโƒฃ ่Žทๅ– Hugging Face Access Token
21
+ ่ฎฟ้—ฎ๏ผšhttps://huggingface.co/settings/tokens
22
+ New token โ†’ ้€‰ๆ‹ฉ write ๆƒ้™ โ†’ Generate โ†’ ๅคๅˆถไฟๅญ˜
23
+
24
+
25
+ ๐Ÿš€ ๆ–นๆณ•ไธ€๏ผšไธ€้”ฎ้ƒจ็ฝฒ๏ผˆๆœ€็ฎ€ๅ•๏ผ๏ผ‰
26
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
27
+
28
+ ๆญฅ้ชค 1๏ผšๅ…ˆๅœจ HF ๅˆ›ๅปบ Space
29
+ ่ฎฟ้—ฎ๏ผšhttps://huggingface.co/new-space
30
+ SDK ้€‰ๆ‹ฉ๏ผšDocker โš ๏ธ๏ผˆๅฟ…้กป๏ผ‰
31
+ ็‚นๅ‡ป๏ผšCreate Space
32
+
33
+ ๆญฅ้ชค 2๏ผš่ฟ่กŒไธ€้”ฎ่„šๆœฌ
34
+ ๆ‰“ๅผ€็ปˆ็ซฏ๏ผŒ่ฟ›ๅ…ฅๆœฌๆ–‡ไปถๅคน๏ผš
35
+ cd /path/to/CareerForge-ๅฎŒๆ•ดไปฃ็ ๅŒ…
36
+
37
+ ่ฟ่กŒ่„šๆœฌ๏ผš
38
+ ./ไธ€้”ฎ้ƒจ็ฝฒ.sh
39
+
40
+ ๆŒ‰ๆ็คบ่พ“ๅ…ฅ๏ผš
41
+ โ€ข HF ็”จๆˆทๅ
42
+ โ€ข Space ๅ็งฐ
43
+ โ€ข HF Token๏ผˆๆŽจ้€ๆ—ถ๏ผ‰
44
+
45
+ ๆญฅ้ชค 3๏ผš้…็ฝฎ API Key
46
+ ่ฎฟ้—ฎ๏ผšhttps://huggingface.co/spaces/ไฝ ็š„็”จๆˆทๅ/spaceๅ/settings
47
+
48
+ Secrets โ†’ New secret โ†’ ๅกซๅ†™๏ผš
49
+ Name: DEEPSEEK_API_KEY
50
+ Value: sk-ไฝ ็š„ๅฏ†้’ฅ
51
+
52
+ ็‚นๅ‡ป Add
53
+
54
+ ๆญฅ้ชค 4๏ผš็ญ‰ๅพ…ๆž„ๅปบ๏ผˆ3-5ๅˆ†้’Ÿ๏ผ‰
55
+ ๅœจ App ๆ ‡็ญพๆŸฅ็œ‹่ฟ›ๅบฆ
56
+
57
+ ๆญฅ้ชค 5๏ผšๅผ€ๅง‹ไฝฟ็”จ๏ผ๐ŸŽ‰
58
+
59
+
60
+ ๐ŸŒ ๆ–นๆณ•ไบŒ๏ผš็ฝ‘้กตไธŠไผ ๏ผˆๆ— ้œ€ๅ‘ฝไปค่กŒ๏ผ‰
61
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
62
+
63
+ ๆญฅ้ชค 1๏ผšๅˆ›ๅปบ Space
64
+ https://huggingface.co/new-space
65
+ SDK: Docker โ†’ Create
66
+
67
+ ๆญฅ้ชค 2๏ผšไธŠไผ ๆ–‡ไปถ
68
+ Files โ†’ Add file โ†’ Upload files
69
+ ไพๆฌกไธŠไผ ๏ผš
70
+ โ€ข README.md
71
+ โ€ข app.py
72
+ โ€ข requirements.txt
73
+ โ€ข Dockerfile
74
+ โ†’ Commit changes
75
+
76
+ ๆญฅ้ชค 3๏ผšไธŠไผ  static/index.html
77
+ Add file โ†’ Create a new file
78
+ ๆ–‡ไปถๅ๏ผšstatic/index.html
79
+ ็ฒ˜่ดดไปฃ็  โ†’ Commit
80
+
81
+ ๆญฅ้ชค 4๏ผš้…็ฝฎ API Key
82
+ Settings โ†’ Secrets โ†’ New secret
83
+ Name: DEEPSEEK_API_KEY
84
+ Value: sk-xxxxx
85
+
86
+ ๆญฅ้ชค 5๏ผš็ญ‰ๅพ… & ไฝฟ็”จ
87
+
88
+
89
+ ๐Ÿ“‚ ๆ–‡ไปถ็ป“ๆž„
90
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
91
+
92
+ CareerForge-ๅฎŒๆ•ดไปฃ็ ๅŒ…/
93
+ โ”œโ”€โ”€ app.py โ† ๅŽ็ซฏๆœๅŠกๅ™จ
94
+ โ”œโ”€โ”€ requirements.txt โ† ไพ่ต–ๅˆ—่กจ
95
+ โ”œโ”€โ”€ Dockerfile โ† ๅฎนๅ™จ้…็ฝฎ
96
+ โ”œโ”€โ”€ README.md โ† Space ่ฏดๆ˜Ž
97
+ โ”œโ”€โ”€ static/
98
+ โ”‚ โ””โ”€โ”€ index.html โ† ๅ‰็ซฏๅบ”็”จ
99
+ โ”œโ”€โ”€ ไธ€้”ฎ้ƒจ็ฝฒ.sh โ† ่‡ชๅŠจ้ƒจ็ฝฒ่„šๆœฌ
100
+ โ”œโ”€โ”€ ๅฟซ้€Ÿๅผ€ๅง‹.txt โ† ๆœฌๆ–‡ไปถ
101
+ โ””โ”€โ”€ README.txt โ† ่ฏฆ็ป†่ฏดๆ˜Ž
102
+
103
+
104
+ โš ๏ธ ๅ…ณ้”ฎๆณจๆ„ไบ‹้กน
105
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
106
+
107
+ โœ… SDK ๅฟ…้กป้€‰ๆ‹ฉ "Docker"
108
+ โœ… Secret ๅ็งฐๅฟ…้กปๆ˜ฏ "DEEPSEEK_API_KEY"
109
+ โœ… index.html ๅฟ…้กปๅœจ static ๆ–‡ไปถๅคน้‡Œ
110
+ โœ… DeepSeek ่ดฆๆˆทๅฟ…้กปๆœ‰ไฝ™้ข
111
+ โœ… HF Token ้œ€่ฆ write ๆƒ้™
112
+
113
+
114
+ ๐ŸŽฏ ๆˆๅŠŸๆ ‡ๅฟ—
115
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
116
+
117
+ ๆž„ๅปบๆˆๅŠŸ๏ผš
118
+ Logs ๆ˜พ็คบ "Uvicorn running on http://0.0.0.0:7860"
119
+
120
+ ๅŠŸ่ƒฝๆญฃๅธธ๏ผš
121
+ ๅกซๅ†™ไฟกๆฏ โ†’ ็‚นๅ‡ป็”Ÿๆˆ โ†’ ็ญ‰ๅพ…30-60็ง’ โ†’ ็œ‹ๅˆฐ็ป“ๆžœ
122
+
123
+
124
+ โ“ ้‡ๅˆฐ้—ฎ้ข˜๏ผŸ
125
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
126
+
127
+ 1. ๆŸฅ็œ‹่ฏฆ็ป†ๆ•™็จ‹๏ผšCareerForge-AIๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ—.md
128
+ 2. ๆฃ€ๆŸฅ Logs ๆ ‡็ญพ็š„้”™่ฏฏไฟกๆฏ
129
+ 3. ็กฎ่ฎคๆ‰€ๆœ‰ๆญฅ้ชค้ƒฝๆญฃ็กฎๅฎŒๆˆ
130
+
131
+
132
+ ๐Ÿ“ž ๅธธ็”จ้“พๆŽฅ
133
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
134
+
135
+ ๅˆ›ๅปบ Space๏ผš
136
+ https://huggingface.co/new-space
137
+
138
+ ่Žทๅ– Token๏ผš
139
+ https://huggingface.co/settings/tokens
140
+
141
+ DeepSeek ๆŽงๅˆถๅฐ๏ผš
142
+ https://platform.deepseek.com
143
+
144
+ HF ๆ–‡ๆกฃ๏ผš
145
+ https://huggingface.co/docs/hub/spaces
146
+
147
+
148
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
149
+
150
+ ้€‰ๆ‹ฉไฝ ๅ–œๆฌข็š„ๆ–นๅผๅผ€ๅง‹้ƒจ็ฝฒๅง๏ผ
151
+
152
+ ๆŽจ่๏ผšไฝฟ็”จไธ€้”ฎ่„šๆœฌ๏ผŒๆœ€ๅฟซๆœ€็ฎ€ๅ•๏ผ
153
+
154
+ ็ฅไฝ ้ƒจ็ฝฒ้กบๅˆฉ๏ผ๐Ÿš€โœจ
155
+
156
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
157
+