composite_model_route.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package schema
  2. import (
  3. "github.com/Wei-Shaw/sub2api/ent/schema/mixins"
  4. "github.com/Wei-Shaw/sub2api/internal/domain"
  5. "entgo.io/ent"
  6. "entgo.io/ent/dialect"
  7. "entgo.io/ent/dialect/entsql"
  8. "entgo.io/ent/schema"
  9. "entgo.io/ent/schema/edge"
  10. "entgo.io/ent/schema/field"
  11. "entgo.io/ent/schema/index"
  12. )
  13. // CompositeModelRoute holds model routing aliases for composite groups.
  14. type CompositeModelRoute struct {
  15. ent.Schema
  16. }
  17. func (CompositeModelRoute) Annotations() []schema.Annotation {
  18. return []schema.Annotation{
  19. entsql.Annotation{Table: "composite_model_routes"},
  20. }
  21. }
  22. func (CompositeModelRoute) Mixin() []ent.Mixin {
  23. return []ent.Mixin{
  24. mixins.TimeMixin{},
  25. mixins.SoftDeleteMixin{},
  26. }
  27. }
  28. func (CompositeModelRoute) Fields() []ent.Field {
  29. return []ent.Field{
  30. field.Int64("group_id"),
  31. field.String("public_model").
  32. MaxLen(200).
  33. NotEmpty().
  34. Comment("Client-facing model identifier or prefix."),
  35. field.String("match_type").
  36. MaxLen(20).
  37. Default("exact").
  38. Comment("exact or prefix."),
  39. field.String("target_platform").
  40. MaxLen(50).
  41. Default(domain.PlatformOpenAI).
  42. Comment("Concrete provider platform."),
  43. field.String("upstream_model").
  44. MaxLen(200).
  45. Default("").
  46. Comment("Provider model identifier; empty means public_model."),
  47. field.String("endpoint").
  48. MaxLen(50).
  49. Default("any").
  50. Comment("Endpoint scope such as any, messages, responses, chat_completions."),
  51. field.Int("priority").
  52. Default(100).
  53. Comment("Lower values win within the same match strength."),
  54. field.Bool("enabled").
  55. Default(true),
  56. field.String("notes").
  57. Optional().
  58. Nillable().
  59. SchemaType(map[string]string{dialect.Postgres: "text"}),
  60. }
  61. }
  62. func (CompositeModelRoute) Edges() []ent.Edge {
  63. return []ent.Edge{
  64. edge.To("group", Group.Type).
  65. Unique().
  66. Required().
  67. Field("group_id"),
  68. }
  69. }
  70. func (CompositeModelRoute) Indexes() []ent.Index {
  71. return []ent.Index{
  72. index.Fields("group_id"),
  73. index.Fields("group_id", "enabled"),
  74. index.Fields("group_id", "endpoint"),
  75. index.Fields("group_id", "target_platform"),
  76. index.Fields("deleted_at"),
  77. index.Fields("priority"),
  78. }
  79. }