Spaces:
Build error
Build error
| import openai, tiktoken, os | |
| import pandas as pd | |
| from openai.embeddings_utils import get_embedding, cosine_similarity | |
| # embedding model parameters | |
| embedding_model = "text-embedding-ada-002" | |
| embedding_encoding = "cl100k_base" # this the encoding for text-embedding-ada-002 | |
| max_tokens = 8000 # the maximum for text-embedding-ada-002 is 8191 | |
| encoding = tiktoken.get_encoding("cl100k_base") | |
| def set_openai_api_key(api_key): | |
| if api_key and api_key.startswith("sk-") and len(api_key) > 50: | |
| openai.api_key = api_key | |
| else: | |
| raise gr.Error("OpenAI API key incorrect.") | |
| # Prepare prompt | |
| def prepare_prompt(prompt, results): | |
| tokens_limit = 16000 # Limit for gpt-3.5-turbo-16k | |
| user_start = ( | |
| "請只根據下述的文本,使用繁體中文(zh-TW)回答問題。排除相似重複的語意,用字精鍊而清晰,出現過一次的人名就不需要一直顯示全名以及完整職稱。請嚴格遵守只根據下述的文本的規定,如果詢問的問題超過文本的範圍,請回答你不知道。\n\n"+ | |
| "文本:\n" | |
| ) | |
| user_end = ( | |
| f"\n\n問題: {prompt}\n 答案:" | |
| ) | |
| system = """ | |
| 你是一個萬能文字助手,你擅長從大量的文章中,辨識出相關主題,並整理成重點摘要。 | |
| """ | |
| count_of_tokens_consumed = len(encoding.encode("\"role\":\"system\"" + | |
| "\"content\" :\"" + system + | |
| user_start + "\n\n---\n\n" + user_end )) | |
| count_of_tokens_for_context = tokens_limit - count_of_tokens_consumed | |
| contexts ="" | |
| # Fill in context as long as within limit | |
| for i in range(len(results)): | |
| if (count_of_tokens_for_context>=results.n_tokens.iloc[i]): | |
| contexts += results.text.iloc[i] + "\n" | |
| count_of_tokens_for_context -=1 | |
| count_of_tokens_for_context -= results.n_tokens.iloc[i] | |
| complete_prompt = user_start + contexts + "\n\n---\n\n" + user_end | |
| return complete_prompt | |
| def answer(messages): | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo-16k", | |
| messages=messages, | |
| temperature=0, | |
| stream=True | |
| ) | |
| return response | |