Restaurant / gen9
Viewer
!new Restaurant('restaurant9')
!restaurant9.name := 'Galactic Bistro'
!new Owner('owner18')
!owner18.name := 'Scott Moon'
!owner18.percentageShares := 50
!insert (restaurant9, owner18) into RestaurantOwner
!new Owner('owner19')
!owner19.name := 'Linda Star'
!owner19.percentageShares := 50
!insert (restaurant9, owner19) into RestaurantOwner
!new Table('table24')
!table24.number := 24
!table24.description := 'Stargazer seat'
!table24.capacity := 2
!new Table('table25')
!table25.number := 25
!table25.description := 'Nebula room'
!table25.capacity := 18
!new RegularCustomer('customer10')
!customer10.name := 'Victor Vega'
!customer10.prefferedLanguage := #Spanish
!new Waiter('waiter11')
!waiter11.name := 'Chris Hudson'
!waiter11.dateOfBirth := Date('1991-11-12')
!waiter11.phoneNumber := '555-1234'
!waiter11.spokenLanguage := #English
!new HeadWaiter('headwaiter9')
!headwaiter9.name := 'Fiona Brooks'
!headwaiter9.dateOfBirth := Date('1980-04-30')
!headwaiter9.phoneNumber := '555-5678'
!insert (headwaiter9, waiter11) into HeadWaiterWaiter
!new Individual('reservation15')
!reservation15.time := Time('22:00')
!reservation15.date := Date('2023-11-10')
!reservation15.numberPeople := 2
!reservation15.name := 'Victor Vega'
!reservation15.phoneNumber := '555-4321'
!reservation15.number := 15
!reservation15.seating := #Inside
!reservation15.smoking := #NonSmoking
!insert (restaurant9, reservation15) into RestaurantReservation
!insert (reservation15, customer10) into ReservationCustomer
!insert (reservation15, waiter11) into ReservationWaiter
!insert (reservation15, table24) into ReservationTable
!new Banquet('reservation16')
!reservation16.time := Time('21:00')
!reservation16.date := Date('2024-03-15')
!reservation16.numberPeople := 30
!reservation16.name := 'Cosmic Gala'
!reservation16.phoneNumber := '555-6543'
!reservation16.number := 16
!reservation16.groupName := 'Space Explorers Club'
!reservation16.paymentMethod := #CreditCard
!reservation16.busService := true
!insert (restaurant9, reservation16) into RestaurantReservation
!insert (reservation16, table25) into ReservationTable
!insert (reservation16, waiter11) into ReservationWaiter
!new Table('tableExtra3')
!tableExtra3.number := 26
!tableExtra3.description := 'Galaxy Lounge'
!tableExtra3.capacity := 14
!insert (reservation16, tableExtra3) into ReservationTable
!new BusDriver('busdriver6')
!busdriver6.name := 'Alex Parker'
!busdriver6.dateOfBirth := Date('1965-09-22')
!busdriver6.phoneNumber := '555-9988'
!busdriver6.driverLicenseNr := 'DL345678'
!insert (reservation16, busdriver6) into BanquetBusDriver
!new ItemOrder('itemOrder9')
!itemOrder9.time := Time('22:15')
!insert (reservation15, itemOrder9) into ReservationItemOrdered
!new MenuItem('menuItem9')
!menuItem9.description := 'Meteorite Medley'
!menuItem9.prepTime := 20.0
!menuItem9.classification := #Apetizer
!insert (itemOrder9, menuItem9) into ItemOrderMenuItem
!new FoodItem('foodItem9')
!foodItem9.number := 109
!foodItem9.description := 'Assorted Berries'
!foodItem9.purchaseFlag := true
!foodItem9.unit := #Gram
!insert (menuItem9, foodItem9) into MenuItemFoodItem
!new Allergen('allergen9')
!allergen9.type := #Nuts
!insert (foodItem9, allergen9) into FoodItemAllergen
!new Cook('cook9')
!cook9.name := 'Benjamin Wright'
!cook9.dateOfBirth := Date('1990-07-21')
!cook9.phoneNumber := '555-2121'
!cook9.yearsOfExperience := 5
!new Chef('chef9')
!chef9.name := 'Emily Carter'
!chef9.dateOfBirth := Date('1986-02-28')
!chef9.phoneNumber := '555-3434'
!insert (menuItem9, chef9) into MenuItemChef
!insert (chef9, cook9) into ChefCook model Restaurant
dataType Date
operations
Date (date : String)
end
dataType Time
operations
Time (time : String)
end
enum SeatingPreference {
Inside,
Patio
}
enum SmokingPreference {
Smoking,
NonSmoking
}
enum PaymentMethod {
Cash,
CreditCard
}
enum ItemType {
Apetizer,
Main,
Dessert,
Beverage
}
enum UnitOfMeasure {
Ounce,
Sheet,
Pound,
Gram,
Dozen
}
enum AllergenType {
Lactose,
Seafood,
Nuts,
Gluten
}
enum Diet {
Vegetarian,
Vegan,
Kosher,
Halal
}
enum Language {
English,
Spanish,
German,
Italian
}
class Restaurant
attributes
name : String
end
abstract class Reservation
attributes
time : Time
date : Date
numberPeople : Integer
name : String
phoneNumber : String
number : Integer
end
class Individual < Reservation
attributes
seating : SeatingPreference
smoking : SmokingPreference
end
class Banquet < Reservation
attributes
groupName : String
paymentMethod : PaymentMethod
busService : Boolean
end
class Table
attributes
number : Integer
description : String
capacity : Integer
end
class ItemOrder
attributes
time : Time
end
class MenuItem
attributes
description : String
prepTime : Real
classification : ItemType
end
class FoodItem
attributes
number : Integer
description : String
purchaseFlag : Boolean
unit : UnitOfMeasure
end
class Allergen
attributes
type : AllergenType
end
class Person
attributes
name : String
end
class Owner < Person
attributes
percentageShares : Integer
end
class RegularCustomer < Person
attributes
prefferedLanguage : Language
end
class DietaryRequirement
attributes
diet : Diet
end
class ReportedAllergy
attributes
allergen : AllergenType
end
abstract class Worker < Person
attributes
dateOfBirth : Date
phoneNumber : String
end
class HeadWaiter < Worker
end
class Waiter < Worker
attributes
spokenLanguage : Language
end
class Manager < Worker
end
class Cook < Worker
attributes
yearsOfExperience : Integer
end
class Chef < Worker
end
class BusDriver < Worker
attributes
driverLicenseNr : String
end
association RestaurantOwner between
Restaurant [1..*]
Owner [1..*]
end
association RestaurantReservation between
Restaurant [0..1]
Reservation [0..*]
end
association ReservationCustomer between
Reservation [0..*]
RegularCustomer [0..1]
end
association ReservationWaiter between
Reservation [*]
Waiter [1..*] role servedBy
end
association BanquetBusDriver between
Banquet [1]
BusDriver [0..*]
end
association ReservationTable between
Reservation [1]
Table [1..*] role assignedTo
end
association ReservationItemOrdered between
Reservation [1]
ItemOrder [0..*]
end
association ItemOrderMenuItem between
ItemOrder [*]
MenuItem [1] role item
end
association MenuItemFoodItem between
MenuItem [*] role isUtilized
FoodItem [*] role utilizes
end
association FoodItemAllergen between
FoodItem [*]
Allergen [*] role contains
end
association MenuItemChef between
MenuItem [*] role designs
Chef [1] role designedBy
end
association ChefCook between
Chef [1] role underSupervisionOf
Cook [1..*] role supervises
end
association HeadWaiterWaiter between
HeadWaiter [1]
Waiter [1..*] role responsibleFor
end
constraints
context Table inv PositiveCapacity:
self.capacity > 0
context Cook inv PositiveExperience:
self.yearsOfExperience >= 0
context Restaurant inv TotalOwnerShares:
self.owner -> collect(o | o.percentageShares) -> sum() = 100
context Reservation inv TablesCapacityGreaterThanPeople:
self.assignedTo -> collect(t | t.capacity) -> sum() >= self.numberPeople Given a conceptual model expressed in the UML-based Specification Environment (USE), your task is to generate valid and realistic instances that conform to the provided model. <requirements> - Instances must be syntactically correct according to the USE syntax_reference. - Avoid unnecessary comments and output the instance in plain text (i.e., not markdown). - Make sure instances fulfill all the model's constraints, and that multiplicities, relationships, and attributes are valid and realistic. - Provide multiple instances with diverse data values and structure. </requirements> <syntax_reference> Here there is a snippet showing how to create objects and set values in the specific .soil language required: -- This is a comment example -- Primitive data types: -- Integer i.e. 1, 2, 3, etc. -- Real i.e. 1.0, 21.89, 322.05556, etc. -- Boolean i.e. true or false -- String i.e. 'Hello World' -- You can create instances with the following syntax: !new <instance type>('<instance name>') -- Example: !new Client('client1') !new Store('store4') -- You can assign values to attributes for a created instance with the following syntax: !<instance name>.<attribute name> := <value> -- Example for different data types: !client1.clientId := 1 -- For Integer !client1.balance := 1123.45 -- For Real !client1.name := 'John' -- For Strings !store4.available := true -- For Boolean -- You can create associations between instances with the following syntax: !insert (<instance name1>, <instance name2>) into <association name> -- Example: !insert (client1, store4) into ClientStore -- Custom data types usage: -- dataType Location -- operations -- Location(x : Real, y : Real) -- some other operations -- end -- You can create custom data types by calling the constructor directly; in this case, the constructor of Location requires two arguments: x and y of type Real. So it can be used as follows: !store4.location := Location(14.0, 289.0) -- Enums usage: -- enum Type { Clothes, Shoes } -- Can be used as follows: !store4.type := #Clothes </syntax_reference> Please generate another instance that is structurally and semantically different from the previous ones. <role>
You are an expert software and system modeler. You are able to assess the semantic quality of object models that have been created to conform to a domain model. The models are defined in USE (UML-based Specification Environment) and OCL (Object Constraint Language).
Your primary capability is "Semantic Reality Checking". You do not just check for syntactic correctness; you check for real-world plausibility and logical consistency within a given domain.
</role>
<context>
The user will provide two types of content:
1. **Domain Model (.use)**: A class diagram definition including classes, attributes, enums, relationships, multiplicities and roles.
2. **Object Model (.soil)**: An object model. This object model can be seen as a script composed of instructions for the creation of objects, relationships and setting attribute values (snapshot).
Your goal is to act as a judge to determine if the object model represents a **REALISTIC** scenario based on the domain model and common sense real-world logic.
</context>
<definitions>
- **Realistic**: The object model is syntactically correct AND semantically plausible (e.g., A 'Person' has an age between 0 and 120; a 'Car' has a positive price).
- **Unrealistic**: The object model contains contradictions, impossible physical values, or nonsensical relationships (e.g., A 'Person' is their own father; a 'Product' has a negative weight).
- **Doubtful**: You cannot determine whether the object model is realistic or not.
</definitions>
<instructions>
Follow this thinking process strictly before generating the final output:
1. **Analyze the Domain (.use)**: Understand the classes and what they represent in the real world.
2. **Analyze the Instances (.soil)**: Map the created objects to their classes. Look at the specific values assigned to attributes and the relationships created between objects.
3. **Evaluate Semantics**:
- Apply "Common Sense Knowledge" to the attribute values.
- Check cardinality and relationship logic beyond simple OCL constraints.
- Identify any outliers or logical fallacies.
4. **Determine Verdict**: Select one of the defined labels (Realistic/Unrealistic/Doubtful).
</instructions>
<constraints>
- **Tone**: Objective, Analytical, Technical.
- **Verbosity**: Low. Be direct.
- **Reasoning**: The "Why" section must be concise and specific, citing variable names, objects, or relationships when possible.
- Do not output the internal thinking process. Only output the final formatted result.
</constraints>
<output_format>
Structure your response exactly as follows:
**Response**: [Realistic | Unrealistic | Doubtful]
**Why**: [Concise explanation of your reasoning. If Unrealistic, specify the exact objects, values or relationships that break realism.]
</output_format>
<examples>
Example 1:
Input:
<domain_model>
class Person
attributes
age: Integer
end
class Pet
attributes
name: String
end
association Ownership between
Person [1] role owner
Pet [*] role pets
end
</domain_model>
<object_model>
!new Person('p1')
!p1.age := 250
!new Pet('pet1')
!pet1.name := 'Luna'
… 1.000 more pets creation …
!pet1000.name := 'Max'
!insert (p1, pet1) into Ownership
…1.000 more pets associated with p1 …
!insert (p1, pet1000) into Ownership
</object_model>
Output:
**Response**: Unrealistic
**Why**: The object 'p1' of class 'Person' has an age of 250, which exceeds the biologically plausible lifespan of a human. Although it is not plausible that 1 same person owns 1.000 pets.
Example 2:
Input:
<domain_model>
class Car
attributes
brand: String
end
class Person
attributes
name: String
end
association Ownership between
Person [1] role owner
Car [*] role cars
end
</domain_model>
<object_model>
!new Person('p1')
!p1.age := 19
!new Car('c1')
!c1.brand := 'Toyota'
!insert (p1, c1) into Ownership
</object_model>
Output:
**Response**: Realistic
**Why**: The object 'c1' has a valid, recognized real-world car brand assigned, and its plausible that a teenager has only one car.
Example 3:
Input:
<domain_model>
class Component
attributes
setting_val: Integer
config_mode: String
end
</domain_model>
<object_model>
!new Component('c1')
!c1.setting_val := 8080
!c1.config_mode := 'Legacy'
</object_model>
Output:
**Response**: Doubtful
**Why**: The class 'Component' and attribute 'setting_val' are generic and lack specific real-world semantic context. Without knowing what specific physical or software system this represents, it is impossible to determine if '8080' is a realistic value or an outlier.
</examples> <domain_model>
model Restaurant
dataType Date
operations
Date (date : String)
end
dataType Time
operations
Time (time : String)
end
enum SeatingPreference {
Inside,
Patio
}
enum SmokingPreference {
Smoking,
NonSmoking
}
enum PaymentMethod {
Cash,
CreditCard
}
enum ItemType {
Apetizer,
Main,
Dessert,
Beverage
}
enum UnitOfMeasure {
Ounce,
Sheet,
Pound,
Gram,
Dozen
}
enum AllergenType {
Lactose,
Seafood,
Nuts,
Gluten
}
enum Diet {
Vegetarian,
Vegan,
Kosher,
Halal
}
enum Language {
English,
Spanish,
German,
Italian
}
class Restaurant
attributes
name : String
end
abstract class Reservation
attributes
time : Time
date : Date
numberPeople : Integer
name : String
phoneNumber : String
number : Integer
end
class Individual < Reservation
attributes
seating : SeatingPreference
smoking : SmokingPreference
end
class Banquet < Reservation
attributes
groupName : String
paymentMethod : PaymentMethod
busService : Boolean
end
class Table
attributes
number : Integer
description : String
capacity : Integer
end
class ItemOrder
attributes
time : Time
end
class MenuItem
attributes
description : String
prepTime : Real
classification : ItemType
end
class FoodItem
attributes
number : Integer
description : String
purchaseFlag : Boolean
unit : UnitOfMeasure
end
class Allergen
attributes
type : AllergenType
end
class Person
attributes
name : String
end
class Owner < Person
attributes
percentageShares : Integer
end
class RegularCustomer < Person
attributes
prefferedLanguage : Language
end
class DietaryRequirement
attributes
diet : Diet
end
class ReportedAllergy
attributes
allergen : AllergenType
end
abstract class Worker < Person
attributes
dateOfBirth : Date
phoneNumber : String
end
class HeadWaiter < Worker
end
class Waiter < Worker
attributes
spokenLanguage : Language
end
class Manager < Worker
end
class Cook < Worker
attributes
yearsOfExperience : Integer
end
class Chef < Worker
end
class BusDriver < Worker
attributes
driverLicenseNr : String
end
association RestaurantOwner between
Restaurant [1..*]
Owner [1..*]
end
association RestaurantReservation between
Restaurant [0..1]
Reservation [0..*]
end
association ReservationCustomer between
Reservation [0..*]
RegularCustomer [0..1]
end
association ReservationWaiter between
Reservation [*]
Waiter [1..*] role servedBy
end
association BanquetBusDriver between
Banquet [1]
BusDriver [0..*]
end
association ReservationTable between
Reservation [1]
Table [1..*] role assignedTo
end
association ReservationItemOrdered between
Reservation [1]
ItemOrder [0..*]
end
association ItemOrderMenuItem between
ItemOrder [*]
MenuItem [1] role item
end
association MenuItemFoodItem between
MenuItem [*] role isUtilized
FoodItem [*] role utilizes
end
association FoodItemAllergen between
FoodItem [*]
Allergen [*] role contains
end
association MenuItemChef between
MenuItem [*] role designs
Chef [1] role designedBy
end
association ChefCook between
Chef [1] role underSupervisionOf
Cook [1..*] role supervises
end
association HeadWaiterWaiter between
HeadWaiter [1]
Waiter [1..*] role responsibleFor
end
constraints
context Table inv PositiveCapacity:
self.capacity > 0
context Cook inv PositiveExperience:
self.yearsOfExperience >= 0
context Restaurant inv TotalOwnerShares:
self.owner -> collect(o | o.percentageShares) -> sum() = 100
context Reservation inv TablesCapacityGreaterThanPeople:
self.assignedTo -> collect(t | t.capacity) -> sum() >= self.numberPeople
</domain_model>
<object_model>
!new Restaurant('restaurant9')
!restaurant9.name := 'Galactic Bistro'
!new Owner('owner18')
!owner18.name := 'Scott Moon'
!owner18.percentageShares := 50
!insert (restaurant9, owner18) into RestaurantOwner
!new Owner('owner19')
!owner19.name := 'Linda Star'
!owner19.percentageShares := 50
!insert (restaurant9, owner19) into RestaurantOwner
!new Table('table24')
!table24.number := 24
!table24.description := 'Stargazer seat'
!table24.capacity := 2
!new Table('table25')
!table25.number := 25
!table25.description := 'Nebula room'
!table25.capacity := 18
!new RegularCustomer('customer10')
!customer10.name := 'Victor Vega'
!customer10.prefferedLanguage := #Spanish
!new Waiter('waiter11')
!waiter11.name := 'Chris Hudson'
!waiter11.dateOfBirth := Date('1991-11-12')
!waiter11.phoneNumber := '555-1234'
!waiter11.spokenLanguage := #English
!new HeadWaiter('headwaiter9')
!headwaiter9.name := 'Fiona Brooks'
!headwaiter9.dateOfBirth := Date('1980-04-30')
!headwaiter9.phoneNumber := '555-5678'
!insert (headwaiter9, waiter11) into HeadWaiterWaiter
!new Individual('reservation15')
!reservation15.time := Time('22:00')
!reservation15.date := Date('2023-11-10')
!reservation15.numberPeople := 2
!reservation15.name := 'Victor Vega'
!reservation15.phoneNumber := '555-4321'
!reservation15.number := 15
!reservation15.seating := #Inside
!reservation15.smoking := #NonSmoking
!insert (restaurant9, reservation15) into RestaurantReservation
!insert (reservation15, customer10) into ReservationCustomer
!insert (reservation15, waiter11) into ReservationWaiter
!insert (reservation15, table24) into ReservationTable
!new Banquet('reservation16')
!reservation16.time := Time('21:00')
!reservation16.date := Date('2024-03-15')
!reservation16.numberPeople := 30
!reservation16.name := 'Cosmic Gala'
!reservation16.phoneNumber := '555-6543'
!reservation16.number := 16
!reservation16.groupName := 'Space Explorers Club'
!reservation16.paymentMethod := #CreditCard
!reservation16.busService := true
!insert (restaurant9, reservation16) into RestaurantReservation
!insert (reservation16, table25) into ReservationTable
!insert (reservation16, waiter11) into ReservationWaiter
!new Table('tableExtra3')
!tableExtra3.number := 26
!tableExtra3.description := 'Galaxy Lounge'
!tableExtra3.capacity := 14
!insert (reservation16, tableExtra3) into ReservationTable
!new BusDriver('busdriver6')
!busdriver6.name := 'Alex Parker'
!busdriver6.dateOfBirth := Date('1965-09-22')
!busdriver6.phoneNumber := '555-9988'
!busdriver6.driverLicenseNr := 'DL345678'
!insert (reservation16, busdriver6) into BanquetBusDriver
!new ItemOrder('itemOrder9')
!itemOrder9.time := Time('22:15')
!insert (reservation15, itemOrder9) into ReservationItemOrdered
!new MenuItem('menuItem9')
!menuItem9.description := 'Meteorite Medley'
!menuItem9.prepTime := 20.0
!menuItem9.classification := #Apetizer
!insert (itemOrder9, menuItem9) into ItemOrderMenuItem
!new FoodItem('foodItem9')
!foodItem9.number := 109
!foodItem9.description := 'Assorted Berries'
!foodItem9.purchaseFlag := true
!foodItem9.unit := #Gram
!insert (menuItem9, foodItem9) into MenuItemFoodItem
!new Allergen('allergen9')
!allergen9.type := #Nuts
!insert (foodItem9, allergen9) into FoodItemAllergen
!new Cook('cook9')
!cook9.name := 'Benjamin Wright'
!cook9.dateOfBirth := Date('1990-07-21')
!cook9.phoneNumber := '555-2121'
!cook9.yearsOfExperience := 5
!new Chef('chef9')
!chef9.name := 'Emily Carter'
!chef9.dateOfBirth := Date('1986-02-28')
!chef9.phoneNumber := '555-3434'
!insert (menuItem9, chef9) into MenuItemChef
!insert (chef9, cook9) into ChefCook
</object_model> Individual.seating
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
Banquet.paymentMethod
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
MenuItem.classification
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
FoodItem.unit
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
Allergen.type
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
RegularCustomer.prefferedLanguage
Evenness (active groups) =
0.0000
Evenness (all groups) = 0.0000
LLM as a Judge
Unrealistic
The object model assigns the allergen 'Nuts' to the FoodItem 'Assorted Berries'. This is biologically and semantically unrealistic, as pure raw berries are fruits and do not naturally contain nut allergens.
Metrics
Stats
Stats Breakdown of the total cost and elapsed time for generating the instances. - Elapsed Time = Console Time (ie. Processing Time + API Calls)
- Cost = (input tokens * input price) + (output tokens * output price)
Stats
Breakdown of the total cost and elapsed time for generating the instances.
- Elapsed Time = Console Time (ie. Processing Time + API Calls)
- Cost = (input tokens * input price) + (output tokens * output price)
| Total Cost | $0.07 |
Validation
Validation Measures the correctness of the instantiation using the USE check function. - Syntax = 1 - (Total Number of syntax errors [use check] / Total Number of lines [instance])
- Multiplicities = 1 - (Total Number of multiplicities errors [use check] / Total Number of relationships ([instance] !insert))
- Invariants = 1 - (Total Number of invariants errors [use check] / Total Number of invariants ([model] constraints))
Validation
Measures the correctness of the instantiation using the USE check function.
- Syntax = 1 - (Total Number of syntax errors [use check] / Total Number of lines [instance])
- Multiplicities = 1 - (Total Number of multiplicities errors [use check] / Total Number of relationships ([instance] !insert))
- Invariants = 1 - (Total Number of invariants errors [use check] / Total Number of invariants ([model] constraints))
| Syntax | 0/96 |
| Multiplicities | 0/18 |
| Invariants | 0/4 |
Diversity
Diversity Measures the variability of the generated instances. Attributes (NumericEquals, StringEquals, StringLv): It identifies how much the LLM repeats specific values versus generating unique data points across instances (100%: Diverse, 0%: Repetitive). We group all generated attributes into bags (numeric and string) and then perform pairwise comparisons between every element to obtain. Structure (GED): Measures the Graph Edit Distance (GED) similarity between instances. Distribution (Shannon): Measures the entropy and evenness (balanced distribution) of the generated enum values. - NumericEquals = Total number of numeric attribute pairs with different values / Total number of possible pairs (n * (n - 1) / 2)
- StringEquals = Total number of string attribute pairs that are NOT exactly identical / Total number of possible pairs (n * (n - 1) / 2)
- StringLv = Sum of (Levenshtein Distance(a, b) / max(length(a), length(b))) for all string pairs / Total number of possible pairs (n * (n - 1) / 2)
- GED = Similarity = 1 - (GED / (0.5 * (GED_to_empty_A + GED_to_empty_B))). 1 = red = identical graphs, <=0.5 = green = different graphs. We consider as edit operations: Nodes, Edges, Node_Labels and Edge_Labels [https://github.com/a-coman/ged]
- Shannon (Active) = Entropy / log2(Number of unique groups actually generated). Measures how evenly the generated values are distributed, considering only the categories the LLM actually used.
- Shannon (All) = Entropy / log2(Total number of valid groups defined in the model). Measures how evenly the generated values are distributed against the full spectrum of all possible valid options defined in the .use file.
Diversity
Measures the variability of the generated instances. Attributes (NumericEquals, StringEquals, StringLv): It identifies how much the LLM repeats specific values versus generating unique data points across instances (100%: Diverse, 0%: Repetitive). We group all generated attributes into bags (numeric and string) and then perform pairwise comparisons between every element to obtain. Structure (GED): Measures the Graph Edit Distance (GED) similarity between instances. Distribution (Shannon): Measures the entropy and evenness (balanced distribution) of the generated enum values.
- NumericEquals = Total number of numeric attribute pairs with different values / Total number of possible pairs (n * (n - 1) / 2)
- StringEquals = Total number of string attribute pairs that are NOT exactly identical / Total number of possible pairs (n * (n - 1) / 2)
- StringLv = Sum of (Levenshtein Distance(a, b) / max(length(a), length(b))) for all string pairs / Total number of possible pairs (n * (n - 1) / 2)
- GED = Similarity = 1 - (GED / (0.5 * (GED_to_empty_A + GED_to_empty_B))). 1 = red = identical graphs, <=0.5 = green = different graphs. We consider as edit operations: Nodes, Edges, Node_Labels and Edge_Labels [https://github.com/a-coman/ged]
- Shannon (Active) = Entropy / log2(Number of unique groups actually generated). Measures how evenly the generated values are distributed, considering only the categories the LLM actually used.
- Shannon (All) = Entropy / log2(Total number of valid groups defined in the model). Measures how evenly the generated values are distributed against the full spectrum of all possible valid options defined in the .use file.
| Numeric | 98.1% |
| String Equals | 99.7% |
| String LV | 88.9% |
| Shannon (Active) | 0.000 ± 0.000 |
| Shannon (All) | 0.000 ± 0.000 |
Coverage
Model Coverage Measures the breadth of the instantiation. It answers: "How much of the structural blueprint (the model) was used?" - Classes = Total Unique Classes instantiated (!new) in the .soil / Total Number of classes (class) in the model .use
- Attributes = Total Unique Attributes instantiated (!Class.Attribute or !set) in the .soil / Total Number of attributes (attributes) in the model .use
- Relationships = Total Unique Relationships instantiated (!insert) in the .soil / Total Number of relationships (association, composition, aggregation) in the model .use
Model Coverage
Measures the breadth of the instantiation. It answers: "How much of the structural blueprint (the model) was used?"
- Classes = Total Unique Classes instantiated (!new) in the .soil / Total Number of classes (class) in the model .use
- Attributes = Total Unique Attributes instantiated (!Class.Attribute or !set) in the .soil / Total Number of attributes (attributes) in the model .use
- Relationships = Total Unique Relationships instantiated (!insert) in the .soil / Total Number of relationships (association, composition, aggregation) in the model .use
| Classes | 78.9% |
| Attributes | 89.7% |
| Relationships | 100.0% |
Uncovered Items 10
Classes 4
DietaryRequirementManagerPersonReportedAllergy
Attributes 6
DietaryRequirement.dietManager.dateOfBirthManager.nameManager.phoneNumberPerson.nameReportedAllergy.allergen
Instantiation
Instance Instantiation Measures the depth or density of the data. It answers: "Of the objects the LLM decided to create, how many of their available 'slots' did it fill?" - Classes = Total Number of classes (!new) in the instance / Total possible that could have been instantiated (infinity)
- Attributes = Total Number of attributes (!Class.Attribute or !set) in the instance / Total possible that could have been instantiated (sum(number of classes instantiated of that type * Class.Attributes))
- Relationships = Total Number of relationships (!insert) in the instance / Total possible that could have been instantiated (infinity)
Instance Instantiation
Measures the depth or density of the data. It answers: "Of the objects the LLM decided to create, how many of their available 'slots' did it fill?"
- Classes = Total Number of classes (!new) in the instance / Total possible that could have been instantiated (infinity)
- Attributes = Total Number of attributes (!Class.Attribute or !set) in the instance / Total possible that could have been instantiated (sum(number of classes instantiated of that type * Class.Attributes))
- Relationships = Total Number of relationships (!insert) in the instance / Total possible that could have been instantiated (infinity)
| Classes | 18/∞ |
| Attributes | 60/60 |
| Relationships | 18/∞ |