Spaces:
No application file
No application file
| import gradio as gr | |
| from scipy.spatial.distance import cosine | |
| import pinecone | |
| from sentence_transformers import SentenceTransformer | |
| import openai | |
| # Initialize Pinecone | |
| pinecone.init(api_key='your pinecone key', | |
| environment='your environment') | |
| # Initialize the embedding model | |
| model = SentenceTransformer( | |
| 'sentence-transformers/distilbert-base-nli-mean-tokens') | |
| # Define department data | |
| departments = ["design", "video_production", "marketing"] | |
| # Generate embeddings for the departments | |
| vectors = model.encode(departments) | |
| # Create a Pinecone index | |
| index_name = "mojosolo" | |
| if index_name in pinecone.list_indexes(): | |
| pinecone.delete_index(name=index_name) | |
| pinecone.create_index(name=index_name, dimension=768, metric='cosine') | |
| # Insert department vectors into the Pinecone index | |
| index = pinecone.Index(index_name) | |
| upsert_response = index.upsert( | |
| vectors=list(zip(departments, [vector.tolist() for vector in vectors])), | |
| namespace="example-namespace" | |
| ) | |
| def get_department(message): | |
| query_vector = model.encode([message])[0] | |
| min_distance = 1.0 | |
| best_department = None | |
| for department, vector in zip(departments, vectors): | |
| distance = cosine(query_vector, vector) | |
| print(f"DEBUG: Department: {department}, Distance: {distance}") | |
| if distance < min_distance: | |
| min_distance = distance | |
| best_department = department | |
| if best_department is not None: | |
| return best_department | |
| else: | |
| print("DEBUG: No department found") | |
| return None | |
| openai.api_key = 'your api key' | |
| def chatbot(message): | |
| department = get_department(message) | |
| if department is not None: | |
| response = openai.Completion.create( | |
| engine="text-davinci-002", | |
| prompt=f"[{department}] {message}", | |
| max_tokens=50, | |
| n=1, | |
| stop=None, | |
| temperature=0.7, | |
| top_p=0.95, | |
| ) | |
| return response.choices[0].text.strip() | |
| else: | |
| return "Sorry, I couldn't understand your query." | |
| while True: | |
| user_input = input("You:") | |
| if user_input.lower() == "exit": | |
| break | |
| response = chatbot(user_input) | |
| print(f"Bot: {response}") | |
| # Query the Pinecone index using an example sentence | |
| query_sentence = "We need a new video advertisement campaign." | |
| query_vector = model.encode([query_sentence])[0] | |
| query_response = index.query( | |
| namespace="example-namespace", | |
| top_k=1, | |
| vector=query_vector.tolist() | |
| ) | |
| # Print the query results | |
| print("Query results:") | |
| if query_response.results: | |
| for result in query_response.results: | |
| print(f"ID: {result.id}, Distance: {result.distance}") | |
| else: | |
| print("No results found.") | |