Skip to content

Commit f815a78

Browse files
authored
Merge pull request #1 from upmaru/feature/create-agentic-message
Setup agentic namespace and agentic message creation
2 parents 781c18a + c42515a commit f815a78

File tree

12 files changed

+732
-376
lines changed

12 files changed

+732
-376
lines changed

lib/tama_ex/messaging/response.ex renamed to lib/tama_ex/agentic.ex

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
defmodule TamaEx.Messaging.Response do
2-
def create(client, body, options \\ []) do
3-
with {:ok, validated_client} <- TamaEx.validate_client(client, ["api"]) do
4-
path = "/chat/completions"
1+
defmodule TamaEx.Agentic do
2+
alias TamaEx.Message.Params, as: MessageParams
3+
4+
def create_message(client, body, options \\ []) do
5+
with {:ok, validated_client} <- TamaEx.validate_client(client, ["agentic"]),
6+
{:ok, message_params} <- MessageParams.validate(body) do
7+
path = "/messages"
58
timeout = Keyword.get(options, :timeout) || 300_000
69
headers = Keyword.get(options, :headers) || []
710
stream? = Map.get(body, "stream") || Map.get(body, :stream)
@@ -29,7 +32,7 @@ defmodule TamaEx.Messaging.Response do
2932
Req.merge(validated_client,
3033
method: :post,
3134
url: path,
32-
json: body,
35+
json: %{message: message_params},
3336
receive_timeout: timeout,
3437
headers: headers
3538
)

lib/tama_ex/agentic/message.ex

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
defmodule TamaEx.Agentic.Message do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@primary_key false
6+
embedded_schema do
7+
field :id, :binary_id
8+
field :identifier, :string
9+
field :current_state, :string
10+
end
11+
12+
def changeset(message, attrs) do
13+
message
14+
|> cast(attrs, [:id, :identifier, :current_state])
15+
|> validate_required([:id, :identifier, :current_state])
16+
end
17+
18+
def parse!(attrs) do
19+
%__MODULE__{}
20+
|> changeset(attrs)
21+
|> apply_action!(:insert)
22+
end
23+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
defmodule TamaEx.Agentic.Message.Author do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
@primary_key false
8+
embedded_schema do
9+
field :class, :string, default: "actor"
10+
field :identifier, :string
11+
field :source, :string
12+
end
13+
14+
def changeset(author, attrs) do
15+
author
16+
|> cast(attrs, [:class, :identifier, :source])
17+
|> validate_required([:class, :identifier, :source])
18+
end
19+
end
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
defmodule TamaEx.Agentic.Message.Params do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
alias TamaEx.Agentic.Message.Author
8+
alias TamaEx.Agentic.Message.Thread
9+
10+
@valid_attrs [
11+
:recipient,
12+
:class,
13+
:identifier,
14+
:content,
15+
:index
16+
]
17+
18+
@primary_key false
19+
embedded_schema do
20+
field :recipient, :string
21+
field :class, :string, default: "user-message"
22+
field :identifier, :string
23+
24+
embeds_one :author, Author
25+
embeds_one :thread, Thread
26+
27+
field :content, :string
28+
field :index, :integer
29+
end
30+
31+
def changeset(params, attrs) do
32+
params
33+
|> cast(attrs, @valid_attrs)
34+
|> validate_required(@valid_attrs)
35+
|> cast_embed(:author, required: true)
36+
|> cast_embed(:thread, required: true)
37+
end
38+
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
defmodule TamaEx.Agentic.Message.Thread do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
@primary_key false
8+
embedded_schema do
9+
field :class, :string, default: "thread"
10+
field :identifier, :string
11+
end
12+
13+
def changeset(thread, attrs) do
14+
thread
15+
|> cast(attrs, [:class, :identifier])
16+
|> validate_required([:identifier])
17+
end
18+
end

lib/tama_ex/message/params.ex

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
defmodule TamaEx.Message.Params do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
alias TamaEx.Message.Params.Author
8+
alias TamaEx.Message.Params.Thread
9+
10+
@valid_attrs [
11+
:recipient,
12+
:class,
13+
:identifier,
14+
:content,
15+
:index,
16+
:stream
17+
]
18+
19+
@primary_key false
20+
embedded_schema do
21+
field :recipient, :string
22+
field :class, :string, default: "user-message"
23+
field :identifier, :string
24+
field :content, :string
25+
field :index, :integer
26+
field :stream, :boolean, default: false
27+
28+
embeds_one :author, Author
29+
embeds_one :thread, Thread
30+
end
31+
32+
def changeset(params, attrs) do
33+
params
34+
|> cast(attrs, @valid_attrs)
35+
|> validate_required([:recipient, :identifier, :content, :index])
36+
|> cast_embed(:author, required: true)
37+
|> cast_embed(:thread, required: true)
38+
end
39+
40+
def validate(attrs) when is_map(attrs) do
41+
%__MODULE__{}
42+
|> changeset(attrs)
43+
|> case do
44+
%Ecto.Changeset{valid?: true} = changeset ->
45+
{:ok, apply_changes(changeset)}
46+
47+
%Ecto.Changeset{valid?: false} = changeset ->
48+
raise Ecto.InvalidChangesetError, action: :validate, changeset: changeset
49+
end
50+
end
51+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
defmodule TamaEx.Message.Params.Author do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
@primary_key false
8+
embedded_schema do
9+
field :class, :string, default: "actor"
10+
field :identifier, :string
11+
field :source, :string
12+
end
13+
14+
def changeset(author, attrs) do
15+
author
16+
|> cast(attrs, [:class, :identifier, :source])
17+
|> validate_required([:identifier, :source])
18+
end
19+
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
defmodule TamaEx.Message.Params.Thread do
2+
use Ecto.Schema
3+
import Ecto.Changeset
4+
5+
@derive Jason.Encoder
6+
7+
@primary_key false
8+
embedded_schema do
9+
field :class, :string, default: "thread"
10+
field :identifier, :string
11+
end
12+
13+
def changeset(thread, attrs) do
14+
thread
15+
|> cast(attrs, [:class, :identifier])
16+
|> validate_required([:identifier])
17+
end
18+
end

lib/tama_ex/messaging.ex

Lines changed: 0 additions & 5 deletions
This file was deleted.

lib/tama_ex/perception/concept.ex

Whitespace-only changes.

0 commit comments

Comments
 (0)