File size: 7,084 Bytes
28d83b9 9db1c18 28d83b9 64b9eb4 28d83b9 9db1c18 28d83b9 9db1c18 28d83b9 9db1c18 28d83b9 35f295e 28d83b9 9db1c18 28d83b9 9db1c18 28d83b9 9db1c18 28d83b9 ce9633f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
from fastapi import FastAPI, status
from fastapi.responses import HTMLResponse
from pydantic import BaseModel
from fastapi.responses import JSONResponse, StreamingResponse
import requests
import json
import openai
import time
from langchain.embeddings.openai import OpenAIEmbeddings
import langchain
class Text(BaseModel):
content: str = ""
app = FastAPI()
key = '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'
openai.api_key = key
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + key
}
@app.get("/")
def home():
html_content = open('index.html').read()
return HTMLResponse(content=html_content, status_code=200)
@app.post("/qa_maker")
def sentiment_analysis_ep(content: Text = None):
url = 'https://api.openai.com/v1/chat/completions'
prompt = 'According to the article below, generate "question and answer" QA pairs, greater than 5, in a json format per line({“question”:"xxx","answer":"xxx"})generate:\n'
messages = [{"role": "user", "content": prompt + content.content}]
data = {
"model": "gpt-3.5-turbo",
"messages": messages
}
print("messages = \n", messages)
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
res = str(result.json()['choices'][0]['message']['content']).strip()
print('res:', res)
res = {'content': res}
return JSONResponse(content=res)
@app.post("/chatpdf")
def chat_pdf_ep(content: Text = None):
url = 'https://api.openai.com/v1/chat/completions'
messages = [
{
"role": "system",
"content": "You are a useful assistant to answer questions accurately using the content of the article."
}
]
obj = json.loads(content.content)
messages.append({"role": "system", "content": "Article content:\n" + obj['doc']})
history = obj['history']
for his in history:
messages.append({"role": "user", "content": his[0]})
messages.append({"role": "assistant", "content": his[1]})
messages.append({"role": "user", "content": obj['question']})
data = {
"model": "gpt-3.5-turbo",
"messages": messages
}
print("messages = \n", messages)
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
res = str(result.json()['choices'][0]['message']['content']).strip()
content = {'content': res}
print('content:', content)
return JSONResponse(content=content)
@app.post("/sale")
def sale_ep(content: Text = None):
url = 'https://api.openai.com/v1/chat/completions'
messages = [
{
"role": "system",
"content": "You are a useful assistant to answer questions accurately using the content of the article"
}
]
obj = json.loads(content.content)
messages.append({"role": "system", "content": "Article content:\n" + obj['doc']})
history = obj['history']
for his in history:
messages.append({"role": "user", "content": his[0]})
messages.append({"role": "assistant", "content": his[1]})
messages.append({"role": "user", "content": obj['question']})
data = {
"model": "gpt-3.5-turbo",
"messages": messages
}
print("messages = \n", messages)
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
res = str(result.json()['choices'][0]['message']['content']).strip()
content = {'content': res}
print('content:', content)
return JSONResponse(content=content)
@app.post("/chatgpt")
def chat_gpt_ep(content: Text = None):
url = 'https://api.openai.com/v1/chat/completions'
obj = json.loads(content.content)
data = {
"model": "gpt-3.5-turbo",
"messages": obj['messages']
}
print("data = \n", data)
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
res = str(result.json()['choices'][0]['message']['content']).strip()
content = {'content': res}
print('content:', content)
return JSONResponse(content=content)
async def chat_gpt_stream_fun(content: Text = None):
start_time = time.time()
obj = json.loads(content.content)
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=obj['messages'],
stream=True, # this time, we set stream=True
)
# create variables to collect the stream of chunks
collected_chunks = []
collected_messages = []
# iterate through the stream of events
for chunk in response:
chunk_time = time.time() - start_time # calculate the time delay of the chunk
collected_chunks.append(chunk) # save the event response
chunk_message = chunk['choices'][0]['delta'] # extract the message
collected_messages.append(chunk_message) # save the message
print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}") # print the delay and text
full_reply_content = ''.join([m.get('content', '') for m in collected_messages])
print(f"Full conversation received: {full_reply_content}")
content = {'content': full_reply_content}
print('content:', content)
yield json.dumps(content) + '\n'
@app.post("/chatgptstream", status_code=status.HTTP_200_OK)
async def get_random_numbers(content: Text = None):
return StreamingResponse(chat_gpt_stream_fun(content), media_type='application/json')
@app.post("/embeddings")
def embeddings_ep(content: Text = None):
url = 'https://api.openai.com/v1/embeddings'
data = {
"model": "text-embedding-ada-002",
"input": content.content
}
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
return JSONResponse(content=result.json())
@app.post("/embedd")
def embed(content: Text = None):
url = 'https://api.openai.com/v1/embeddings'
data = {
"model": "text-embedding-ada-002",
"input": content.content
}
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
embeddings = OpenAIEmbeddings(openai_api_key= key)
return key
@app.post("/create_image")
def create_image_ep(content: Text = None):
url = 'https://api.openai.com/v1/images/generations'
obj = json.loads(content.content)
data = {
"prompt": obj["prompt"],
"n": obj["n"],
"size": obj["size"]
}
print("data = \n", data)
result = requests.post(url=url,
data=json.dumps(data),
headers=headers
)
return JSONResponse(content=result.json()) |