Test1hdhs718 commited on
Commit
3ea44b2
1 Parent(s): a8f1577
Files changed (5) hide show
  1. .gitignore +24 -0
  2. Dockerfile +20 -0
  3. README.md +5 -0
  4. main.py +70 -0
  5. requirements.txt +0 -0
.gitignore ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Virtual environment
2
+ venv/
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.pyc
7
+ *.pyo
8
+ *.pyd
9
+
10
+ # Compiled C extension
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ dist/
15
+ build/
16
+ *.egg-info/
17
+
18
+ # Local development
19
+ db.sqlite3
20
+
21
+ # IDE files
22
+ .vscode/
23
+ .idea/
24
+ .env
Dockerfile ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Sử dụng Python 3.9
2
+ FROM python:3.9-slim
3
+
4
+ # Thiết lập thư mục làm việc
5
+ WORKDIR /app
6
+
7
+ # Sao chép file requirements.txt vào thư mục làm việc
8
+ COPY requirements.txt .
9
+
10
+ # Cài đặt các dependencies
11
+ RUN pip install --no-cache-dir -r requirements.txt
12
+
13
+ # Sao chép toàn bộ mã nguồn vào thư mục làm việc
14
+ COPY . .
15
+
16
+ # Mở cổng 7860, nơi FastAPI sẽ chạy
17
+ EXPOSE 7860
18
+
19
+ # Khởi chạy ứng dụng bằng uvicorn khi container được khởi động
20
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -7,4 +7,9 @@ sdk: docker
7
  pinned: false
8
  ---
9
 
 
 
 
 
 
10
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
7
  pinned: false
8
  ---
9
 
10
+ python3 -m venv venv
11
+ venv\Scripts\activate
12
+ pip freeze > requirements.txt
13
+ pip install -r requirements.txt
14
+
15
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
main.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from fastapi import FastAPI, Query
3
+ from pydantic import BaseModel
4
+ from typing import List
5
+ from huggingface_hub import InferenceClient
6
+ from deep_translator import GoogleTranslator
7
+ from sse_starlette.sse import EventSourceResponse
8
+ from dotenv import load_dotenv, find_dotenv
9
+
10
+ _ = load_dotenv(find_dotenv()) # read local .env file
11
+ hf_api_key = os.environ['HF_TOKEN']
12
+
13
+ app = FastAPI()
14
+
15
+ # Initialize the InferenceClient and the translators
16
+ client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1", token=hf_api_key)
17
+
18
+ # translator_to_en = GoogleTranslator(source='vietnamese', target='english')
19
+ # translator_to_ar = GoogleTranslator(source='english', target='vietnamese')
20
+
21
+ class PromptRequest(BaseModel):
22
+ message: str
23
+ history: List[List[str]]
24
+
25
+ class GenerateResponse(BaseModel):
26
+ output: str
27
+
28
+ def format_prompt(message, history):
29
+ prompt = "<s>"
30
+ for user_prompt, bot_response in history:
31
+ prompt += f"[INST] {user_prompt} [/INST]"
32
+ prompt += f" {bot_response}</s> "
33
+ prompt += f"[INST] {message} [/INST]"
34
+ return prompt
35
+ def generate_responses(response_stream):
36
+ for response in response_stream:
37
+ yield response.token.text
38
+
39
+ @app.post("/generate")
40
+ async def generate(prompt_request: PromptRequest,
41
+ temperature: float = Query(0.9, ge=0.0, le=1.0),
42
+ max_new_tokens: int = Query(256, ge=0, le=1048),
43
+ top_p: float = Query(0.90, ge=0.0, le=1.0),
44
+ repetition_penalty: float = Query(1.2, ge=1.0, le=2.0),
45
+ stream: bool = Query(False, description="Set to True to return response stream, False to return full text")):
46
+ formatted_prompt = format_prompt(prompt_request.message, prompt_request.history)
47
+ generate_kwargs = dict(
48
+ temperature=temperature,
49
+ max_new_tokens=max_new_tokens,
50
+ top_p=top_p,
51
+ repetition_penalty=repetition_penalty,
52
+ do_sample=True,
53
+ seed=42,
54
+ )
55
+
56
+ if stream:
57
+ response_stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
58
+ return EventSourceResponse(generate_responses(response_stream), media_type="text/event-stream") # media_type="application/x-ndjson"
59
+ else:
60
+ response = client.text_generation(formatted_prompt, **generate_kwargs, stream=False, details=True, return_full_text=False)
61
+ return response.generated_text
62
+
63
+ @app.post("/translate")
64
+ def translate(text: str, source: str, target: str):
65
+ if source == target:
66
+ return {"translated_text": text}
67
+
68
+ translator = GoogleTranslator(source=source, target=target)
69
+ translated_text = translator.translate(text)
70
+ return {"translated_text": translated_text}
requirements.txt ADDED
Binary file (1.14 kB). View file