ExTypesense.Conversation (ExTypesense v2.0.0)
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.
Delete a conversation model
Retrieve a conversation model
Same as get_model/1
Retrieve all conversation models
Same as list_models/0
Update a conversation model
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(), keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as create_model/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.create_model(body, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.create_model(body, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.create_model(body, opts)
@spec delete_model(String.t()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Delete a conversation model
@spec delete_model( String.t(), keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as delete_model/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.delete_model(model_id, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.delete_model(model_id, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.delete_model(model_id, opts)
@spec get_model(String.t()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Retrieve a conversation model
@spec get_model( String.t(), keyword() ) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as get_model/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.get_model("conv-model-1", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.get_model("conv-model-1", conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.get_model("conv-model-1", opts)
@spec list_models() :: {:ok, [OpenApiTypesense.ConversationModelSchema.t()]} | :error
Retrieve all conversation models
@spec list_models(keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as list_models/0
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.list_models(conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.list_models(conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.list_models(opts)
@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(String.t(), map(), keyword()) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
Same as update_model/2
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.update_model(model_id, body, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.update_model(model_id, body, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.update_model(model_id, body, opts)