ExTypesense.Conversation (ExTypesense v1.2.0)

View Source

Typesense 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/2 but passes another connection.

Retrieve all conversation models

Same as list_models/1 but passes another connection.

Update a conversation model

Same as update_model/3 but passes another connection.

Functions

create_model(body)

(since 1.0.0)
@spec create_model(map()) ::
  {:ok, OpenApiTypesense.ConversationModelSchema.t()}
  | {:error, OpenApiTypesense.ApiResponse.t()}

Create conversation model.

Typesense currently supports the following LLM platforms:

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)

create_model(body, opts)

(since 1.0.0)

Same as create_model/1

ExTypesense.create_model(body, [])

ExTypesense.create_model(%{api_key: xyz, host: ...}, body)

ExTypesense.create_model(OpenApiTypesense.Connection.new(), body)

create_model(conn, body, opts)

(since 1.0.0)

Same as create_model/2 but passes another connection.

ExTypesense.create_model(%{api_key: xyz, host: ...}, body, [])

ExTypesense.create_model(OpenApiTypesense.Connection.new(), body, [])

delete_model(model_id)

(since 1.0.0)
@spec delete_model(String.t()) ::
  {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error

Delete a conversation model

delete_model(model_id, opts)

(since 1.0.0)
@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)

delete_model(conn, model_id, opts)

(since 1.0.0)

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, [])

get_model(model_id)

(since 1.0.0)
@spec get_model(String.t()) ::
  {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error

Retrieve a conversation model

get_model(model_id, opts)

(since 1.0.0)

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")

get_model(conn, model_id, opts)

(since 1.0.0)

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", [])

list_models()

(since 1.0.0)
@spec list_models() :: {:ok, [OpenApiTypesense.ConversationModelSchema.t()]} | :error

Retrieve all conversation models

list_models(opts)

(since 1.0.0)

Same as list_models/0

ExTypesense.list_models([])

ExTypesense.list_models(%{api_key: xyz, host: ...})

ExTypesense.list_models(OpenApiTypesense.Connection.new())

list_models(conn, opts)

(since 1.0.0)

Same as list_models/1 but passes another connection.

ExTypesense.list_models(%{api_key: xyz, host: ...}, [])

ExTypesense.list_models(OpenApiTypesense.Connection.new(), [])

update_model(model_id, body)

(since 1.0.0)
@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)

update_model(model_id, body, opts)

(since 1.0.0)
@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)

update_model(conn, model_id, body, opts)

(since 1.0.0)
@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, [])