pinecone-plugin-assistant
Assistant plugin for Pinecone SDK
Description
Assistant
Interact with Pinecone's Assistant APIs, e.g. create, manage, and chat with assistants (currently in beta). Pinecone Assistant is also available in the console.
Quickstart
The following example highlights how to use an assistant to store and understand documents on a particular topic and chat with the assistant about those documents with the ultimate goal of semantically understanding your data.
from pinecone import Pinecone
from pinecone_plugins.assistant.models.chat import Message
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
# Create an assistant (in this case we'll store documents about planets)
space_assistant = pc.assistant.create_assistant(assistant_name="space")
# Upload information to your assistant
space_assistant.upload_file("./space-fun-facts.pdf")
# Once the upload succeeded, ask the assistant a question
msg = Message(content="How old is the earth?")
resp = space_assistant.chat_completions(messages=[msg])
print(resp)
# {'choices': [{'finish_reason': 'stop',
# 'index': 0,
# 'message': {'content': 'The age of the Earth is estimated to be '
# 'about 4.54 billion years, based on '
# 'evidence from radiometric age dating of '
# 'meteorite material and Earth rocks, as '
# 'well as lunar samples. This estimate has '
# 'a margin of error of about 1%.',
# 'role': 'assistant'}}],
# 'id': '00000000000000001a377ceeaabf3c18',
Assistants API
Create Assistant
To create an assistant, see the below example. This API creates a assistant with the specified name, metadata, and optional timeout settings.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
metadata = {"author": "Jane Doe", "version": "1.0"}
assistant = pc.assistant.create_assistant(
assistant_name="example_assistant",
instructions="Always use British English spelling and vocabulary.",
metadata=metadata,
timeout=30
)
Arguments:
assistant_nameThe name to assign to the assistant.- type:
str
- type:
instructionsCustom instructions for the assistant. These will be applied to all future chat interactions.- type:
Optional[str] = None
- type:
metadata: A dictionary containing metadata for the assistant.- type:
Optional[dict[str, any]] = None
- type:
timeout: Specify the number of seconds to wait until assistant operation is completed.- If None, wait indefinitely until operation completes
- If >=0, time out after this many seconds
- If -1, return immediately and do not wait.
- type:
Optional[int] = None
Returns:
AssistantModelobject with the following properties:name: Contains the name of the assistant.instructionsCustom instructions for the assistant.metadata: Contains the provided metadata.created_at: Contains the timestamp of when the assistant was created.updated_at: Contains the timestamp of when the assistant was last updated.status: Contains the status of the assistant. This is one of:- 'Initializing'
- 'Ready'
- 'Terminating'
- 'Failed'
Describe Assistant
The example below describes/fetches an assistant with the specified name. Will raise a 404 if no model exists with the specified name. There are two methods for this:
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistant = pc.assistant.describe_assistant(
assistant_name="example_assistant",
)
# we can also do this
assistant = pc.assistant.Assistant(
assistant_name="example_assistant",
)
Arguments:
assistant_name: The name of the assistant to fetch.- type:
str, required
- type:
Returns:
AssistantModelsee Create Assistant
Update Assistant
To update an assistant's metadata and/or instructions, see the below example.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
metadata = {"author": "Jane Doe", "version": "2.0"}
assistant = pc.assistant.update_assistant(
assistant_name="example_assistant",
instructions="Always use Australian English spelling and vocabulary.",
metadata=metadata,
)
Arguments:
assistant_name: The name of the assistant to fetch.- type:
str, required
- type:
instructionsCustom instructions for the assistant. These will be applied to all future chat interactions.- type:
Optional[str] = None
- type:
metadata: A dictionary containing metadata for the assistant. If provided, it will completely replace the existing metadata unless set toNone(default).- type:
Optional[dict[str, any]] = None
- type:
Returns:
AssistantModelsee Create Assistant
List Assistants
Lists all assistants created from the current project. Will raise a 404 if no assistant exists with the specified name.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistants = pc.assistant.list_assistants()
Returns:
List[AssistantModel]objects
Delete Assistant
Deletes a assistant with the specified name. Will raise a 404 if no assistant exists with the specified name.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
pc.assistant.delete_assistant(
assistant_name="example_assistant",
)
Arguments:
assistant_name: The name of the assistant to fetch.- type:
str, required
- type:
Returns:
- NoneType
Assistants Model API
Upload File to Assistant
Uploads a file from the specified path to this assistant for internal processing.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistant = pc.assistant.Assistant(
assistant_name="example_assistant",
)
# upload file
resp = assistant.upload_file(
file_path="/path/to/file.txt",
timeout=None
)
Arguments:
-
file_path: The path to the file that needs to be uploaded.- type:
str, required
- type:
-
timeout: Specify the number of seconds to wait until file processing is done.- If
None, wait indefinitely. - If
>= 0, time out after this many seconds. - If
-1, return immediately and do not wait. - type:
Optional[int] = None
- If
-
metadata: Optional metadata dictionary to be attached to the file.- type:
Optional[dict[str, any]] = None
- type:
-
multimodal: Optional flag to opt in to multimodal file processing (PDFs only). Can be eithertrueorfalse. Default isfalse.- type:
Optional[bool] = None
- type:
Return
FileModelobject with the following properties:id: The file id of the uploaded file.name: The name of the uploaded file.created_on: The timestamp of when the file was created.updated_on: The timestamp of the last update to the file.metadata: Metadata associated with the file.status: The status of the file.
It's also possible to upload files data directly as bytes from memory.
from io import BytesIO
md_text = "# Title\n\ntext"
# Note: assistant currently supports only utf-8 for text based files
stream = BytesIO(md_text.encode("utf-8"))
assistant.upload_bytes_stream(stream, "myfile.md")
Describe File to Assistant
Describes a file with the specified file id from this assistant. Includes information on its status and metadata.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistant = pc.assistant.Assistant(
assistant_name="example_assistant",
)
# describe file
file = assistant.describe_file(file_id="070513b3-022f-4966-b583-a9b12e0290ff")
Arguments:
file_id: The file ID of the file to be described.- type:
str, required
- type:
Returns:
FileModelobject with the following properties:id: The UUID of the requested file.name: The name of the requested file.created_on: The timestamp of when the file was created.updated_on: The timestamp of the last update to the file.metadata: Metadata associated with the file.status: The status of the file.
List Files
Lists all uploaded files in this assistant.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistant = pc.assistant.Assistant(
assistant_name="example_assistant",
)
files = assistant.list_files()
Arguments: None
Returns:
List[FileModel], the list of files in the assistant
Delete file from assistant
Deletes a file with the specified file_id from this assistant.
from pinecone import Pinecone
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
assistant = pc.assistant.Assistant(
assistant_name="example_assistant",
)
# delete file
assistant.delete_file(file_id="070513b3-022f-4966-b583-a9b12e0290ff")
Arguments:
file_id: The file ID of the file to be described.- type:
str, required
- type:
Returns:
NoneType
Chat
Performs a chat request to the following assistant which returns a stream of chat results in our custom format. Use this API if you want to have more control over the format of the citations. If the stream bool is set to true, this function will stream the response in chunks by returning a generator.
from pinecone import Pinecone
from pinecone_plugins.assistant.models.chat import Message
pc = Pinecone(api_key='<<PINECONE_API_KEY>>')
space_assistant = pc.assistant.Assistant(assistant_name="space")
msg = Message(content="How old is the earth?")
resp = space_assistant.chat(messages=[msg])
# The stream version
chunks = space_assistant.chat(messages=[msg], stream=True)
for chunk in chunks:
if chunk:
print(chunk)
Arguments:
messages: The current context for the chat request. The final element in the list represents the user query to be made from this context.- type:
List[Message] or List[Dict]where `Message/Dict
- type: