Snodo.Prompt behaviour (snodo v0.1.0)

Copy Markdown View Source

Behaviour, compile-time DSL, and content builders for MCP prompts.

Prompt arguments are deliberately the flat string map defined by MCP rather than JSON Schema. Required arguments are checked by the router before render/2 runs. A prompt returns one or more user/assistant messages through Snodo.Result.prompt_get/2.

Summary

Functions

Builds base64-encoded audio content for a prompt message.

Returns and validates the protocol-neutral definition for a prompt module.

Builds embedded resource content for a prompt message.

Builds base64-encoded image content for a prompt message.

Builds a prompt message with a user or assistant role.

Builds a resource link for a prompt message.

Builds text content for a prompt message.

Callbacks

complete(t, t)

(optional)
@callback complete(Snodo.Completion.t(), Snodo.Context.t()) ::
  {:ok, Snodo.Result.t()} | {:error, Snodo.Error.t() | term()}

definition()

@callback definition() :: Snodo.Prompt.Definition.t()

render(arguments, t)

@callback render(arguments :: %{optional(String.t()) => String.t()}, Snodo.Context.t()) ::
  {:ok, Snodo.Result.t()} | {:error, Snodo.Error.t() | term()}

Functions

audio(encoded, mime_type, opts \\ [])

@spec audio(String.t(), String.t(), keyword()) :: map()

Builds base64-encoded audio content for a prompt message.

definition(prompt)

@spec definition(module()) :: Snodo.Prompt.Definition.t()

Returns and validates the protocol-neutral definition for a prompt module.

embedded_resource(resource_content, opts \\ [])

@spec embedded_resource(map(), keyword()) :: map()

Builds embedded resource content for a prompt message.

image(encoded, mime_type, opts \\ [])

@spec image(String.t(), String.t(), keyword()) :: map()

Builds base64-encoded image content for a prompt message.

message(role, content)

@spec message(:user | :assistant | String.t(), map()) :: map()

Builds a prompt message with a user or assistant role.

resource_link(uri, name, opts \\ [])

@spec resource_link(String.t(), String.t(), keyword()) :: map()

Builds a resource link for a prompt message.

text(value, opts \\ [])

@spec text(String.t(), keyword()) :: map()

Builds text content for a prompt message.