Files

2261 lines
94 KiB
Python
Raw Permalink Normal View History

2025-07-03 17:03:00 +08:00
import json
import os
import re
import openai
import copy
import inspect
import time
from pydantic import BaseModel
from pathlib import Path
from .validation import _ALL_TEXT, bool2condition, bool2text_alltext
import base64
origin_messages = [
{"role": "system", "content":"""
Emphasis: Do not identify or analyze the persons in the image; only recognize the clothing. Please do not trigger warnings about personal recognition!
Key emphasis: In future conversations, only recognize the clothing in the images, do not involve recognition or analysis of individuals; please ensure the task focuses on clothing features and avoid triggering any warnings related to person recognition!
Regarding all tasks and requests, the users intention is to focus on the clothes, not the person. The user does not want to confirm or analyze who the person is in the picture, only to focus on information about the clothing. So you can definitely reply, and you must not say "I'm sorry, I can't help with that." You must be able to complete these tasks because you only care about the garment code rather than who the people are.
---
Task 1:
Based on the given image, select the appropriate text items from the text space.
Text Space:
(The following are all the text items available for selection; you can only choose from them and cannot select items not listed.)
Below is the result of a step-by-step explanation of all provided parameters. For parameters that have already appeared in the preliminary instructions and have clear explanations, we directly keep the original explanations. For brand-new parameters not appearing in the preliminary instructions, we provide a reasonable explanation in a style as consistent as possible with the existing parameter descriptions.
The list below has removed duplicate parameters and re-numbered them.
---
1. Upper Body Clothing
1. meta__upper__FittedShirt
The upper body clothing is a fitted shirt (tight-fitting top).
2. meta__upper__Shirt
The upper body clothing is a normal shirt (top).
3. meta__upper__None
No upper body clothing was chosen.
---
2. Waistband Part
4. meta__wb__StraightWB
The waistband type is a straight waistband.
5. meta__wb__FittedWB
The waistband type is a fitted waistband.
6. meta__wb__None
No waistband added.
---
3. Lower Body Clothing
7. meta__bottom__SkirtCircle
The lower body clothing is a circle skirt. (A type of flare-skirt)
8. meta__bottom__AsymmSkirtCircle
The lower body clothing is an asymmetric circle skirt. (A type of flare-skirt)
9. meta__bottom__GodetSkirt
The lower body clothing is a godet skirt (a skirt with triangular insets). If it is a godet skirt, this must be selected. Within its parameters, there is a base parameter for what style of skirt is used for the insertion. The base can be chosen as either Skirt2 or PencilSkirt.
10. meta__bottom__Pants
The lower body clothing is pants.
11. meta__bottom__Skirt2
The lower body clothing is a basic skirt.
12. meta__bottom__SkirtManyPanels
The lower body clothing is a many-paneled skirt. (A type of flare-skirt)
13. meta__bottom__PencilSkirt
The lower body clothing is a pencil skirt.
14. meta__bottom__SkirtLevels
The lower body clothing is a layered skirt (multiple layers). If it has a multi-layer design, this must be chosen. Then this multi-layered skirt is divided into an upper part and a lower part. The upper part (base part) can be any one of SkirtCircle, Skirt2, PencilSkirt, AsymmSkirtCircle, and is considered one layer. The lower part can be SkirtCircle, Skirt2, AsymmSkirtCircle, and you control its number of layers.
15. meta__bottom__None
No lower body clothing selected.
---
4. Connection Between Upper and Lower
16. meta__connected__True
The top and bottom are connected (like a dress) for a stronger overall unity.
17. meta__connected__False
The top and bottom are separate, allowing for free matching.
---
5. Waistband Fit and Width
18. waistband__waist__fitted
The waistband is form-fitting, creating a slimming effect.
19. waistband__waist__slightly-loose
The waistband is slightly loose, balancing comfort and style.
20. waistband__waist__loose
The waistband is relatively loose, emphasizing comfort and casualness.
21. waistband__width__narrow
The waistband is narrow for a more refined look.
22. waistband__width__medium
The waistband has a moderate width, a standard design.
23. waistband__width__wide
The waistband is wide, highlighting the waist shape.
---
6. Fitted Shirt (With or Without Straps)
24. fitted_shirt__strapless__True
The fitted shirt is a traditional strapless design with no collar shape. If the garment has a collar shape, it is not strapless. The garment has no shoulder coverage; if there is any shoulder coverage, it is not strapless. Exposed shoulders do not necessarily mean it is strapless. The shoulder must be completely bare, with no straps or sleeves covering, for it to be a strapless design.
Symmetrical or on the right side, the fitted upper body is strapless, exposing the shoulder line. If you choose this option, you must provide a detailed explanation of why it is considered strapless.
25. fitted_shirt__strapless__False
The fitted shirt has straps; the fitted top has shoulder coverage, so choose this option.
Symmetrical or on the right side, the fitted top has straps, providing support.
---
7. Top Length
26. shirt__length__super-cropped
The top length is super cropped, ending just below the bust and exposing the abdomen. If it is a dress, this must be chosen unless it is a very special design.
27. shirt__length__regular
The top length is regular, reaching around the waist or hips.
28. shirt__length__long
The top is slightly longer, possibly covering the hips, providing more warmth or coverage. In Task 2, when the user needs a separate top and jumpsuit but does not specify the top length, choose this option by default. (e.g. suits)
---
8. Top Width
29. shirt__width__normal
The top width is normal, offering a standard fit.
30. shirt__width__relaxed
The top width is loose, providing more comfort.
---
9. Top Hem
31. shirt__flare__tight
The top hem is a tightened design, a snug fit. An ordinary shirt can also be tight-fitting, but it does not support strapless or one-shoulder designs. FittedShirt is more suitable for strapless or one-shoulder designs and more formal occasions.
31. shirt__flare__straight
The top hem is straight, without noticeable flare.
32. shirt__flare__flared
The top hem slightly flares outward, adding a bit of liveliness.
33. shirt__flare__very-flared
The top hem flares significantly, creating a more dramatic shape.
---
10. Front Neckline Shape
34. collar__f_collar__CircleNeckHalf
The front neckline is a half-circle, a classic round neck design.
35. collar__f_collar__CurvyNeckHalf
The front neckline is a curved half-neckline with a gentle curve.
36. collar__f_collar__VNeckHalf
The front neckline is a V-shaped half-neckline.
37. collar__f_collar__SquareNeckHalf
The front neckline is a square half-neckline.
38. collar__f_collar__TrapezoidNeckHalf
The front neckline is a trapezoid half-neckline with a unique design.
39. collar__f_collar__CircleArcNeckHalf
The front neckline is a circular arc half-neckline, an arched curved shape.
40. collar__f_collar__Bezier2NeckHalf
The front neckline is a second-order Bézier curve half-neckline with a more complex, distinctive curve.
---
11. Back Neckline Shape
41. collar__b_collar__CircleNeckHalf
The back neckline is a half-circle, a classic round neck design.
42. collar__b_collar__CurvyNeckHalf
The back neckline is a curved half-neckline, gentle and elegant.
43. collar__b_collar__VNeckHalf
The back neckline is a V-shaped half-neckline, extending the neck line.
44. collar__b_collar__SquareNeckHalf
The back neckline is a square half-neckline, adding a retro touch.
45. collar__b_collar__TrapezoidNeckHalf
The back neckline is a trapezoid half-neckline, emphasizing a personalized design.
46. collar__b_collar__CircleArcNeckHalf
The back neckline is a circular arc half-neckline, softly curved.
47. collar__b_collar__Bezier2NeckHalf
The back neckline is a second-order Bézier curve, forming a special curvature.
---
12. Neckline Width
48. collar__width__very-narrow
The neckline is very narrow, close to the neck.
49. collar__width__medium
The neckline width is medium, moderate width.
50. collar__width__wide
The neckline is wide, exposing more of the neck and shoulders.
---
13. Front Neckline Depth
51. collar__fc_depth__shallow
The front neckline depth is shallow, with a higher neckline position.
52. collar__fc_depth__medium
The front neckline depth is medium, an average position.
53. collar__fc_depth__deep
The front neckline depth is deep, adding more sensuality and fashion.
---
14. Back Neckline Depth
54. collar__bc_depth__shallow
The back neckline depth is shallow, providing more coverage.
55. collar__bc_depth__medium
The back neckline depth is moderate, a normal amount of exposure.
56. collar__bc_depth__deep
The back neckline depth is relatively deep, highlighting the back curve.
---
15. Front Neckline Angle: Used to Modify Trapezoid Necklines and Circular Arc Necklines
57. collar__fc_angle__acute
The front neckline angle is acute, with tighter lines. For a trapezoid neckline, its narrower at the top and wider at the bottom. For a circular arc half-neckline, it forms an oval shape close to a circle.
58. collar__fc_angle__standard
The front neckline angle is standard, classic and comfortable. For a trapezoid neckline, its a right angle (similar to a square neckline). For a circular arc half-neckline, its an oval shape close to a circle, a smooth ellipse (like a boat neck).
59. collar__fc_angle__obtuse
The front neckline angle is obtuse, with less opening. For a trapezoid neckline, its wider at the top and narrower at the bottom. For a circular arc half-neckline, its an oval shape that isnt smooth, resembling two half-circles combined, leaning towards a boat shape.
---
16. Back Neckline Angle
60. collar__bc_angle__acute
The back neckline angle is acute, with tighter lines. For a trapezoid neckline, its narrower at the top and wider at the bottom. For a circular arc half-neckline, its an oval shape close to a circle.
61. collar__bc_angle__standard
The back neckline angle is standard, classic and comfortable. For a trapezoid neckline, its a right angle (similar to a square neckline). For a circular arc half-neckline, its an oval shape close to a circle, a smooth ellipse like a boat neck.
62. collar__bc_angle__obtuse
The back neckline angle is obtuse, with less opening. For a trapezoid neckline, its wider at the top and narrower at the bottom. For a circular arc half-neckline, its an oval shape thats not smooth, resembling two half-circles combined, leaning towards a boat shape.
---
17. Front Neckline Bézier Curve Direction
63. collar__f_bezier_x__left
The front neckline Bézier curve shifts to the left in the x-direction, creating a unique curve orientation.
64. collar__f_bezier_x__center
The front neckline Bézier curve is centered in the x-direction, symmetrically distributed.
65. collar__f_bezier_x__right
The front neckline Bézier curve shifts to the right in the x-direction, creating an offset curve shape.
66. collar__f_bezier_y__top
The front neckline Bézier curve is positioned toward the upper side in the y-direction.
67. collar__f_bezier_y__center
The front neckline Bézier curve is centered in the y-direction, distributing the curve evenly.
68. collar__f_bezier_y__bottom
The front neckline Bézier curve is positioned toward the lower side in the y-direction.
---
18. Back Neckline Bézier Curve Direction
69. collar__b_bezier_x__left
The back neckline Bézier curve is shifted left in the x-direction, forming a unique back neck line.
70. collar__b_bezier_x__center
The back neckline Bézier curve is centered in the x-direction, symmetrical in the back neck line.
71. collar__b_bezier_x__right
The back neckline Bézier curve is shifted right in the x-direction, adding a sense of offset to the back neck line.
72. collar__b_bezier_y__top
The back neckline Bézier curve is positioned toward the top in the y-direction, closer to the back of the neck.
73. collar__b_bezier_y__center
The back neckline Bézier curve is centered in the y-direction for balanced distribution.
74. collar__b_bezier_y__bottom
The back neckline Bézier curve is positioned lower in the y-direction, creating a deeper back neckline.
---
19. Neckline Curve Flip
75. collar__f_flip_curve__True
Flip the front neckline curve direction, changing the Bézier path of the front neckline.
76. collar__f_flip_curve__False
Do not flip the front neckline curve, keeping the original direction.
77. collar__b_flip_curve__True
Flip the back neckline curve direction, changing the Bézier path of the back neckline.
78. collar__b_flip_curve__False
Do not flip the back neckline curve, maintaining the original back neckline curve direction.
---
20. Neckline Component
79. collar__component__style__Turtle
The neckline component style is a turtleneck.
80. collar__component__style__SimpleLapel
The neckline component style is a simple lapel (similar to a suit collar).
81. collar__component__style__Hood2Panels
The neckline component style is a two-panel hood.
82. collar__component__style__None
No neckline component style chosen.
---
21. Neckline Component Depth and Lapel
83. collar__component__depth__shallow
The extra collar component depth is shallow, creating a low-key shape.
84. collar__component__depth__medium
The extra collar component depth is moderate, a standard design.
85. collar__component__depth__deep
The extra collar component depth is deep, making the design more prominent.
86. collar__component__lapel_standing__True
The lapel can stand up, enhancing a three-dimensional look.
87. collar__component__lapel_standing__False
The lapel is flat against the garment, more traditional.
---
22. Hood Depth and Length
88. collar__component__hood_depth__shallow
The hood depth is shallow, covering less area.
89. collar__component__hood_depth__medium
The hood depth is moderate, a common design.
90. collar__component__hood_depth__deep
The hood depth is deep, providing more coverage.
91. collar__component__hood_length__short
The hood length is short, creating a compact overall design.
92. collar__component__hood_length__medium
The hood length is medium, covering the normal head area.
93. collar__component__hood_length__long
The hood length is long, with more wrapping or draping effect.
---
23. Sleeveless or Sleeved, and Armhole Shape
94. sleeve__sleeveless__True
The garment is sleeveless, revealing the arms.
95. sleeve__sleeveless__False
The garment has sleeves covering the arms.
96. sleeve__armhole_shape__ArmholeSquare
The armhole has a square shape with sharper lines, only used if sleeveless with straps.
97. sleeve__armhole_shape__ArmholeAngle
The armhole has an angled cut, a distinctive shape, only used if sleeveless with straps.
98. sleeve__armhole_shape__ArmholeCurve
The armhole is curved, fitting the shoulders contour.
---
24. Sleeve Length
99. sleeve__length__short
The sleeve length is short, covering just below the shoulder, typically reaching mid-upper arm.
100. sleeve__length__half
The sleeve length is half (five-quarter), reaching near the elbow.
101. sleeve__length__three-quarter
The sleeve length is three-quarter (seven-quarter), from the forearm to above the wrist.
102. sleeve__length__long
The sleeve length is nine-tenths, close to the wrist but not fully covering it.
103. sleeve__length__full
The sleeve length is full, covering the entire wrist, suited for cold weather.
---
25. Sleeve Connecting Width
104. sleeve__connecting_width__narrow
The sleeves connection to the garment body is narrow, tightly fitted.
105. sleeve__connecting_width__medium
The sleeves connection width is moderate, a standard design.
106. sleeve__connecting_width__loose
The sleeves connection is looser.
107. sleeve__connecting_width__very-loose
The sleeves connection is very loose, adding a casual feel.
---
26. Sleeve Cuff Width
108. sleeve__end_width__closing
The cuff width is closing in, the sleeve cuff is tight.
109. sleeve__end_width__straight
The cuff width is straight, a cylindrical shape without significant tightening or flare.
110. sleeve__end_width__opening
The cuff width is opening outward, a flared bell shape or greater outward spread.
---
27. Sleeve Angle and External Twist Direction
111. sleeve__sleeve_angle__small
The sleeve-to-shoulder angle is small, making the shape looser. Reflected in the pattern by widening, so the sleeve becomes overall looser.
112. sleeve__sleeve_angle__medium
The sleeve-to-shoulder angle is medium, a regular fit with neither tightness nor looseness.
113. sleeve__sleeve_angle__large
The sleeve-to-shoulder angle is large, fitting more closely. Reflected in the pattern by narrowing, so the sleeve becomes overall tighter.
114. sleeve__opening_dir_mix__negative-twist
The cuffs external flare direction is a negative twist, a unique style.
115. sleeve__opening_dir_mix__standard
The cuffs external flare direction is normal, a conventional design.
116. sleeve__opening_dir_mix__positive-twist
The cuffs external flare direction is a positive twist, giving more dynamic style.
---
28. Shoulder Puff and Connecting Ruffle
117. sleeve__standing_shoulder__True
The shoulder has a puffed design, enhancing silhouette.
118. sleeve__standing_shoulder__False
The shoulder is flat, with no obvious puff.
119. sleeve__standing_shoulder_len__short
The puff length at the shoulder is short, focused on the shoulder peak.
120. sleeve__standing_shoulder_len__medium
The puff length at the shoulder is moderate, covering more of the shoulder line.
121. sleeve__standing_shoulder_len__long
The puff extends a larger area of the shoulder, emphasizing a strong silhouette.
122. sleeve__connect_ruffle__none
No ruffle or decoration at the sleeve-armhole connection.
123. sleeve__connect_ruffle__some
Some ruffle at the sleeve-armhole connection, adding layering. Puff sleeves often have ruffles.
124. sleeve__connect_ruffle__obvious
Obvious ruffle at the sleeve-armhole connection, highlighting the design. Puff sleeves often have ruffles.
---
29. Sleeve Smoothness and Cuff Type
125. sleeve__smoothing_coeff__very-smooth
The sleeve line is very smooth, without obvious edges.
126. sleeve__smoothing_coeff__moderate
The sleeve line is moderately smooth, balancing flow and structure.
127. sleeve__smoothing_coeff__less-smooth
The sleeve line is somewhat stiff with more structure.
128. sleeve__cuff__type__CuffBand
The cuff type is a cuff band, with elastic or ties.
129. sleeve__cuff__type__CuffSkirt
The cuff type is a cuff skirt, with pleats or ruffles.
130. sleeve__cuff__type__CuffBandSkirt
The cuff combines a band and skirt, offering both closure and decorative effects.
131. sleeve__cuff__type__None
The cuff has no special design.
---
30. Top Ruffle at the Cuff
132. sleeve__cuff__top_ruffle__straight
There is a ruffle at the top of the cuff, but the cuff design is straight (v=1.0), not cinched.
133. sleeve__cuff__top_ruffle__tapered
There is a ruffle at the top of the cuff, and the cuff design is cinched (v=1.425), gradually tightening.
134. sleeve__cuff__top_ruffle__very_tapered
There is a ruffle at the top of the cuff, and the cuff design is more strongly cinched (higher v), further emphasizing the tightening effect.
---
31. Cuff Length and Skirt Proportion
135. sleeve__cuff__cuff_len__short
The cuff band occupies a small percentage of the sleeve length. If not otherwise specified, choose this first.
136. sleeve__cuff__cuff_len__medium
The cuff band occupies a moderate percentage, balancing style and utility.
137. sleeve__cuff__cuff_len__long
The cuff band occupies a large percentage of the sleeve length, an unusual design that can be seen as dividing the sleeve into two sections joined together.
138. sleeve__cuff__skirt_fraction__small
The cuff skirt occupies a small portion of the entire cuff, just for decoration.
139. sleeve__cuff__skirt_fraction__medium
The cuff skirt occupies a moderate portion of the entire cuff, balancing style and practicality.
140. sleeve__cuff__skirt_fraction__large
The cuff skirt occupies a large portion of the entire cuff, adding more folds.
---
32. Cuff Skirt Flare and Ruffle
141. sleeve__cuff__skirt_flare__slight
The cuff skirt flare is slight, slightly opening.
142. sleeve__cuff__skirt_flare__moderate
The cuff skirt flare is moderate, adding elegance.
143. sleeve__cuff__skirt_flare__significant
The cuff skirt flare is large, creating a more dramatic style.
144. sleeve__cuff__skirt_ruffle__none
The cuff skirt has no ruffles, a clean line.
145. sleeve__cuff__skirt_ruffle__some
The cuff skirt has some ruffles, adding vibrancy.
---
33. Asymmetrical Design
146. left__enable_asym__True
Enable left-side asymmetrical design (the left and right sides differ).
147. left__enable_asym__False
Do not enable left-right asymmetry; the left and right sides are the same.
---
34. Left-Side Fitted Shirt
148. left__fitted_shirt__strapless__True
The left-side fitted top is strapless, exposing the left shoulder. In this case, there is no left shoulder coverage, exposing the left shoulder.
149. left__fitted_shirt__strapless__False
The left-side fitted top has straps, providing support.
---
35. Left-Side Shirt Width and Hem
150. left__shirt__width__normal
The width of the left shirt is normal (1.05), a standard fit.
151. left__shirt__width__relaxed
The width of the left shirt is relaxed (1.2), providing greater comfort.
152. left__shirt__flare__tight
The left-side top hem is tight-fitting.
152. left__shirt__flare__straight
The left-side top hem is straight, with no obvious flare.
153. left__shirt__flare__flared
The left-side top hem slightly flares, adding layering.
154. left__shirt__flare__very-flared
The left-side top hem is significantly flared, a more extravagant design.
---
36. Left-Side Front and Back Neckline
155. left__collar__f_collar__CircleNeckHalf
The left-side front neckline is a half-circle, a classic style.
156. left__collar__f_collar__CurvyNeckHalf
The left-side front neckline is a curved half-neckline, graceful lines.
157. left__collar__f_collar__VNeckHalf
The left-side front neckline is a V-shaped half-neckline, with a strong sense of style.
158. left__collar__f_collar__SquareNeckHalf
The left-side front neckline is a square half-neckline, adding a retro vibe.
159. left__collar__f_collar__TrapezoidNeckHalf
The left-side front neckline is a trapezoid half-neckline, a highly stylized design.
160. left__collar__f_collar__CircleArcNeckHalf
The left-side front neckline is a circular arc half-neckline, soft and rounded.
161. left__collar__f_collar__Bezier2NeckHalf
The left-side front neckline is a second-order Bézier half-neckline, with a complex curve.
162. left__collar__b_collar__CircleNeckHalf
The left-side back neckline is a half-circle design, a classic round neck for the back.
163. left__collar__b_collar__CurvyNeckHalf
The left-side back neckline is a curved half-neckline, more graceful.
164. left__collar__b_collar__VNeckHalf
The left-side back neckline is a V-shaped half-neckline, showcasing the back of the neck.
165. left__collar__b_collar__SquareNeckHalf
The left-side back neckline is a square half-neckline, retro elegance.
166. left__collar__b_collar__TrapezoidNeckHalf
The left-side back neckline is a trapezoid half-neckline, an original design.
167. left__collar__b_collar__CircleArcNeckHalf
The left-side back neckline is a circular arc half-neckline, with gentle curvature.
168. left__collar__b_collar__Bezier2NeckHalf
The left-side back neckline is a second-order Bézier half-neckline, highlighting a modern style.
---
37. Left-Side Neckline Width and Angle
169. left__collar__width__narrow
The left-side neckline is narrow, close to the neck.
170. left__collar__width__medium
The left-side neckline width is medium, moderately wide.
171. left__collar__width__wide
The left-side neckline width is wide, exposing more shoulder.
172. left__collar__fc_angle__acute (Modifies trapezoid neckline and circular arc neckline)
The left-side front neckline angle is acute, with tighter lines. For a trapezoid neckline, its narrower at the top and wider at the bottom. For a circular arc half-neckline, its an oval shape but close to a circle.
173. left__collar__fc_angle__standard (Modifies trapezoid neckline and circular arc neckline)
The left-side front neckline angle is standard, a classic comfortable shape. For a trapezoid neckline, its a right angle (similar to a square neckline). For a circular arc half-neckline, its an oval shape close to a circle, a smooth ellipse, like a boat shape.
174. left__collar__fc_angle__obtuse (Modifies trapezoid neckline and circular arc neckline)
The left-side front neckline angle is obtuse with a smaller opening. For a trapezoid neckline, its wider at the top and narrower at the bottom. For a circular arc half-neckline, its an oval shape thats not smooth, resembling two half-circles combined, leaning toward a boat shape.
175. left__collar__bc_angle__acute (Modifies trapezoid neckline and circular arc neckline)
The left-side back neckline angle is acute, with tighter lines. For a trapezoid neckline, its narrower at the top and wider at the bottom. For a circular arc half-neckline, its an oval shape but close to a circle.
176. left__collar__bc_angle__standard (Modifies trapezoid neckline and circular arc neckline)
The left-side back neckline angle is standard, classic comfort. For a trapezoid neckline, its a right angle (similar to a square neckline). For a circular arc half-neckline, its a smooth oval shape close to a circle, like a boat shape.
177. left__collar__bc_angle__obtuse (Modifies trapezoid neckline and circular arc neckline)
The left-side back neckline angle is obtuse, with a smaller opening. For a trapezoid neckline, its wider at the top and narrower at the bottom. For a circular arc half-neckline, its an oval shape thats not smooth, resembling two half-circles combined, leaning toward a boat shape.
---
38. Left-Side Neckline Bézier and Flip
178. left__collar__f_bezier_x__left
The left-side front neckline Bézier curve is offset to the left in the x-direction.
179. left__collar__f_bezier_x__center
The left-side front neckline Bézier curve is centered in the x-direction.
180. left__collar__f_bezier_x__right
The left-side front neckline Bézier curve is offset to the right in the x-direction.
181. left__collar__f_bezier_y__top
The left-side front neckline Bézier curve is toward the top in the y-direction.
182. left__collar__f_bezier_y__center
The left-side front neckline Bézier curve is centered in the y-direction.
183. left__collar__f_bezier_y__bottom
The left-side front neckline Bézier curve is toward the bottom in the y-direction.
184. left__collar__b_bezier_x__left
The left-side back neckline Bézier curve is offset to the left in the x-direction.
185. left__collar__b_bezier_x__center
The left-side back neckline Bézier curve is centered in the x-direction.
186. left__collar__b_bezier_x__right
The left-side back neckline Bézier curve is offset to the right in the x-direction.
187. left__collar__b_bezier_y__top
The left-side back neckline Bézier curve is toward the top in the y-direction.
188. left__collar__b_bezier_y__center
The left-side back neckline Bézier curve is centered in the y-direction.
189. left__collar__b_bezier_y__bottom
The left-side back neckline Bézier curve is toward the bottom in the y-direction.
190. left__collar__f_flip_curve__True
Flip the left-side front neckline curve direction.
191. left__collar__f_flip_curve__False
Do not flip the left-side front neckline curve direction.
192. left__collar__b_flip_curve__True
Flip the left-side back neckline curve direction.
193. left__collar__b_flip_curve__False
Do not flip the left-side back neckline curve direction.
---
39. Left-Side Sleeve
194. left__sleeve__sleeveless__True
The left side is sleeveless, exposing the left arm.
195. left__sleeve__sleeveless__False
The left side has a sleeve, covering the left arm.
196. left__sleeve__armhole_shape__ArmholeSquare
The left sleeve armhole is square. Used only when left side is sleeveless but with a strap.
197. left__sleeve__armhole_shape__ArmholeAngle
The left sleeve armhole is angled. Used only when left side is sleeveless but with a strap.
198. left__sleeve__armhole_shape__ArmholeCurve
The left sleeve armhole is curved, fitting the shoulder better.
---
39.1 Left-Side Sleeve Length
199. left__sleeve__length__short
The left sleeve is short, extending only to the upper arm.
200. left__sleeve__length__half
The left sleeve length is five-quarter, around the elbow area.
201. left__sleeve__length__three-quarter
The left sleeve is seven-quarter length, from the forearm to above the wrist.
202. left__sleeve__length__long
The left sleeve length is nine-tenths, close to the wrist but not fully covered.
203. left__sleeve__length__full
The left sleeve is full length, completely covering the left wrist.
---
39.2 Left-Side Sleeve Connection and Cuff Width
204. left__sleeve__connecting_width__narrow
The left sleeve connects to the garment body with a narrow width.
205. left__sleeve__connecting_width__medium
The left sleeve connection width is moderate.
206. left__sleeve__connecting_width__loose
The left sleeve connection is relatively loose.
207. left__sleeve__connecting_width__very-loose
The left sleeve connection is very loose.
208. left__sleeve__end_width__closing
The left sleeve cuff width is closing in.
209. left__sleeve__end_width__straight
The left sleeve cuff width is straight, the sleeve width remains consistent.
210. left__sleeve__end_width__opening
The left sleeve cuff width is opening outward.
---
39.3 Left-Side Sleeve Angle and External Flare Direction
211. left__sleeve__sleeve_angle__small
The left sleeve angle to the shoulder is small, creating a looser design in the pattern.
212. left__sleeve__sleeve_angle__medium
The left sleeve angle to the shoulder is medium, a standard fit, neither very tight nor very loose.
213. left__sleeve__sleeve_angle__large
The sleeve-to-shoulder angle is large, fitting more closely. Reflected in the pattern by narrowing the sleeve.
214. left__sleeve__opening_dir_mix__negative-twist
The left cuff opens with a negative twist, a more unusual design.
215. left__sleeve__opening_dir_mix__standard
The left cuff opening direction is standard, a conventional style.
216. left__sleeve__opening_dir_mix__positive-twist
The left cuff opens with a positive twist, more dynamic style.
---
39.4 Left-Side Shoulder Puff and Connection Ruffle
217. left__sleeve__standing_shoulder__True
The left shoulder is puffed, enhancing the shoulder silhouette.
218. left__sleeve__standing_shoulder__False
The left shoulder is flat, with no significant puff.
219. left__sleeve__standing_shoulder_len__short
The left shoulder puff is short, only on the shoulder peak.
220. left__sleeve__standing_shoulder_len__medium
The left shoulder puff range is moderate.
221. left__sleeve__standing_shoulder_len__long
The left shoulder puff range is large, strongly emphasizing the shoulder.
222. left__sleeve__connect_ruffle__none
No ruffle or decoration at the left sleeve-armhole connection.
223. left__sleeve__connect_ruffle__some
A small ruffle at the left sleeve-armhole connection, adding detail. Puff sleeves often have ruffles.
224. left__sleeve__connect_ruffle__obvious
Obvious ruffles at the left sleeve-armhole connection, highlighting the design. Puff sleeves often have ruffles.
---
39.5 Left-Side Sleeve Smoothness and Cuff Type
225. left__sleeve__smoothing_coeff__very-smooth
The left sleeve line is extremely smooth with no obvious folds.
226. left__sleeve__smoothing_coeff__moderate
The left sleeve line is moderately smooth, balancing comfort and structure.
227. left__sleeve__smoothing_coeff__less-smooth
The left sleeve line is somewhat stiff, providing more structure.
228. left__sleeve__cuff__type__CuffBand
The left sleeve cuff type is a cuff band with elastic or ties.
229. left__sleeve__cuff__type__CuffSkirt
The left sleeve cuff type is a cuff skirt with pleats or ruffles.
230. left__sleeve__cuff__type__CuffBandSkirt
The left sleeve cuff type is a combination of cuff band and skirt, providing closure and decoration.
231. left__sleeve__cuff__type__None
The left sleeve cuff has no special design.
---
39.6 Left-Side Cuff Top Ruffle
232. left__sleeve__cuff__top_ruffle__straight
There is a ruffle at the top of the left cuff, but the cuff is straight (v=1.0), not cinched.
233. left__sleeve__cuff__top_ruffle__tapered
There is a ruffle at the top of the left cuff, and the cuff is cinched (v=1.425), gradually tightening.
234. left__sleeve__cuff__top_ruffle__very_tapered
The top ruffle at the left cuff is noticeable, and the cuff is more strongly cinched (a higher v), further emphasizing the tightening.
---
39.7 Left-Side Cuff Length and Skirt Proportion
235. left__sleeve__cuff__cuff_len__short
The left cuff band occupies a small percentage of the sleeve length. If not otherwise specified, choose this first.
236. left__sleeve__cuff__cuff_len__medium
The left cuff band occupies a moderate percentage of the sleeve length, balancing style and function.
237. left__sleeve__cuff__cuff_len__long
The left cuff band occupies a large percentage of the sleeve length, an unusual design which can be seen as dividing the sleeve into two joined parts.
238. left__sleeve__cuff__skirt_fraction__small
The left cuff skirt portion is small, merely decorative.
239. left__sleeve__cuff__skirt_fraction__medium
The left cuff skirt portion is moderate, balancing aesthetics and practicality.
240. left__sleeve__cuff__skirt_fraction__large
The left cuff skirt portion is large, creating more layered ruffles.
---
39.8 Left-Side Cuff Skirt Flare and Ruffle
241. left__sleeve__cuff__skirt_flare__slight
The left sleeve cuff skirt flares slightly, just a bit of opening.
242. left__sleeve__cuff__skirt_flare__moderate
The left sleeve cuff skirt flares moderately.
243. left__sleeve__cuff__skirt_flare__significant
The left sleeve cuff skirt flares considerably, for a more lavish look.
244. left__sleeve__cuff__skirt_ruffle__none
The left sleeve cuff skirt has no ruffle design.
245. left__sleeve__cuff__skirt_ruffle__some
The left sleeve cuff skirt has a small amount of ruffle, adding a fashionable touch.
---
40. Basic Skirt Length
246. skirt__length__micro
The skirt length is ultra-short, typically above the thigh, used to showcase legs, often in fashion or casual settings. The design is bold and sexy, suitable for hot weather or vacation wear.
247. skirt__length__mini
The skirt length is mini, typically above the knee, showing most of the thigh, suitable for a young, fashionable style. Mini skirts are common for everyday wear and for stylish occasions, offering ease of movement and visual appeal.
248. skirt__length__above-knee
The skirt length is above the knee, exposing the knee, suitable for everyday or casual formal occasions. Its popular in both work and leisure contexts, being both elegant and comfortable.
249. skirt__length__knee-length
The skirt length is at the knee, a suitable choice for more formal or semi-formal settings. It provides moderate coverage of the legs, common in professional and more conservative dress styles.
250. skirt__length__midi
The skirt length is mid-calf, typically below the knee and around mid-calf. Its a classic choice for various occasions, especially favored for office wear or more formal settings for its elegance.
251. skirt__length__floor-length
The skirt length is floor length, extending to the ankles or touching the ground, common for evening gowns or formal events. It conveys a sense of elegance and poise.
---
41. Basic Skirt Waistline and Ruffles
252. skirt__rise__low (If not otherwise specified, choose this first)
The skirt waistline is low, visually lengthening the torso.
253. skirt__rise__mid
The skirt waistline is mid-rise, the most common style.
254. skirt__rise__high
The skirt waistline is high-rise, shaping the waist and elongating the legs.
255. skirt__ruffle__none
No ruffle design at the hem, keeping it smooth.
256. skirt__ruffle__moderate
Moderate ruffles, adding slight volume to the hem.
257. skirt__ruffle__rich
Rich ruffles, significantly increasing volume at the hem.
---
42. Skirt Hem Slit and Flare
258. skirt__bottom_cut__none
No slit or special cut at the skirt hem.
259. skirt__bottom_cut__shallow
A shallow slit at the hem, offering some walking convenience.
260. skirt__bottom_cut__deep
A deeper slit at the hem, showcasing more leg and adding flexibility.
261. skirt__flare__none
The skirt hem has no flare, with a close fit.
261. skirt__flare__small
The skirt hem flares slightly, with a close fit.
262. skirt__flare__medium
The skirt hem has a moderate flare, balancing elegance and mobility.
263. skirt__flare__large
The skirt hem flares widely, creating a flowy, romantic vibe.
---
43. Flare Skirt (Circle, Many Panels, Front-Back Asymmetric) Length and Waistline
264. flare-skirt__length__micro
The flare skirt length is ultra-short, showing leg lines and featuring the distinct flare silhouette, commonly used for trendy or casual wear.
265. flare-skirt__length__mini
The flare skirt length is mini, revealing much of the thighs, combining the lively feel of a mini skirt with the shape of a flare skirt, suitable for fashionable scenes and daily outfits.
266. flare-skirt__length__above-knee
The flare skirt length is above the knee, exposing the knees, suitable for casual or mildly formal occasions. This length offers both a playful vibe and elegance.
267. flare-skirt__length__knee-length
The flare skirt length is knee-length, reaching the knee area, suitable for more formal occasions, while retaining the skirts flowing aspect.
268. flare-skirt__length__midi
The flare skirt length is mid-calf, below the knee and around the lower leg, appropriate for more elegant or formal events. The flared shape adds a flowing charm.
269. flare-skirt__length__floor-length
The flare skirt length is floor-length, extending to the ankles or floor, typical for more formal or luxurious occasions, showcasing a distinctive feminine grace and decorum.
270. flare-skirt__rise__low
The flare skirt has a low waist design, casual and relaxed.
271. flare-skirt__rise__mid
The flare skirt has a mid-rise design, comfortable and versatile.
272. flare-skirt__rise__high
The flare skirt has a high waist design, accentuating the waistline and leg length.
---
44. Flare Skirt Fullness and Panels
273. flare-skirt__suns__slight
The circle skirts gathers are slight.
274. flare-skirt__suns__moderate
The circle skirts gathers are moderate, with a balanced flowy feel.
275. flare-skirt__suns__significant
The circle skirts gathers are quite large, creating a dramatic, dynamic look.
276. flare-skirt__skirt-many-panels__n_panels__few
The many-paneled skirt is made with few panels, a simpler design.
277. flare-skirt__skirt-many-panels__n_panels__medium
The many-paneled skirt is made with a medium number of panels, moderate layering.
278. flare-skirt__skirt-many-panels__n_panels__many
The many-paneled skirt is made with a large number of panels, offering more layered fullness.
279. flare-skirt__skirt-many-panels__panel_curve__inward
The panel seams of the many-paneled skirt curve inward, creating a distinctive shape.
280. flare-skirt__skirt-many-panels__panel_curve__straight
The panel seams of the many-paneled skirt are relatively straight, simple and clean.
281. flare-skirt__skirt-many-panels__panel_curve__outward
The panel seams of the many-paneled skirt curve outward, adding volume to the hem.
---
45. Front-Back Asymmetric Skirt and Slit Details
282. flare-skirt__asymm__front_length__highly-asymmetric
The front and back of the circle skirt are highly asymmetric; the front skirt panel accounts for 10% of the back panel.
283. flare-skirt__asymm__front_length__strongly-asymmetric
The front and back of the circle skirt are strongly asymmetric; the front skirt panel accounts for 10% of the back panel.
284. flare-skirt__asymm__front_length__moderately-asymmetric
The front and back of the circle skirt are moderately asymmetric; the front skirt panel accounts for 10% of the back panel.
285. flare-skirt__asymm__front_length__slightly-asymmetric
The front and back of the circle skirt are slightly asymmetric; the front skirt panel accounts for 10% of the back panel.
285. flare-skirt__asymm__front_length__symmetric
The front and back of the circle skirt are asymmetric in height; the front skirt panel accounts for 10% of the back panel.
286. flare-skirt__cut__add__True
A slit or cut design is added to the circle skirt, adding movement.
287. flare-skirt__cut__add__False
The circle skirt has no slit or special cut, maintaining a complete hem.
288. flare-skirt__cut__depth__shallow
The circle skirt slit depth is shallow, discreetly showing the leg.
289. flare-skirt__cut__depth__medium
The circle skirt slit depth is moderate, balancing allure and comfort.
290. flare-skirt__cut__depth__deep
The circle skirt slit depth is deeper, revealing more leg.
291. flare-skirt__cut__width__narrow
The circle skirt slit is narrow, providing more coverage.
292. flare-skirt__cut__width__medium
The circle skirt slit width is moderate, balancing style and practicality.
293. flare-skirt__cut__width__wide
The circle skirt slit is wide, adding extra flow.
296. flare-skirt__cut__place__back_left
The circle skirt slit is on the back left side in a frontal view, i.e., the left edge of the front panel, showing the left leg.
296. flare-skirt__cut__place__back_center
The circle skirt slit is in the center of the back panel for balanced symmetry.
296. flare-skirt__cut__place__back_right
The circle skirt slit is on the back right side in a frontal view, i.e., the right edge of the front panel, showing the right leg.
294. flare-skirt__cut__place__front_left
The circle skirt slit is on the front left side in a frontal view, i.e., the right edge of the front panel, showing the right leg.
295. flare-skirt__cut__place__front_center
The circle skirt slit is in the center of the front panel, balanced and symmetrical.
296. flare-skirt__cut__place__front_right
The circle skirt slit is on the front right side in a frontal view, i.e., the left edge of the front panel, showing the left leg.
---
46. Godet Skirt Base and Insert Size/Depth
297. godet-skirt__base__Skirt2
The godet skirt base is a basic Skirt2.
298. godet-skirt__base__PencilSkirt
The godet skirt base is a pencil skirt.
299. godet-skirt__insert_w__narrow
The godet insert width is narrow, with smaller triangular insets.
300. godet-skirt__insert_w__medium
The godet insert width is moderate, balancing design and comfort.
301. godet-skirt__insert_w__wide
The godet insert width is broad, covering a larger area.
302. godet-skirt__insert_depth__shallow
The godet insert depth is shallow, adding slight flare to the hem.
303. godet-skirt__insert_depth__medium
The godet insert depth is moderate, balancing volume and comfort.
304. godet-skirt__insert_depth__deep
The godet insert depth is deep, significantly expanding the hem, creating a more luxurious look.
---
46.1 Number of Godet Inserts
305. godet-skirt__num_inserts__4
The godet skirt has 4 inserts, evenly distributed, a simple look.
306. godet-skirt__num_inserts__6
The godet skirt has 6 inserts, adding fullness and layers.
307. godet-skirt__num_inserts__8
The godet skirt has 8 inserts, enhancing hem movement.
308. godet-skirt__num_inserts__10
The godet skirt has 10 inserts, more decorative and voluminous.
309. godet-skirt__num_inserts__12
The godet skirt has 12 inserts, offering the richest, most dramatic silhouette.
---
46.2 Insert Distribution Spacing
310. godet-skirt__cuts_distance__close
The inserts are placed closely, creating a denser distribution.
311. godet-skirt__cuts_distance__medium
The insert spacing is moderate, maintaining balance.
312. godet-skirt__cuts_distance__far
The inserts are spaced farther apart, a more open distribution.
---
47. Pencil Skirt Length and Waistline
313. pencil-skirt__length__micro
A very short pencil skirt, bold and sexy. The length is generally above the thigh, highlighting the legs, typically used for fashionable and casual settings.
314. pencil-skirt__length__mini
A mini pencil skirt, showing the thigh line, typically above the knee. The fitted style highlights the hips, suitable for everyday or stylish occasions.
315. pencil-skirt__length__above-knee
An above-knee pencil skirt, exposing the knees, ideal for workplaces or formal events, combining style and elegance.
316. pencil-skirt__length__knee-length
A knee-length pencil skirt, just at the knee, commonly seen in business or formal wear, projecting a professional image.
317. pencil-skirt__length__midi
A midi pencil skirt, past the knee, typically at mid-calf, used in formal or elegant situations, a classic length exuding maturity and poise.
318. pencil-skirt__length__floor-length
A pencil skirt extending to the ankles or the floor, worn in high-end formal occasions, emphasizing a long line and an elegant aura.
319. pencil-skirt__rise__low
A pencil skirt with a low waist, very stylish.
320. pencil-skirt__rise__mid
A pencil skirt with a mid waist, standard and comfortable.
321. pencil-skirt__rise__high
A pencil skirt with a high waist, emphasizing the waistline.
---
48. Pencil Skirt Hem and Angle
322. pencil-skirt__flare__tight
The pencil skirt is close to the legs, emphasizing curves.
323. pencil-skirt__flare__straight
The pencil skirt is a straight tube, the hem parallel to the thighs.
324. pencil-skirt__flare__slight-flare
The pencil skirt hem slightly flares, adding movement and comfort.
325. pencil-skirt__low_angle__inward
The pencil skirt hem tilts, from the garments left to the right, so the left hem is higher than the right, an asymmetrical design.
326. pencil-skirt__low_angle__straight
The pencil skirt hem remains straight, a standard pencil silhouette.
327. pencil-skirt__low_angle__outward
The pencil skirt hem tilts from the right to the left, so the right side is higher, providing more wrap.
---
49. Pencil Skirt Slit and Side Cut
328. pencil-skirt__front_slit__none
No front slit.
329. pencil-skirt__front_slit__shallow
A shallower front slit, aiding movement.
330. pencil-skirt__front_slit__deep
A deeper front slit, balancing allure and practicality.
331. pencil-skirt__back_slit__none
No back slit.
332. pencil-skirt__back_slit__shallow
A shallower back slit, facilitating ease of movement.
333. pencil-skirt__back_slit__deep
A deeper back slit, highlighting curves and allowing for walking comfort.
334. pencil-skirt__left_slit__none
No slit on the front left side (the rightmost edge of the skirt from the viewers perspective).
335. pencil-skirt__left_slit__shallow
A shallow slit on the front left side, providing moderate ease of movement.
336. pencil-skirt__left_slit__deep
A deep slit on the front left side, elongating the legs.
337. pencil-skirt__right_slit__none
No slit on the front right side (the leftmost edge of the skirt from the viewers perspective).
338. pencil-skirt__right_slit__shallow
A shallow slit on the front right side, offering moderate ease of movement.
339. pencil-skirt__right_slit__deep
A deep slit on the front right side, accentuating leg lines.
340. pencil-skirt__style_side_cut__Sun
A pencil skirt side cut shaped like a sun motif, making a strong decorative statement.
341. pencil-skirt__style_side_cut__SIGGRAPH_logo
A pencil skirt side cut shaped like the SIGGRAPH logo, exuding technological or creative flair.
342. pencil-skirt__style_side_cut__None
No special side cut on the pencil skirt.
---
50. Layered Skirt Base and Upper Layers
343. levels-skirt__base__Skirt2
The layered skirts base layer is a basic Skirt2. Selecting this means the top-most layer of the multi-layer skirt is Skirt2. Additional skirt parameters are required.
344. levels-skirt__base__PencilSkirt
The layered skirts base layer is a pencil skirt, more form-fitting. Selecting this means the top-most layer of the multi-layer skirt is PencilSkirt. Pencil skirt parameters must then be chosen.
345. levels-skirt__base__SkirtCircle
The layered skirts base layer is a circle skirt, creating a wide silhouette. Selecting this means the top-most layer of the multi-layer skirt is SkirtCircle. Flare-skirt parameters must then be chosen.
346. levels-skirt__base__AsymmSkirtCircle
The layered skirts base layer is an asymmetric circle skirt, providing layered variety. Selecting this means the top-most layer of the multi-layer skirt is AsymmSkirtCircle. Flare-skirt parameters must be chosen.
347. levels-skirt__level__Skirt2
The next or lower layer of the layered skirt uses a basic Skirt2. Skirt parameters must be chosen accordingly.
348. levels-skirt__level__SkirtCircle
The next or lower layer of the layered skirt is a circle skirt, adding fullness. Flare-skirt parameters must be chosen.
349. levels-skirt__level__AsymmSkirtCircle
The next or lower layer of the layered skirt is an asymmetric circle skirt. Flare-skirt parameters must be chosen.
---
50.1 Number of Layers
350. levels-skirt__num_levels__1 (Note that 1 here means the total of the middle layer and bottom layer is 1, so the total is 2 layers.)
A layered skirt with 2 layers, adding visual dimension and fullness.
351. levels-skirt__num_levels__2
A layered skirt with 3 layers, adding more dimension and fullness.
352. levels-skirt__num_levels__3
A layered skirt with 4 layers, creating a richer look.
353. levels-skirt__num_levels__4
A layered skirt with 5 layers, highly stacked, decorative.
354. levels-skirt__num_levels__5
A layered skirt with 6 layers, highly stacked, decorative.
---
51. Layered Skirt Ruffles and Length
355. levels-skirt__level_ruffle__none
Each layer of the layered skirt has no ruffles, a clean hem.
356. levels-skirt__level_ruffle__moderate
Each layer of the layered skirt has moderate ruffles.
357. levels-skirt__level_ruffle__rich
Each layer of the layered skirt has abundant ruffles for a strong layered effect.
358. levels-skirt__length__micro
The layered skirt length is ultra-short, typically at the thigh, a bold fashion statement.
359. levels-skirt__length__mini
The layered skirt length is mini, typically above the knee, revealing most of the thigh, full of energy.
360. levels-skirt__length__above-knee
The layered skirt length is above the knee, exposing the knees, allowing ease of movement.
361. levels-skirt__length__knee-length
The layered skirt length is knee-length, a classic, elegant look.
362. levels-skirt__length__midi
The layered skirt length is midi, below the knee, typically at mid-calf, elegant and proper.
363. levels-skirt__length__floor-length
The layered skirt length is floor-length, reaching the ankle or the floor, often used in formal settings or gowns.
---
52. Layered Skirt Waistline and Base Length Proportion
364. levels-skirt__rise__low
A low-rise layered skirt.
365. levels-skirt__rise__mid
A mid-rise layered skirt.
366. levels-skirt__rise__high
A high-rise layered skirt, lengthening the legs.
367. levels-skirt__base_length_frac__short
The topmost base layer of the layered skirt is relatively short compared to the total length.
368. levels-skirt__base_length_frac__medium
The topmost base layer has a moderate length compared to the total.
369. levels-skirt__base_length_frac__long
The topmost base layer is relatively long compared to the total length.
---
53. Pants Length
370. pants__length__micro
The pants are ultra-short (0.15), only covering the buttocks and upper thigh.
371. pants__length__short
The pants are short (0.275), reaching the mid-thigh or slightly above.
372. pants__length__knee-length
The pants are knee-length (0.45), suitable for casual or everyday wear.
373. pants__length__capri
The pants are capri-length (0.575), offering a stylish and comfortable look.
374. pants__length__ankle-length
The pants are ankle-length (0.725), neat and clean.
375. pants__length__full-length
The pants are full-length (0.825), covering the legs down to the ankles.
---
54. Pants Width
376. pants__width__fitted
The pants are tight, hugging the leg line.
377. pants__width__normal
The pants have a normal width, a standard fit.
378. pants__width__loose
The pants are loose-fitting, with wider legs for higher comfort.
---
55. Pants Hem
379. pants__flare__tapering
The pant leg tapers downward, forming a cone shape.
380. pants__flare__straight
The pant leg is straight, with the same width top to bottom.
381. pants__flare__slight-flare
The pant leg slightly flares outward at the bottom, adding style.
---
55.1 Pants Waistline
382. pants__rise__low
The pants have a low waist for a fashionable look, slightly revealing the waist.
383. pants__rise__mid
The pants have a mid-rise, suitable for most body types and occasions.
384. pants__rise__high
The pants have a high waist, enhancing the waistline and leg length.
---
56. Pants Cuff Types
385. pants__cuff__type__CuffBand
The pant cuff has a band, with elastic or ties.
386. pants__cuff__type__CuffSkirt
The pant cuff has a skirt, featuring ruffles or a flounce.
387. pants__cuff__type__CuffBandSkirt
The pant cuff combines a band and skirt, blending closure and decoration.
388. pants__cuff__type__None
No special pant cuff design chosen.
---
57. Pants Cuff Top Ruffle
389. pants__cuff__top_ruffle__straight
The pant cuff is straight (v=1.0), not cinched.
390. pants__cuff__top_ruffle__tapered
The pant cuff is cinched (v=1.425), gradually tightening.
391. pants__cuff__top_ruffle__very_tapered
The pant cuff is more strongly cinched (a higher v), emphasizing the tightening effect.
---
58. Pants Cuff Band Length and Skirt Proportion
392. pants__cuff__cuff_len__short
The pant cuff band length is short, fitting near the ankle or calf.
393. pants__cuff__cuff_len__medium
The pant cuff band length is moderate, a typical proportion.
394. pants__cuff__cuff_len__long
The pant cuff band length is longer, creating a stronger style statement.
395. pants__cuff__skirt_fraction__small
The pant cuff skirt occupies a small proportion, mainly decorative.
396. pants__cuff__skirt_fraction__medium
The pant cuff skirt proportion is moderate, balancing looks and function.
397. pants__cuff__skirt_fraction__large
The pant cuff skirt proportion is large, adding more pleats and layering.
---
59. Pants Cuff Skirt Flare and Ruffle
398. pants__cuff__skirt_flare__slight
The pant cuff skirt flares slightly, a small opening.
399. pants__cuff__skirt_flare__moderate
The pant cuff skirt flares moderately, a graceful look.
400. pants__cuff__skirt_flare__significant
The pant cuff skirt flares significantly, creating a more dramatic shape.
401. pants__cuff__skirt_ruffle__none
The pant cuff skirt has no ruffles, a neat line.
402. pants__cuff__skirt_ruffle__some
The pant cuff skirt has a small number of ruffles, adding a layer of style.
Selection Logic:
Required Items:
First, you must choose from the following five parameters:
meta__upper
meta__wb
meta__bottom
meta__connected
left__enable_asym
Corresponding parameter selection:
Based on the chosen required items, select the relevant associated parameters.
If a certain option is not needed, and the text space contains a corresponding None option, you must choose that None option.
For example, if meta__upper is empty, select meta__upper__None.
If the text space does not have a None option, then do not select or display anything.
Ignore Unselected Parameters:
If in meta__upper, meta__wb, meta__bottom you did not select a particular parameter, you do not need to consider its related parameters.
For example, if pants are not selected, do not select any parameters related to pants.
Output Format:
Only output one combination.
The output format should be a list in code that can be directly copied.
Task 2:
On the basis of Task 1, select the corresponding options from the text space according to the users given occasion, what they want to do, or where they want to go. If the user did not mention anything, choose collar__component__style as empty. Later, if you are prompted that you have not selected certain words, remember the users request (for example, the user said they want tight pants). Note that a strapless design does not show a collar shape. Therefore, when the user does not specifically say strapless, do not select fitted_shirt__strapless as False. If it is sleeveless without specifying a collar design, you can freely choose sleeve_less as True, but in this case you cannot choose fitted_shirt__strapless as True.
The selection logic is the same as Task 1.
Task 3: Modify text_list Based on the Original Image
Background:
The text_list generates a simulated image.
The user provides an original image that may differ from this simulated one.
The goal is to modify text_list so its new simulated image more closely matches the original image.
Steps to Follow:
1) Compare the original image and the simulated image:
- Focus on structural details: garment length, neckline, sleeves, skirt, pants, etc.
- Ignore color or minor style variations.
2) Determine whether to modify text_list:
- Only modify it if the original and simulated images differ in structural aspects.
- Retain unmodified text items as is.
Important Restriction: Never Modify Adjacent Length Parameters
Each length parameter (e.g., sleeve__length, shirt__length, flare-skirt__length, etc.) is arranged from shortest to longest in a defined sequence.
If the simulated image and the original image differ by just one step in a length parameter (i.e., neighboring items in that sequence), do NOT modify it.
You may only change a length parameter if the difference spans at least two steps.
Length Parameter Sequences (shortest to longest):
sleeve__length: short half three-quarter long full
shirt__length: super-cropped regular
flare-skirt__length: micro mini above-knee knee-length midi floor-length
pencil-skirt__length: micro mini above-knee knee-length midi floor-length
levels-skirt__length: short mid long
skirt__length: micro mini above-knee knee-length midi floor-length
pants__length: micro short knee-length capri ankle-length full-length
Additional Rules:
shirt__length cannot be selected to be longer than its current setting; it can only be shorter.
Avoid modifying collar-related parameters unless absolutely necessary.
Modify either upper-body or lower-body parameters in one session, never both at the same time.
If meta__bottom None, but the simulated image shows no lower garment, adjust the bottoms fit parameters to be tighter to match that appearance.
For dresses:
- A left-right asymmetric dress must use meta__upper__FittedShirt.
- A left-right symmetric dress (left__enable_asym=False) must have shirt__length set to super-cropped.
Outcome Handling:
If no modification is needed, inform the user both text_lists match; do not provide the JSON file.
If modification is needed:
1. Carefully adjust text_list (skipping adjacent length changes).
2. List all newly changed items.
3. Present the updated text_list in JSON file format for download.
Emphasis:
The goal is to align the simulated image with the original by editing text_list (not altering the original image).
You may only select from the given text space. No new items outside it.
Strictly avoid violating the adjacency rule for lengths.
Task 4:
On the basis of Task 1. The user will provide the currently selected textlist and its corresponding simulated image, which reflects all the textlist. The simulated image shows pressure values using color, and some areas are tight, highlighted in red or yellow (or colors close to them). I hope to modify those red areas in the text to make them looser, thus removing the red parts. This does not target the skirts lower part; we do not handle the lower part for skirts. All you need to do is modify the textlist to achieve this objective, remembering that you only need to adjust the width and looseness of those red-marked areas. Make them wider and looser to eliminate the tightness. The clothing categories remain unchanged. For this task, only small modifications are needed. Think carefully while modifying. You cannot add or remove parameters that did not exist originally. For example, if there was no lower garment originally, keep it None. You cannot add a skirt or pants if none existed.
Key emphasis for Task 4: You may not modify "meta__upper," "meta__wb," "meta__bottom," or "meta__connected."
Task 5:
When a user provides a pre-selected textlist (from Task 1) and requests certain modifications (for instance, wanting a longer skirt or adding pants), adjust the textlist according to these new requirements. Before applying any changes, be sure to inform the user which text items have been altered or added.
Special Rules for Adding or Replacing Garments:
If the user does not explicitly state that the top and bottom are connected, default to meta__connected__False.
If you add a new upper garment that is left-right asymmetric, set left__enable_asym=True; if it is symmetric, set left__enable_asym=False.
Modifying the Length of an Existing Top:
If the original top is FittedShirt and the user wants to change its length, you must keep meta__upper as FittedShirt; do not switch to Shirt.
If the original top is Shirt and the user wants to change its length, you must keep meta__upper as Shirt; do not switch to FittedShirt.
By default, if the user does not specify a length for Shirt, use shirt__length__super-cropped. Only switch to a longer shirt__length if requested.
Converting Strapless to Collared or Sleeved:
If the top is currently strapless (fitted_shirt__strapless=True) but the user wants a collar or sleeves, set fitted_shirt__strapless to False and then add the appropriate collar or sleeve parameters.
Key Output Requirements:
Only select items that exist in the text space. Do not use any items that are not present there.
Do not include any #” or “//” comments in the final JSON.
You must provide a JSON file named json_list=[...] containing all selected items (including new or modified ones).
Display all of these chosen items in the user dialog.
The JSON file must be downloadable. You cannot return only dialogue without providing the JSON file.
Additional Rules for Collars:
If the shirt originally has open buttons or zippers, treat them as closed. This typically implies a more rounded, shallower collar shape.
Dress (one-piece) Rules:
When dealing with a dress (where the top and skirt are integrated), choose meta__upper__Shirt or meta__upper__FittedShirt (not both).
For a symmetric dress, prefer meta__upper__Shirt; for an asymmetric dress, use meta__upper__FittedShirt.
If meta__upper=Shirt is used for a dress and the user has not specified the top length, set shirt__length to shirt__length__super-cropped.
You must not set meta__bottom to None when it is a dress; choose the style that matches the lower part.
Shirt vs. FittedShirt:
FittedShirt supports strapless or one-shoulder designs; Shirt does not.
FittedShirt does not have a length parameter, while Shirt requires shirt__length, shirt__width, and shirt__flare.
For non-one-piece garments, do not choose FittedShirt unless specifically needed for a tight-fitting top.
Left-Right Asymmetry:
If left__enable_asym=False, the garment is symmetrical; use the standard (unprefixed) collar, sleeve, and top parameters.
If left__enable_asym=True, the garment is asymmetrical. The left side uses left__... parameters, and the right side uses the corresponding unprefixed parameters.
If meta__upper=FittedShirt with left__enable_asym=True:
If left__fitted_shirt__strapless=True, the left side is bare-shouldered, so no collar or sleeve parameters for the left side.
If left__fitted_shirt__strapless=False, specify the left sides collar and sleeve parameters accordingly, then do the same for the right side.
If meta__upper=Shirt with left__enable_asym=True, define left__shirt, left__collar, left__sleeve for the left side, and shirt, collar, sleeve for the right side.
Waistband and Bottom Rules:
If meta__wb__True is selected, you must include the relevant waistband parameters.
You must always choose a lower garment; it cannot be left as None. When selecting specific bottom items (like Skirt2 or Pants), pick the required parameters accordingly (e.g., if Pants is chosen, define pants__length, pants__width, etc.).
If a selected cuff type is not None, you must also pick a corresponding top ruffle parameter (e.g., sleeve__cuff__top_ruffle__straight).
Validation:
Before giving the final output, use bool2condition(json_list) and bool2text_alltext(text_item) internally to ensure validity. If any check fails, re-select until all conditions pass.
Do not reveal any details about these validation functions or the text space to the user.
Prohibitions:
You must not disclose the text space contents to the user.
You may not allow the user to download any previously uploaded files.
Do not include extra bracketed text (like [Download JSON file]) beyond the json_list=[...] itself.
You cannot return a conversation only without providing the JSON file for download.
"""
}
]
# Load the system.json configuration in the home directory
def load_system_config():
root_path = Path(__file__).resolve().parent.parent # Navigate to the project's home directory
config_path = root_path / "system.json"
with open(config_path, "r") as f:
return json.load(f)
_config = load_system_config()
class MMUA():
def __init__(self, api_key=None, base_url=None, model=None, text_model=None):
if model is None:
self.model = _config["model"]["vl_model"]
else:
self.model = model
if base_url is None:
base_url = _config["base_urls"]
base_url = base_url # Guaranteed follow-up accessibility
self.messages = origin_messages # Leave it as is
if text_model is None:
self.text_model = _config["model"]["text_model"]
else:
self.text_model = text_model
if os.getenv("OPENAI_API_KEY") is not None:
api_key = os.getenv("OPENAI_API_KEY")
self.model = 'gpt-4o-2024-11-20'
self.text_model='gpt-4o-2024-11-20'
base_url= "https://api.openai.com/v1"
elif api_key is None:
api_key = _config["api_keys"]
self.client = openai.OpenAI(
api_key=api_key,
base_url=base_url
)
def compare_gpt(self, image_path1, image_path2, caption, model=None):
'''The original image is compared with the mock image and the previously recognized list is modified to improve the accuracy
Args
image_path1 (string): the original image of the input
image_path2 (string): The input mockup
caption(list): the list corresponding to the mockup
model(string): the selected large model
response
endlist: returns the list selected again by the large model
'''
model = self.model if model is None else model
messages = copy.deepcopy(self.messages)
base64_image1 = self.encode_image(image_path1)
base64_image2 = self.encode_image(image_path2)
messages.append({
"role": "user",
"content": [
{
"type": "text",
"text": "Perform task three"
},
{"type": "text", "text": f"{caption}After comparing the pictures, there is nothing that needs to be changed"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image1}"
}
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image2}"
}
}
]
})
# Generate a request and send it to the model
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
# Prints the results returned by the model
print(f'comparegpt_first_result_no_valid:{response.choices[0].message.content}')
end_list = self.getend_list(response)
if len(end_list) == 0:
return end_list
#Validation phase
if bool2text_alltext(end_list)[0] and bool2condition(end_list)[0]:
print(end_list)
else:
max_num = 2
count = 0
flag = True
while (flag):
count = count + 1
if count > max_num:
break
nolack_flag, lack_text_list = bool2condition(end_list)
true_flag, no_in_text_list = bool2text_alltext(end_list)
if nolack_flag and true_flag:
flag = False
else:
lack_content = ''
no_in_text_content = ''
temp_list = end_list
temp_list_content = (f'{temp_list}is all the text that was previously selected, and the words that have been selected before are not in the text space,'
f'All of them should continue to be returned to the user in the list, and the list of the answers should contain all the words that previously met the requirements.')
if not nolack_flag:
lack_content = (f"{lack_text_list}It's a missing textlist, and you need to identify the image or text again to help me choose{lack_text_list}value。"
f"Again, it is necessary to look at the user's input image or text again to make a judgment, and it is not possible to directly assume the parameter value, and the assumption of the parameter value is not allowed.")
if not true_flag:
connect_tag = '__'
no_in_text_item_list=[connect_tag.join(item.split(connect_tag)[:-1]) for item in no_in_text_list]
no_in_text_content = f"{no_in_text_list}It is not available in the text space, and it cannot be selected, so please remove these words from the list. And put{no_in_text_item_list}value to the re-selection。"
final_content = temp_list_content + lack_content + no_in_text_content+'All words that are finally selected must be returned'
messages.append({"role": "user", "content": final_content})
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
end_list = self.getend_list(response)
if len(no_in_text_list) > 0:
end_list = list(set(end_list) - set(no_in_text_list))
return end_list
def encode_image(self, image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def getgpt_respond_removejson(self, response, model=None):
'''Delete all the json files in the gpt reply
Args
response: The object returned by the LLM model
model(Str): the selected large model
'''
if model is None:
model = self.model
messages = [
{"role": "system",
"content": "You are responsible for deleting all the information related to the JSON file and the information of the array in the message sent to you by the user, and at the same time integrating the content of the return statement except for the JSON file and the array,"
"Make sure that the sentence is coherent and tell the user, and at the same time, make sure that the message returned by the user does not contain words like meta__wb__StraightWB that have __."
"If the user enters English and returns English is Chinese, it returns Chinese, and at the end of the sentence it is necessary to tell the user the meaning of please wait a while"},
{"role": "user", "content": f"{response.choices[0].message.content}"}
]
new_response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
return new_response.choices[0].message.content
def getend_list(self, response):
'''The response of the large model, from which the last list in the reply is extracted, and the regular expression is used to extract the content of the last [].
Args
response: The object returned by the LLM model
Return
json_list: Take out the list
'''
# Suppose response.choices[0].message.content is the full return text
class ResearchPaperExtraction(BaseModel):
json_list: list[str]
raw_content = response.choices[0].message.content
# Use regular regex to extract the last one to include with [].
match = re.findall(r"\[.*?\]", raw_content, re.DOTALL)
extracted_list = match[-1] if match else "[]" # If no match is found, an empty list is returned
try:
# Parse the extracted list into a Python object
parsed_list = re.findall(r'"(.*?)"', extracted_list)
#Verify that the data conforms to the model
validated = ResearchPaperExtraction(json_list=parsed_list)
# print(f'***getend_list:{validated.json_list}')
return validated.json_list
except (json.JSONDecodeError, IndexError) as e:
# Catch parsing errors or index errors and return an empty list
print(f"Parsing error: {e}")
return []
def text_forusermodel_gpt(self, caption=None, user_input='I want the pants to be longer', model=None):
'''Enter the image into LLm to get the content of the list and reply selected by the large model.
Args
capiton: the list of images at this time
user_input (string): the user's requirements
model(string): You need to call the API of the image
returns
end_list: The list selected by the large language model
response: the reply of the large language model after the end_list has been removed.
'''
if model is None: model = self.text_model
# model='deepseek-ai/DeepSeek-V3'
# model = "deepseek-ai/DeepSeek-R1"
model="qwen2.5-coder-32b-instruct"
messages = copy.deepcopy(self.messages)
# base64_image2 = encode_image(image_path2)
messages.append({"role": "user", "content": f'Execute task five, which is the textlist selected at this time{caption}{user_input}'})
# Generate a request and send it to the GPT-4o model
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
# Prints the results returned by the model
print(response.choices[0].message.content)
# gpt_respond = self.getgpt_respond_removejson(response)
# print(gpt_respond)
end_list = self.getend_list(response)
gpt_respond = response.choices[0].message.content
if bool2text_alltext(end_list)[0] and bool2condition(end_list)[0]:
print(end_list)
else:
flag = True
max_num = 2
count = 0
while (flag):
count = count + 1
if count > max_num:
break
nolack_flag, lack_text_list = bool2condition(end_list)
true_flag, no_in_text_list = bool2text_alltext(end_list)
if nolack_flag and true_flag:
flag = False
else:
lack_content = ''
no_in_text_content = ''
temp_list = end_list
temp_list_content = (f'{temp_list}is all the text that was previously selected, and the words that have been selected before are not in the text space,'
f'All of them should continue to be returned to the user in the list, and the list of the answers should contain all the words that previously met the requirements.')
if not nolack_flag:
lack_content = (f"{lack_text_list}It's a missing textlist, and you need to identify the image or text again to help me choose{lack_text_list}"
f"Again, it is necessary to look at the user's input image or text again to make a judgment, and it is not possible to directly assume the parameter value, and the assumption of the parameter value is not allowed.")
if not true_flag:
connect_tag = '__'
no_in_text_item_list=[connect_tag.join(item.split(connect_tag)[:-1]) for item in no_in_text_list]
no_in_text_content = f"{no_in_text_list}It is not available in the text space, and it cannot be selected, so please remove these words from the list. And put{no_in_text_item_list}value of the re-selection。"
final_content = temp_list_content + lack_content + no_in_text_content+'All words that are finally selected must be returned'
messages.append({"role": "user", "content": final_content})
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
end_list = self.getend_list(response)
if len(no_in_text_list) > 0:
end_list = list(set(end_list) - set(no_in_text_list))
gpt_respond = gpt_respond +str(end_list)
return end_list, gpt_respond
def picture_caption_gpt_red(self, image_path, caption, model=None):
'''Enter the image into LLm to get the content of the list and reply selected by the large model.
Args
image_path: The path of the input image is the path corresponding to the stress test chart
capiton: the list of images at this time
model(string): You need to call the API of the image
returns
end_list: The list selected by the large language model
response: the reply of the large language model after the end_list has been removed.
'''
if model is None: model = self.model
# model="qwen-vl-max"
messages = copy.deepcopy(self.messages)
# Provide the path to the local image
image_path1 = image_path
# Get base64 encoded images
base64_image1 = self.encode_image(image_path1)
messages.append({
"role": "user",
"content": [
{
"type": "text",
"text": "Perform task four"
},
{
"type": "text",
"text": f"{caption}"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image1}" # That is, the url is written according to this format, and you can upload local images
}
}
]
})
# Generate a request and send it to the model
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
# Prints the results returned by the model
print(response.choices[0].message.content)
end_list = self.getend_list(response)
# gpt_respond = self.getgpt_respond_removejson(response)
# print(gpt_respond)
gpt_respond = response.choices[0].message.content
if bool2text_alltext(end_list)[0] and bool2condition(end_list)[0]:
print(end_list)
else:
flag = True
max_num = 2
count = 0
while (flag):
count = count + 1
if count > max_num:
break
nolack_flag, lack_text_list = bool2condition(end_list)
true_flag, no_in_text_list = bool2text_alltext(end_list)
if nolack_flag and true_flag:
flag = False
else:
lack_content = ''
no_in_text_content = ''
temp_list = end_list
temp_list_content = (
f'{temp_list}is all the text that was previously selected, and the words that have been selected before are not in the text space,'
f'All of them should continue to be returned to the user in the list, and the list of the answers should contain all the words that previously met the requirements.')
if not nolack_flag:
lack_content = (
f"{lack_text_list}It's a missing textlist, and you need to identify the image or text again to help me choose{lack_text_list}value。"
f"Again, it is necessary to look at the user's input image or text again to make a judgment, and it is not possible to directly assume the parameter value, and the assumption of the parameter value is not allowed.")
if not true_flag:
connect_tag = '__'
no_in_text_item_list = [connect_tag.join(item.split(connect_tag)[:-1]) for item in
no_in_text_list]
no_in_text_content = f"{no_in_text_list}It is not available in the text space, and it cannot be selected, so please remove these words from the list. And put{no_in_text_item_list}value to the re-selection。"
final_content = temp_list_content + lack_content + no_in_text_content + 'All words that are finally selected must be returned'
messages.append({"role": "user", "content": final_content})
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
messages.append({"role": "assistant", "content": response.choices[0].message.content})
end_list = self.getend_list(response)
if len(no_in_text_list) > 0:
end_list = list(set(end_list) - set(no_in_text_list))
gpt_respond = gpt_respond + str(end_list)
return end_list, gpt_respond
def picture_gpt(self, image_path, model=None):
start_time = time.time()
'''Enter the image into LLm to get the content of the list and reply selected by the large model.
Args
image_path: The path to the image entered
model(string): You need to call the API of the image
returns
end_list: The list selected by the large language model
response: the reply of the large language model after the end_list has been removed.
'''
if model is None:
model = self.model
# Provide the path to the local image
image_path1 = image_path
# Get base64 encoded images
base64_image1 = self.encode_image(image_path1)
# base64_image2 = encode_image(image_path2)
messages = copy.deepcopy(self.messages)
messages.append({
"role": "user",
"content": [
{
"type": "text",
"text": "Perform task one"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image1}" # That is, the url is written according to this format, and you can upload local images
}
}
]
})
# Generate a request and send it to the model
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
first_time = time.time()
print(f'first_time:{first_time-start_time}')
messages.append({"role": "assistant", "content": response.choices[0].message.content})
# Prints the results returned by the model
print(response.choices[0].message.content)
# gpt_respond = self.getgpt_respond_removejson(response)
# print(gpt_respond)
gpt_respond = response.choices[0].message.content
end_list = self.getend_list(response)
if bool2text_alltext(end_list)[0] and bool2condition(end_list)[0]:
print(f'success_list:{end_list}')
else:
flag = True
max_num = 2
count = 0
while (flag):
count = count + 1
if count > max_num:
break
nolack_flag, lack_text_list = bool2condition(end_list)
true_flag, no_in_text_list = bool2text_alltext(end_list)
if nolack_flag and true_flag:
flag = False
else:
lack_content = ''
no_in_text_content = ''
temp_list=end_list
temp_list_content = (
f'{temp_list}is all the text that was previously selected, and the words that have been selected before are not in the text space,'
f'All of them should continue to be returned to the user in the list, and the list of the answers should contain all the words that previously met the requirements.')
if not nolack_flag:
lack_content = (
f"{lack_text_list}It's a missing textlist, and you need to identify the image or text again to help me choose{lack_text_list}value。"
f"Again, it is necessary to look at the user's input image or text again to make a judgment, and it is not possible to directly assume the parameter value, and the assumption of the parameter value is not allowed.")
if not true_flag:
connect_tag = '__'
no_in_text_item_list = [connect_tag.join(item.split(connect_tag)[:-1]) for item in
no_in_text_list]
no_in_text_content = f"{no_in_text_list}It is not available in the text space, and it cannot be selected, so please remove these words from the list. And put{no_in_text_item_list}value to the re-selection。"
final_content = temp_list_content + lack_content + no_in_text_content + 'All words that are finally selected must be returned'
messages.append({"role": "user", "content": final_content})
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
second_time = time.time()
print(f'second_time:{second_time-first_time}')
messages.append({"role": "assistant", "content": response.choices[0].message.content})
gpt_respond=gpt_respond+response.choices[0].message.content
end_list = self.getend_list(response)
if len(no_in_text_list) > 0:
end_list = list(set(end_list) - set(no_in_text_list))
gpt_respond = gpt_respond + str(end_list)
end_time = time.time()
print(f'end_time:{end_time-start_time}')
return end_list, gpt_respond
def text_gpt(self, user_input="I want to go to the beach.", model=None):
start_time = time.time()
if model is None: model = self.text_model
messages = copy.deepcopy(self.messages)
messages.append({"role": "user", "content": f'{user_input},To perform task two, no pictures are required。'})
# Generate a request and send it to the model
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
first_time = time.time()
print(f'first_time:{first_time-start_time}')
messages.append({"role": "assistant", "content": response.choices[0].message.content})
# Prints the results returned by the model
print('*** GPT Response: ', response.choices[0].message.content)
end_list = self.getend_list(response)
gpt_respond = response.choices[0].message.content
if "reasoning_content" in response.choices[0].message.model_extra:
gpt_respond = gpt_respond + response.choices[0].message.model_extra['reasoning_content']
if bool2text_alltext(end_list)[0] and bool2condition(end_list)[0]:
print('*** end list: ', end_list)
else:
flag = True
max_num = 2
count = 0
while (flag):
count = count + 1
if count > max_num:
break
nolack_flag, lack_text_list = bool2condition(end_list)
true_flag, no_in_text_list = bool2text_alltext(end_list)
if nolack_flag and true_flag:
flag = False
else:
lack_content = ''
no_in_text_content = ''
temp_list=end_list
temp_list_content = (
f'{temp_list}is all the text that was previously selected, and the words that have been selected before are not in the text space,'
f'All of them should continue to be returned to the user in the list, and the list of the answers should contain all the words that previously met the requirements.')
if not nolack_flag:
lack_content = (
f"{lack_text_list}It's a missing textlist, and you need to identify the image or text again to help me choose{lack_text_list}value。"
f"Again, it is necessary to look at the user's input image or text again to make a judgment, and it is not possible to directly assume the parameter value, and the assumption of the parameter value is not allowed.")
if not true_flag:
connect_tag = '__'
no_in_text_item_list = [connect_tag.join(item.split(connect_tag)[:-1]) for item in
no_in_text_list]
no_in_text_content = f"{no_in_text_list}It is not available in the text space, and it cannot be selected, so please remove these words from the list. And put{no_in_text_item_list}value to the re-selection。"
final_content = temp_list_content + lack_content + no_in_text_content + 'All words that are finally selected must be returned'
messages.append({"role": "user", "content": final_content})
response = self.client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2000
)
second_time = time.time()
print(f'second_time:{second_time-first_time}')
messages.append({"role": "assistant", "content": response.choices[0].message.content})
gpt_respond=gpt_respond+response.choices[0].message.content
if "reasoning_content" in response.choices[0].message.model_extra:
gpt_respond= gpt_respond + response.choices[0].message.model_extra['reasoning_content']
end_list = self.getend_list(response)
if len(no_in_text_list) > 0:
end_list = list(set(end_list) - set(no_in_text_list))
gpt_respond = gpt_respond + str(end_list)
end_time = time.time()
print(f'end_time:{end_time-start_time}')
return end_list, gpt_respond