पाठ 4 / 25

हर Guard वाला Loop

Step, token और समय की सीमाएँ एक दोबारा उपयोग होने वाले budget object में जोड़ें।

सीमाएँ एक object के पास

Loop में जगह-जगह if जाँचें बिखेरने से सीमाएँ भूलना आसान हो जाता है। छोटा Budget object steps, tokens और बीता समय गिनता है, और एक सवाल का उत्तर देता है: "क्या हम जारी रख सकते हैं, और नहीं तो क्यों?" Loop हर बारी उससे एक बार पूछता है।

Budget class

यह जैसा दिखाया गया वैसा ही चला। 3,000, 4,000 और 4,000 tokens जोड़ने पर तीसरे step पर 10,000-token सीमा टूटती है, और reason() कारण बताता है।

class Budget:
    def __init__(self, max_steps, max_tokens):
        self.max_steps, self.max_tokens = max_steps, max_tokens
        self.steps = self.tokens = 0

    def charge(self, tokens):
        self.steps += 1
        self.tokens += tokens

    def reason(self):
        if self.steps >= self.max_steps: return "step limit"
        if self.tokens >= self.max_tokens: return "token budget"
        return None

b = Budget(5, 10_000)
for used in (3000, 4000, 4000):
    b.charge(used)
    print(b.steps, b.tokens, b.reason())

Output:

1 3000 None
2 7000 None
3 11000 token budget

सिर्फ़ boolean नहीं, कारण लौटाएँ

Log में "रुका" बेकार है। "रुका: step 3 पर token budget" बताता है कि क्या ठीक करना है। हर stop के साथ कारण का string रखें।

त्वरित जाँच: सीमाएँ एक Budget object में क्यों रखें?

  • बिखरी जाँचें भूलना या असंगत लगाना आसान है
  • Python में classes ज़रूरी हैं
  • यह model को ज़्यादा बुद्धिमान बनाता है
  • यह tests की ज़रूरत ख़त्म करता है
Answer

बिखरी जाँचें भूलना या असंगत लगाना आसान है — सीमाओं का एक मालिक जाँचों को एक-सा रखता है और रुकने का कारण बताना आसान करता है।