Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/arg-tech/xaif/llms.txt

Use this file to discover all available pages before exploring further.

The graph structure in xAIF is encoded through three cooperating arrays: edges (which connect nodes to one another), locutions (which attribute each L-node to a speaker), and participants (which define the speakers themselves). Together they form a chain that links a real-world person all the way through to a processed propositional statement in the argument graph.

Edges

Every directed connection between two nodes is represented as an entry in AIF.edges. An edge carries no semantic weight of its own — the meaning of the connection is determined by the type of the node it points to or from (see Node Types).
{
  "edgeID": "123",
  "fromID": "2",
  "toID": "10"
}
FieldTypeDescription
edgeIDint or stringUnique identifier for the edge within the graph.
fromIDint or stringThe nodeID of the source node.
toIDint or stringThe nodeID of the target node.

Common edge patterns

The topology of an argument graph is built from three recurring two-edge patterns. In each case, a relation node is inserted between two content nodes, making the traversal direction explicit. Illocutionary link — connects a raw locution to its proposition:
L-node ──► YA-node ──► I-node
Inference / Support — one proposition supports another:
I-node (antecedent) ──► RA-node ──► I-node (consequent)
Conflict / Attack — one proposition attacks another:
I-node (attacker) ──► CA-node ──► I-node (attacked)
Rephrase — one proposition paraphrases another:
I-node (source) ──► MA-node ──► I-node (target)
Discourse transition — one locution responds to or follows another:
L-node (predecessor) ──► TA-node ──► L-node (successor)

Locutions

The AIF.locutions array provides speaker attribution for L-nodes. Each entry maps one L-node to one participant by pairing their respective IDs.
{
  "nodeID": "1265674",
  "personID": "0",
  "timestamp": "2023-10-11 15:34:32"
}
FieldTypeDescription
nodeIDint or stringThe nodeID of the L-node being attributed. Must match a node in AIF.nodes.
personIDint or stringThe participantID of the speaker. Must match a participant in AIF.participants.
timestampstringOptional. The time the utterance was made, independent of processing time.
A locution entry exists for every L-node that has a known speaker. In practice, every L-node in a dialogue graph will have a corresponding locution entry.

Participants

The AIF.participants array defines the speakers who appear in the dialogue. Each entry is a simple identity record.
{
  "participantID": "12",
  "firstname": "Sergiy",
  "surname": "Zhadan"
}
FieldTypeDescription
participantIDint or stringUnique identifier for the speaker. Referenced by locutions[].personID.
firstnamestringFirst name of the speaker. Use "" if unknown.
surnamestringSurname of the speaker. Use "" if unknown.

The full attribution chain

The five structures — participants, locutions, L-nodes, YA-nodes, and I-nodes — form an unbroken chain from speaker identity to propositional content:
Participant (participantID: 0, "Speaker 1")

    │  personID matches participantID

Locution (personID: 0, nodeID: 0)

    │  nodeID matches AIF.nodes entry

L-node (nodeID: 0, type: "L", text: "the SNP has disagreements.")

    │  edge: fromID 0 → toID 6

YA-node (nodeID: 6, type: "YA", text: "Default Illocuting")

    │  edge: fromID 6 → toID 5

I-node (nodeID: 5, type: "I", text: "the SNP has disagreements.")
The AIF.get_speaker(node_id) method resolves this chain automatically. Pass it any L-node ID and it returns a (fullname, personID) tuple by joining locutions and participants in a single pass. If the node ID is not found in the locutions, it returns ("None None", "None").

Build docs developers (and LLMs) love