ExTypesense.Conversation (ExTypesense v1.1.1)
View SourceTypesense has the ability to respond to free-form questions, with conversational responses and also maintain context for follow-up questions and answers.
More here: https://typesense.org/docs/latest/api/conversational-search-rag.html
Summary
Functions
Create conversation model.
Same as create_model/2 but passes another connection.
Delete a conversation model
Same as delete_model/2 but passes another connection.
Retrieve a conversation model
Same as get_model/1
Same as get_model/2 but passes another connection.
Retrieve all conversation models
Same as list_models/0
Same as list_models/1 but passes another connection.
Update a conversation model
Same as update_model/3 but passes another connection.
Functions
@spec create_model(map()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Create conversation model.
Typesense currently supports the following LLM platforms:
- OpenAI
- Cloudflare Workers AI
- vLLM(useful when running local LLMs)
Examples
iex> body = %{
...> "id" => "conv-model-1",
...> "model_name" => "openai/gpt-3.5-turbo",
...> "history_collection" => "conversation_store",
...> "api_key" => "OPENAI_API_KEY",
...> "system_prompt" => "You are an assistant for question-answering. You can only make conversations based on the provided context. If a response cannot be formed strictly using the provided context, politely say you do not have knowledge about that topic.",
...> "max_bytes" => 16_384
...> }
iex> ExTypesense.create_model(body)
@spec create_model(map() | OpenApiTypesense.Connection.t(), map() | keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
@spec create_model(map() | OpenApiTypesense.Connection.t(), map() | keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as create_model/1
ExTypesense.create_model(body, [])
ExTypesense.create_model(%{api_key: xyz, host: ...}, body)
ExTypesense.create_model(OpenApiTypesense.Connection.new(), body)
Same as create_model/2 but passes another connection.
ExTypesense.create_model(%{api_key: xyz, host: ...}, body, [])
ExTypesense.create_model(OpenApiTypesense.Connection.new(), body, [])
@spec delete_model(String.t()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Delete a conversation model
@spec delete_model( map() | OpenApiTypesense.Connection.t() | String.t(), String.t() | keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as delete_model/1
ExTypesense.delete_model(model_id, [])
ExTypesense.delete_model(%{api_key: xyz, host: ...}, model_id)
ExTypesense.delete_model(OpenApiTypesense.Connection.new(), model_id)
@spec delete_model(map() | OpenApiTypesense.Connection.t(), String.t(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as delete_model/2 but passes another connection.
ExTypesense.delete_model(%{api_key: xyz, host: ...}, model_id, [])
ExTypesense.delete_model(OpenApiTypesense.Connection.new(), model_id, [])
@spec get_model(String.t()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Retrieve a conversation model
@spec get_model( map() | OpenApiTypesense.Connection.t() | String.t(), String.t() | keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as get_model/1
ExTypesense.get_model("conv-model-1", [])
ExTypesense.get_model(%{api_key: xyz, host: ...}, "conv-model-1")
ExTypesense.get_model(OpenApiTypesense.Connection.new(), "conv-model-1")
@spec get_model(map() | OpenApiTypesense.Connection.t(), String.t(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as get_model/2 but passes another connection.
ExTypesense.get_model(%{api_key: xyz, host: ...}, "conv-model-1", [])
ExTypesense.get_model(OpenApiTypesense.Connection.new(), "conv-model-1", [])
@spec list_models() :: {:ok, [OpenApiTypesense.ConversationModelSchema.t()]} | :error
Retrieve all conversation models
@spec list_models(map() | OpenApiTypesense.Connection.t() | keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as list_models/0
ExTypesense.list_models([])
ExTypesense.list_models(%{api_key: xyz, host: ...})
ExTypesense.list_models(OpenApiTypesense.Connection.new())
@spec list_models( map() | OpenApiTypesense.Connection.t(), keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as list_models/1 but passes another connection.
ExTypesense.list_models(%{api_key: xyz, host: ...}, [])
ExTypesense.list_models(OpenApiTypesense.Connection.new(), [])
@spec update_model(String.t(), map()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Update a conversation model
Examples
iex>model_id = "conv-model-1"
iex> body = %{
...> "id" => model_id,
...> "model_name" => "openai/gpt-3.5-turbo",
...> "history_collection" => "conversation_store",
...> "api_key" => "OPENAI_API_KEY",
...> "system_prompt" => "Hey, you are an **intelligent** assistant for question-answering. You can only make conversations based on the provided context. If a response cannot be formed strictly using the provided context, politely say you do not have knowledge about that topic.",
...> "max_bytes" => 16_384
...> }
iex> ExTypesense.update_model(model_id, body)
@spec update_model( map() | OpenApiTypesense.Connection.t() | String.t(), String.t() | map(), map() | keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as update_model/2
ExTypesense.update_model(model_id, body, [])
ExTypesense.update_model(%{api_key: xyz, host: ...}, model_id, body)
ExTypesense.update_model(OpenApiTypesense.Connection.new(), model_id, body)
@spec update_model( map() | OpenApiTypesense.Connection.t(), String.t(), map(), keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as update_model/3 but passes another connection.
ExTypesense.update_model(%{api_key: xyz, host: ...}, model_id, body, [])
ExTypesense.update_model(OpenApiTypesense.Connection.new(), model_id, body, [])