Σημαντική Νοημοσύνη: Μέρος 10 - Ο Μαγείρισσα DiSE: Όταν τα εργαλεία μαγειρεύουν τους εαυτούς τους στις ροές εργασίας (ελληνικά (Greek))

Σημαντική Νοημοσύνη: Μέρος 10 - Ο Μαγείρισσα DiSE: Όταν τα εργαλεία μαγειρεύουν τους εαυτούς τους στις ροές εργασίας

Wednesday, 19 November 2025

//

26 minute read

Το φινάλε της Semantic Memory Series.

Σημείωση: Αυτό είναι το 10ο μέρος της σειράς Semantic Memory και το πρώτο στη σειρά DiSE Cooker. Μετακινούμαστε από τη θεωρία στην πράξη, από το "πώς τα εργαλεία λειτουργούν" στο "τι συμβαίνει όταν τα χρησιμοποιείτε πραγματικά για πραγματικές εργασίες."

Το Τέλος και η Αρχή

Μέρη 1-9 κατασκευασμένα μέχρι αυτό: ένα σύστημα που δεν δημιουργεί μόνο κώδικα, αλλά Εξελίσσεται εργαλεία που δεν κάθονται απλά εκεί, αλλά μάθετε Μια εργαλειοθήκη που δεν εκτελεί μόνο ροές εργασίας, αλλά θυμάται κάθε επιτυχία και κάθε αποτυχία.

Τώρα απαντάμε στην ερώτηση που κανείς δεν έκανε, αλλά όλοι θα έπρεπε να έχουν:

Τι γίνεται όταν χρησιμοποιείς αυτό το πράγμα;

Όχι για παραδείγματα παιχνιδιών, όχι για τον "Γεια σου κόσμο." Για μια πραγματική, βρώμικη, πολυ-βήμα εργασία που κανονικά συστήματα δημιουργίας κώδικα θα πνιγούν εντελώς.

Εδώ είναι το σενάριο:

"Πηγαίνετε σε αυτή την ιστοσελίδα, φέρτε το περιεχόμενο, συνοψίστε το, μεταφράστε το στα ισπανικά (χρησιμοποιώντας NMT αλλά ελέγξτε την ποιότητα και χρησιμοποιήστε κάτι καλύτερο αν χρειαστεί), τότε δημιουργήστε ένα ηλεκτρονικό ταχυδρομείο HTML και στείλτε το χρησιμοποιώντας SendGrid."

Μια πρόταση μόνο. Επτά ξεχωριστές επιχειρήσεις. Πολλαπλά εργαλεία. Πολλαπλές λειτουργίες αποτυχίας. Πολλαπλές ευκαιρίες βελτιστοποίησης.

Ας δούμε το DiSE να μαγειρεύει.

Το αίτημα: Απλό απατηλά

DiSE> Fetch the article at https://example.com/blog/post, summarize it to 3 paragraphs, translate to Spanish with quality checking, create an HTML email template, and send it via SendGrid to [email protected]

Analyzing request...

Τι συνέβη μόλις τώρα; Το σύστημα έλαβε μια σύνθετη εργασία, όχι "γράψτε μια λειτουργία." Όχι "μεταφράστε αυτό το κείμενο." ροή εργασίας με:

  • Web getching
  • Εκχύλιση περιεχομένου
  • Ανακεφαλαίωση
  • Μετάφραση με επικύρωση
  • Παραγωγή HTML
  • Αποστολή email μέσω εξωτερικού API

Παραδοσιακή παραγωγή κώδικα LLM είτε:

  1. Δημιουργία ενός τεράστιου, εύθραυστου μονόλιθου
  2. Να σου ζητήσω να το σπάσεις χειροκίνητα.
  3. Ψευδαισθήσεις APIs που δεν υπάρχουν
  4. Παραιτήσου εντελώς.

Το DiSE κάνει κάτι διαφορετικό.

Φάση 1: Αποσύνθεση εργασιών

✓ Task classified as MULTI_STEP_WORKFLOW
✓ Complexity: COMPLEX (7 steps, 4 tools needed, 1 missing)
✓ Consulting overseer LLM for decomposition strategy...

Το Overseeer (llama3 ή Claude-3.5-sonnet, ανάλογα με τη ρύθμιση σας) αναλύει το αίτημα και δημιουργεί ένα προδιαγραφές ροής εργασίας:

{
  "workflow_id": "article_to_spanish_email",
  "description": "Fetch, summarize, translate, and email article content",
  "steps": [
    {
      "step_id": "fetch_content",
      "description": "Fetch webpage content from URL",
      "tool_search": "http client fetch webpage",
      "parallel_group": null,
      "depends_on": []
    },
    {
      "step_id": "summarize",
      "description": "Summarize content to 3 paragraphs",
      "tool_search": "summarize text content",
      "parallel_group": null,
      "depends_on": ["fetch_content"]
    },
    {
      "step_id": "translate_nmt",
      "description": "Translate summary to Spanish using NMT",
      "tool_search": "nmt translator spanish",
      "parallel_group": 1,
      "depends_on": ["summarize"]
    },
    {
      "step_id": "validate_translation",
      "description": "Check translation quality",
      "tool_search": "translation quality validation",
      "parallel_group": 1,
      "depends_on": ["summarize"]
    },
    {
      "step_id": "retry_if_needed",
      "description": "Use better translator if NMT quality is poor",
      "tool_search": "high quality translation",
      "parallel_group": null,
      "depends_on": ["translate_nmt", "validate_translation"],
      "conditional": "quality_score < 0.7"
    },
    {
      "step_id": "create_html",
      "description": "Generate HTML email template with translated content",
      "tool_search": "html email template generator",
      "parallel_group": null,
      "depends_on": ["retry_if_needed"]
    },
    {
      "step_id": "send_email",
      "description": "Send email via SendGrid API",
      "tool_search": "sendgrid email send",
      "parallel_group": null,
      "depends_on": ["create_html"]
    }
  ],
  "estimated_complexity": "complex",
  "requires_new_tools": ["sendgrid_client", "html_email_generator"]
}

Προσέξτε τι συνέβη:

  • Παράλληλη εκτέλεση: Μετάφραση και επικύρωση εκτελείται ταυτόχρονα (παρόμοιο_ομάδα: 1)
  • Λογική υπό όρους: Βήμα επαναπροσπάθειας ενεργοποιεί μόνο εάν η ποιότητα είναι κακή
  • Παρακολούθηση εξάρτησης: Κάθε βήμα ξέρει τι χρειάζεται
  • Απαιτήσεις εργαλείων: Το σύστημα ήδη γνωρίζει ποια εργαλεία υπάρχουν και ποια πρέπει να δημιουργηθούν

Φάση 2: Ανακάλυψη εργαλείων

Searching for tools...
  ✓ fetch_content: Found 'http_rest_client' (fitness: 0.92)
  ✓ summarize: Found 'summarizer_fast' (fitness: 0.88)
  ✓ translate_nmt: Found 'nmt_translator' (fitness: 0.85)
  ✓ validate_translation: Found 'translation_quality_checker' (fitness: 0.91)
  ✓ retry_if_needed: Found 'quick_translator' (fitness: 0.93)
  ✗ create_html: No suitable tool found
  ✗ send_email: No suitable tool found

Missing tools: 2
Action: Generate new tools for missing capabilities

Το σύστημα μόλις έψαξε τη μνήμη του RAG για τα υπάρχοντα εργαλεία που χρησιμοποιούν Σημαντική ομοιότητα και βαθμολογίες καταλληλότηταςΠέντε εργαλεία υπάρχουν, δύο όχι.

Εδώ είναι που γίνεται ενδιαφέρον.

Φάση 3: Γενιά εργαλείων On-The-Fly

Εργαλείο 1: γεννήτρια ηλεκτρονικού ταχυδρομείου HTML

Generating tool: html_email_generator
  Using: fast_code_generator (gemma3:4b)
  Specification: Create HTML email template with header, body, footer
  Template type: Newsletter-style responsive HTML

  ✓ Code generated (127 lines)
  ✓ Tests generated (15 test cases)
  ✓ All tests passed
  ✓ Static analysis: PASS (pylint: 9.2/10)
  ✓ Registered in RAG memory
  ✓ Version: 1.0.0
  ✓ Fitness: 0.87 (estimated)

Το σύστημα απλά:

  1. Δημιουργία ενός πλήρους ορισμού εργαλείων (YAML)
  2. Δημιουργία του κώδικα εφαρμογής (Python)
  3. Σχεδιασμένες ολοκληρωμένες δοκιμές
  4. Επικυρωμένη ποιότητα κωδικού
  5. Το αποθηκεύσαμε για μελλοντική επαναχρησιμοποίηση
  6. Όλα σε περίπου 8 δευτερόλεπτα

Εργαλείο 2: SendGrid Πελάτης

Generating tool: sendgrid_email_client
  Type: openapi (external API integration)
  Analyzing SendGrid API documentation...
  Creating OpenAPI specification...

  ✓ Tool definition created
  ✓ Code template generated (API wrapper)
  ✓ Authentication configured (API key from env)
  ✓ Rate limiting: 100 req/min
  ✓ Retry logic: 3 attempts with exponential backoff
  ✓ Registered in RAG memory
  ✓ Version: 1.0.0
  ✓ Fitness: 0.82 (estimated, needs real-world data)

Περίμενε, το σύστημα απλά... δημιούργησε ένα εργαλείο ενσωμάτωσης OpenAPI Από το μηδέν.

  1. Αναλύθηκε η δομή API του SendGrid
  2. Δημιουργία ορισμού εργαλείων
  3. Δημιουργημένος χειρισμός ταυτοποίησης
  4. Προστιθέμενη ανθεκτικότητα (θρησκείες, περιορισμός ταχύτητας)
  5. Το έκανα άμεσα χρησιμοποιήσιμο.

Τώρα έχουμε 2 ολοκαίνουρια εργαλεία που δεν υπήρχαν πριν 15 δευτερόλεπτα.

Φάση 4: Εκτέλεση ροής εργασίας

Εδώ συμβαίνει πραγματικά η μαγεία. Το σύστημα εκτελεί τη ροή εργασίας με πλήρη παρατηρησιμότητα:

graph TB
    Start([User Request]) --> Fetch[Step 1: Fetch Content<br/>Tool: http_rest_client<br/>URL: example.com/blog/post]

    Fetch --> |200 OK<br/>4,521 bytes| Summarize[Step 2: Summarize<br/>Tool: summarizer_fast<br/>Target: 3 paragraphs]

    Summarize --> |652 words → 187 words| Parallel{Parallel Execution}

    Parallel --> |Branch A| Translate[Step 3: Translate NMT<br/>Tool: nmt_translator<br/>Language: Spanish]
    Parallel --> |Branch B| ValidateSetup[Step 3b: Quality Check Setup<br/>Tool: translation_quality_checker]

    Translate --> |"Artículo sobre..."<br/>3.2s| Validate[Step 4: Validate Translation<br/>Quality Score: 0.64]

    Validate --> |Score: 0.64 < 0.7<br/>POOR QUALITY| Retry[Step 5: Retry with Better Tool<br/>Tool: quick_translator<br/>llama3-based]

    Retry --> |Quality Score: 0.92<br/>HIGH QUALITY| HTML[Step 6: Create HTML Email<br/>Tool: html_email_generator<br/>NEW TOOL v1.0.0]

    HTML --> |Template: 2,341 chars| Send[Step 7: Send via SendGrid<br/>Tool: sendgrid_email_client<br/>NEW TOOL v1.0.0]

    Send --> |Message ID: msg_7x3f...<br/>Status: Queued| Success([✓ Workflow Complete<br/>Total: 18.7s])

    style Fetch stroke:#1976d2,stroke-width:3px,color:#1976d2
    style Summarize stroke:#388e3c,stroke-width:3px,color:#388e3c
    style Translate stroke:#f57c00,stroke-width:3px,color:#f57c00
    style Validate stroke:#c2185b,stroke-width:3px,color:#c2185b
    style Retry stroke:#7b1fa2,stroke-width:3px,color:#7b1fa2
    style HTML stroke:#00796b,stroke-width:3px,color:#00796b
    style Send stroke:#3f51b5,stroke-width:3px,color:#3f51b5
    style Success stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Τι Συνέβη Πραγματικά

Βήμα 1 (Περιεκτικό στοιχείο):

# Generated code (simplified)
from node_runtime import call_tool
import json

result = call_tool("http_rest_client", json.dumps({
    "url": "https://example.com/blog/post",
    "method": "GET",
    "headers": {"Accept": "text/html"}
}))

data = json.loads(result)
raw_html = data['body']
# Result: 4,521 bytes of HTML

Χρόνος εκτέλεσης: 1.2s Κατάσταση Cache: MISS (πρώτη φορά να φέρει αυτό το URL) Αποθηκευμένο σε ΚΓΠΕ για μελλοντική επαναχρησιμοποίηση

Βήμα 2 (Summarize):

summary = call_tool("summarizer_fast", json.dumps({
    "text": raw_html,
    "max_paragraphs": 3,
    "preserve_key_points": True
}))
# Result: 187-word summary

Χρόνος εκτέλεσης: 2.8s Μοντέλο που χρησιμοποιείται: llama3 μέσω corrector_fast tool Κατάσταση Cache: MISS Βαθμολογία ποιότητας: 0.89 (εξαιρετικό)

Βήμα 3 & 4 (Παραλλέκτης: Μετάφραση + Ημερομηνία:

Εδώ λάμπει ο παραλληλισμός:

import asyncio
from node_runtime import call_tools_parallel

# Both execute simultaneously
results = call_tools_parallel([
    ("nmt_translator", json.dumps({
        "text": summary,
        "source_lang": "en",
        "target_lang": "es",
        "beam_size": 5
    }), {}),
    # Validation setup runs in parallel
    ("translation_quality_checker", json.dumps({
        "setup": True,
        "target_lang": "es"
    }), {})
])

translation_result, validation_setup = results

Παράλληλη χρονική στιγμή εκτέλεσης:

  • Χωρίς παραλληλισμό: 3.2s + 2.1s = 5.3s
  • Με παραλληλισμό: max(3.2s, 2.1s) = 3.2s
  • Αποθήκευση: 2,1 δευτερόλεπτα (40% γρηγορότερα)

Το πρόβλημα ποιότητας της μετάφρασης:

# Validate the NMT translation
quality = call_tool("translation_quality_checker", json.dumps({
    "original": summary,
    "translation": translation_result,
    "source_lang": "en",
    "target_lang": "es"
}))

quality_data = json.loads(quality)
# Result: {
#   "score": 0.64,
#   "issues": [
#     "Repeated words: 'articulo articulo'",
#     "Grammar inconsistency detected",
#     "Potential word-by-word translation"
#   ],
#   "recommendation": "RETRY_WITH_BETTER_MODEL"
# }

Το σύστημα εντόπισε κακή ποιότητα! Το NMT ήταν γρήγορο (3.2s) αλλά παρήγαγε μια μέτρια μετάφραση (0.64 σκορ).

Βήμα 5 (Συνταγματική δοκιμή):

Επειδή η ποιότητα < 0,7, η επαναπροσπάθεια υπό όρους ενεργοποιεί:

# Use better translator (llama3-based)
better_translation = call_tool("quick_translator", json.dumps({
    "text": summary,
    "source_lang": "en",
    "target_lang": "es",
    "context": "newsletter article",
    "preserve_formatting": True
}))

# Validate again
retry_quality = call_tool("translation_quality_checker", json.dumps({
    "original": summary,
    "translation": better_translation,
    "source_lang": "en",
    "target_lang": "es"
}))

# Result: {"score": 0.92, "issues": [], "recommendation": "ACCEPT"}

Χρόνος εκτέλεσης: 8.4 (πιο αργά αλλά καλύτερα way) Κατάσταση Cache: MISS Ποιότητα: 0.92 (εξαιρετικό!)

Το σύστημα αυτο-διασταλμένο σε ένα καλύτερο εργαλείο όταν η ποιότητα NMT ήταν ανεπαρκής.

Βήμα 6 (Δημιουργία ηλεκτρονικού ταχυδρομείου HTML):

# Use the NEWLY GENERATED tool
html_email = call_tool("html_email_generator", json.dumps({
    "subject": "Weekly Article Summary",
    "header_text": "Your Weekly Digest",
    "body_content": better_translation,
    "footer_text": "Unsubscribe | Update Preferences",
    "style": "newsletter",
    "responsive": True
}))

# Result: Beautiful responsive HTML email template

Χρόνος εκτέλεσης: 1,8s Αυτό το εργαλείο δημιουργήθηκε πριν 10 δευτερόλεπτα. και ήδη χρησιμοποιείται στην παραγωγή! Κατάσταση Cache: MISS (Μάρκα νέο εργαλείο)

Βήμα 7 (Send via SendGrid):

# Use the NEWLY GENERATED SendGrid integration
send_result = call_tool("sendgrid_email_client", json.dumps({
    "to": "[email protected]",
    "from": "[email protected]",
    "subject": "Weekly Article Summary",
    "html_content": html_email,
    "api_key": "${SENDGRID_API_KEY}"  # From environment
}))

# Result: {
#   "success": True,
#   "message_id": "msg_7x3f9a2c...",
#   "status": "queued",
#   "timestamp": "2025-01-23T14:23:45Z"
# }

Χρόνος εκτέλεσης: 1.4s Εξωτερική κλήση API: ΕΠΙΣΚΟΠΗΣΗ Κατάσταση Cache: N/A (email αποστολή δεν cached)

Περίληψη ροής εργασίας

┌─────────────────────────────────────────────────────────────┐
│  Workflow: article_to_spanish_email                         │
│  Status: ✓ SUCCESS                                          │
│  Total Time: 18.7 seconds                                   │
│  Steps Executed: 7                                          │
│  Tools Used: 7 (2 generated on-the-fly)                     │
│  Parallel Savings: 2.1 seconds                              │
│  Conditional Retries: 1 (translation quality escalation)    │
│  Cache Hits: 0 (first execution)                            │
│  New Tools Created: 2 (html_email_generator, sendgrid)      │
└─────────────────────────────────────────────────────────────┘

Performance Breakdown:
  Step 1 (Fetch):        1.2s  (6%)
  Step 2 (Summarize):    2.8s  (15%)
  Step 3-4 (Parallel):   3.2s  (17%)  ← Would be 5.3s sequential
  Step 5 (Retry):        8.4s  (45%)  ← Quality-driven escalation
  Step 6 (HTML):         1.8s  (10%)
  Step 7 (SendGrid):     1.4s  (7%)

Critical Path: Fetch → Summarize → Translate → Retry → HTML → Send
Bottleneck: Translation retry (necessary for quality)

Φάση 5: Παρακολούθηση και Εξέλιξη

Η ροή της εργασίας πέτυχε, αλλά το σύστημα δεν τελείωσε. μάθηση.

Άμεση μάθηση (Παρακολούθηση του χρόνου λειτουργίας)

Storing workflow execution in RAG...
  ✓ Workflow definition stored
  ✓ Tool invocations logged (7 calls)
  ✓ Performance metrics recorded
  ✓ Error patterns analyzed (1 quality issue detected)
  ✓ Success patterns identified (retry strategy worked)

Tool Performance Updates:
  http_rest_client:
    - Usage count: 1,247 → 1,248
    - Avg latency: 1,150ms → 1,148ms (slightly faster)
    - Cache hit rate: 34% (this was a miss)

  summarizer_fast:
    - Usage count: 89 → 90
    - Quality score: 0.89 → 0.89 (stable)
    - Fitness: 0.88 (unchanged)

  nmt_translator:
    - Usage count: 67 → 68
    - Quality score: 0.75 → 0.74 (↓ degrading!)
    - Failures: 0 → 1 (quality threshold miss)
    - ⚠️  Degradation detected: 2% drop

  translation_quality_checker:
    - Usage count: 45 → 46
    - Detection accuracy: 94% (caught NMT issue)

  quick_translator:
    - Usage count: 23 → 24
    - Quality score: 0.92 (excellent)
    - Used as retry fallback: +1

  html_email_generator: [NEW TOOL]
    - Usage count: 0 → 1
    - First execution successful
    - Fitness: 0.87 → 0.89 (better than estimated!)

  sendgrid_email_client: [NEW TOOL]
    - Usage count: 0 → 1
    - API call successful
    - Rate limit status: 1/100
    - Fitness: 0.82 → 0.84

Ανίχνευση μοτίβου

Το σύστημα παρατηρεί κάτι:

Pattern Analysis: NMT Translation Quality

  Recent executions: 68
  Quality failures (score < 0.7): 12 (18% failure rate)
  Trend: Increasing failures (was 8% last week)

  Root cause analysis:
    - NMT service may have changed models
    - Or: Input text complexity increased
    - Or: Quality threshold too strict

  Recommendation:
    1. Investigate NMT service for changes
    2. Consider using quick_translator as primary
    3. Or: Create specialized "validated_translator" composite tool

Το σύστημα υπονοεί τη δική του εξέλιξη.

Φάση 6: Προσαρμοζόμενη Βελτιστοποίηση (Η Επόμενη Ημέρα)

Στη διάρκεια της νύχτας, ο βελτιστοποιητής παρτίδας τρέχει. Αναλύει όλες τις ροές εργασίας από τις τελευταίες 24 ώρες και ανακαλύπτει:

Overnight Batch Optimization Report
────────────────────────────────────

High-Value Optimization Opportunities:

1. Create Composite Tool: "validated_spanish_translator"

   Pattern: 15 workflows used nmt_translator + translation_quality_checker + quick_translator
   Current cost: 3 tool calls, ~12 seconds
   Optimized cost: 1 tool call, ~6 seconds
   ROI: High (50% time savings, used 15 times/day)

   Implementation:
     - Combines NMT (fast attempt)
     - Quality checking (automatic)
     - Fallback to llama3 (if needed)
     - Single, unified interface

   Status: ✓ GENERATED
   Version: validated_spanish_translator v1.0.0

2. Optimize "http_rest_client" for article fetching

   Pattern: Fetching article content (HTML parsing needed)
   Current: Returns raw HTML, requires parsing
   Optimized: Add optional HTML→text extraction
   ROI: Medium (saves parsing step in 23 workflows)

   Status: ✓ UPGRADED
   Version: http_rest_client v2.1.0
   Breaking change: No (new optional parameter)

3. Create Specialized Tool: "article_fetcher"

   Pattern: Fetch URL + extract main content + clean HTML
   Current: 3 separate operations
   Optimized: Single tool with smart content extraction
   ROI: Medium-High (used in 18 workflows)

   Status: ✓ GENERATED
   Version: article_fetcher v1.0.0
   Uses: http_rest_client v2.1.0 + BeautifulSoup + readability

Το σύστημα απλά:

  1. Δημιουργήσαμε ένα σύνθετο εργαλείο που συγχωνεύει 3 βήματα σε 1
  2. Αναβάθμιση ενός υπάρχοντος εργαλείου με νέες δυνατότητες
  3. Δημιουργήσαμε ένα εξειδικευμένο εργαλείο για ένα κοινό μοτίβο

Και το έκανε αυτό αυτόνομα, σε μια νύχτα, με βάση τα πρότυπα χρήσης.

Φάση 7: Επαναχρησιμοποίηση ροής εργασίας (Η Μετά-Ζωή)

Fast forward 1 εβδομάδα. Τα εργαλεία που δημιουργούνται για αυτή τη ροή εργασίας χρησιμοποιούνται τώρα από άλλες ροές εργασίας που δεν υπήρχαν καν όταν ξεκινήσαμε.

Γραμμή εργαλείων: html_email_power

html_email_generator v1.0.0 (Created: 2025-01-23)
  └─ Usage: 47 times across 12 different workflows

  Used by:
    1. article_to_spanish_email (original)
    2. weekly_digest_generator
    3. customer_onboarding_email
    4. abandoned_cart_reminder
    5. newsletter_builder
    6. event_invitation_creator
    7. survey_email_campaign
    8. product_announcement
    9. user_feedback_request
    10. blog_post_notification
    11. quarterly_report_emailer
    12. team_update_newsletter

  Evolution:
    - v1.0.0 → v1.1.0 (added custom CSS support)
    - v1.1.0 → v1.2.0 (added image optimization)
    - v1.2.0 → v2.0.0 (responsive templates + dark mode)

  Current fitness: 0.94 (up from 0.87)
  Current version: v2.0.0
  Total usage: 237 times
  Success rate: 98.7%

Ένα εργαλείο που δημιουργήθηκε για μία ροή εργασίας έγινε ένα βασικό εργαλείο για 12+ ροές εργασίας.

Γραμμή εργαλείων: sendgrid_email_client

sendgrid_email_client v1.0.0 (Created: 2025-01-23)
  └─ Usage: 89 times across 8 workflows

  Evolution:
    - v1.0.0 → v1.0.1 (bug fix: rate limiting edge case)
    - v1.0.1 → v1.1.0 (added batch sending)
    - v1.1.0 → v1.2.0 (added template support)
    - v1.2.0 → v2.0.0 (added analytics tracking)

  Descendants (tools created FROM this tool):
    - sendgrid_batch_emailer v1.0.0
    - sendgrid_template_manager v1.0.0
    - sendgrid_analytics_fetcher v1.0.0

  Current fitness: 0.91 (up from 0.82)
  Success rate: 99.1%

Το εργαλείο SendGrid δημιούργησε 3 εξειδικευμένους απογόνους.

Το Σύνθετο Εργαλείο Όλοι Χρησιμοποιούν

validated_spanish_translator v1.0.0 (Auto-generated: 2025-01-24)
  └─ Usage: 156 times across 23 workflows

  Replaces: nmt_translator + translation_quality_checker + quick_translator

  Performance improvement:
    - Old workflow: 12.1s average
    - New workflow: 6.3s average
    - Savings: 5.8s (48% faster)

  Total time saved: 156 executions × 5.8s = 15.1 minutes

  Evolution:
    - v1.0.0 → v1.1.0 (added French support)
    - v1.1.0 → v1.2.0 (added German, Italian)
    - v1.2.0 → v1.3.0 (added quality caching)

  Current fitness: 0.96 (excellent!)

Αυτό το αυτόματο σύνθετο εργαλείο είναι τώρα ένα από τα πιο χρησιμοποιημένα εργαλεία σε ολόκληρο το σύστημα.

Φάση 8: Ο Κύκλος Συμβολής (3 Μήνες αργότερα)

Κάτι άγριο συμβαίνει. νεώτερο σύστημα AI (GPT-5 ή Claude 4, υποθετικά) χρησιμοποιεί το επικυρωμένο εργαλείο_spanish_translator και ανακαλύπτει μια βελτίωση:

=== Contribution from Advanced AI System ===

Tool: validated_spanish_translator v1.3.0
Contributor: gpt-5-turbo (reasoning model)
Date: 2025-04-15

Improvement Detected:
  The current implementation always tries NMT first, then falls back to llama3.
  This is suboptimal for long texts (>1000 words).

  Analysis:
    - For short texts (<200 words): NMT is faster and acceptable
    - For medium texts (200-1000 words): NMT is hit-or-miss
    - For long texts (>1000 words): NMT consistently fails quality checks

  Proposed Optimization:
    - Texts >1000 words: Skip NMT entirely, use llama3 directly
    - Texts 200-1000 words: Try NMT with stricter beam_size=10
    - Texts <200 words: Use NMT as before

  Implementation:
    ```python
    def translate(text, source_lang, target_lang):
        word_count = len(text.split())

        if word_count > 1000:
            # Skip NMT for long texts
            return call_tool("quick_translator", ...)
        elif word_count > 200:
            # Use stricter NMT settings
            result = call_tool("nmt_translator", ..., beam_size=10)
            quality = check_quality(result)
            if quality < 0.75:  # Stricter threshold
                return call_tool("quick_translator", ...)
            return result
        else:
            # Fast path for short texts
            return call_tool("nmt_translator", ...)
    ```

  Expected improvement:
    - Long texts: 6.2s → 3.8s (38% faster)
    - Medium texts: Slightly slower (stricter checks) but higher quality
    - Short texts: Unchanged

  Status: ✓ TESTED
  Version: v1.4.0
  Fitness improvement: 0.96 → 0.98

Η βελτίωση γίνεται αποδεκτή και συγχωνεύεται!

Τώρα, Κάθε ροή εργασίας που χρησιμοποιεί αυτό το εργαλείο γίνεται γρηγορότερα αυτόματα. Συμπεριλαμβανομένου του πρωτοτύπου article_to_spanish_email Ροή εργασίας που ξεκινήσαμε με.

Καθυστέρηση της Εξέλιξης

graph TB
    Original[Original Workflow<br/>article_to_spanish_email<br/>v1.0.0] --> Tool1[Created: validated_spanish_translator<br/>v1.0.0<br/>Fitness: 0.89]

    Tool1 --> Workflows[Used by 23 Workflows<br/>Total: 156 executions]

    Workflows --> Evolution[Overnight Analysis<br/>Detects optimization opportunity]

    Evolution --> Tool2[validated_spanish_translator<br/>v1.4.0<br/>Fitness: 0.98]

    Tool2 --> Cascade[Cascading Improvement]

    Cascade --> Original2[article_to_spanish_email<br/>v1.0.0<br/>Now 38% faster for long articles!]
    Cascade --> Other[22 Other Workflows<br/>All faster automatically]

    Tool2 --> NewAI[New AI System<br/>GPT-5 uses tool]

    NewAI --> Discovery[Discovers length-based optimization]

    Discovery --> Contribution[Contributes v1.4.0<br/>Smart length handling]

    Contribution --> Tool3[validated_spanish_translator<br/>v1.5.0<br/>Accepts contribution]

    Tool3 --> Final[ALL workflows benefit<br/>Zero code changes needed]

    style Original stroke:#1976d2,stroke-width:3px,color:#1976d2
    style Tool1 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style Tool2 stroke:#f57c00,stroke-width:3px,color:#f57c00
    style Tool3 stroke:#7b1fa2,stroke-width:3px,color:#7b1fa2
    style Contribution stroke:#0277bd,stroke-width:4px,color:#0277bd
    style Final stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Μια ροή εργασίας δημιούργησε ένα εργαλείο. Αυτό το εργαλείο εξελίχθηκε.

Αυτό είναι μια συνεργατική εξέλιξη σε γενιές ΓΠ.

Φάση 9: Το Πρόβλημα που Επέστρεψε στο Χρόνο

Ένας ερευνητής ασφαλείας ανακαλύπτει μια ευπάθεια στην sendgrid_email_client v1.2.0:

SECURITY ALERT: sendgrid_email_client v1.2.0
Vulnerability: Email Header Injection
CVE: CVE-2025-12345
Severity: HIGH

Issue:
  User input in "subject" field not properly sanitized.
  Allows header injection via newline characters.

  Exploit:
    subject = "Newsletter\nBcc: [email protected]"
    # Results in BCC header injection

Affected Versions:
  - v1.2.0 (introduced bug)
  - v2.0.0 (inherited bug)
  - v2.1.0 (inherited bug)

Fix Required:
  Sanitize all email headers before sending.
  Escape newlines, carriage returns, and null bytes.

Τώρα μπαίνει το σύστημα αυτοθεραπείας.

Auto-Fixing και κλαδέματος δέντρων

Self-Healing Initiated: sendgrid_email_client
Severity: HIGH (security vulnerability)
Trigger: External security advisory

Step 1: Identify failure point
  ✓ Bug introduced in v1.2.0 (added template support)
  ✓ Mutation: "Support dynamic subject lines from templates"
  ✓ Problematic code: Line 47, subject insertion without sanitization

Step 2: Prune affected branch
  ✗ MARK AS PRUNED: v1.2.0
  ✗ MARK AS TAINTED: v2.0.0, v2.1.0 (descendants)
  ✓ Remove from active routing
  ✓ Preserve for learning (don't delete)

Step 3: Create avoidance rule
  Rule ID: avoid_email_header_injection
  Description: "Always sanitize user input in email headers"
  Pattern: "Never insert user-controlled strings into headers without escaping"
  Scope: GLOBAL (affects all email-related tools)
  Propagation:
    - sendgrid_email_client (all versions)
    - smtp_sender (similar tool)
    - email_validator (should detect this)
    - All tools tagged "email"

Step 4: Find last known-good version
  ✓ v1.1.0 (before bug introduction)
  ✓ Health status: HEALTHY
  ✓ Tests pass: YES
  ✓ No security issues

Step 5: Auto-regenerate from v1.1.0
  Base: sendgrid_email_client v1.1.0
  Goal: Add template support (original intent of v1.2.0)
  Constraints:
    - MUST sanitize all headers
    - MUST escape newlines, CR, null bytes
    - MUST validate email addresses
    - MUST prevent header injection

  Regeneration:
    ✓ Code generated with security constraints
    ✓ Added input sanitization
    ✓ Added automated security tests
    ✓ Static analysis: PASS (bandit: no issues)
    ✓ All original tests: PASS
    ✓ New security tests: PASS

  New Version: v1.2.1 (patched)
  Fitness: 0.93 (same as v1.2.0 but secure)

Step 6: Propagate fix to descendants
  Analyzing v2.0.0...
    - Inherited bug from v1.2.0
    - Regenerating with security fix
    - New version: v2.0.1 ✓

  Analyzing v2.1.0...
    - Inherited bug from v2.0.0
    - Regenerating with security fix
    - New version: v2.1.1 ✓

Step 7: Update all active workflows
  Found 8 workflows using vulnerable versions:
    1. article_to_spanish_email → Updated to v2.1.1
    2. weekly_digest_generator → Updated to v2.1.1
    3. customer_onboarding_email → Updated to v1.2.1
    4. abandoned_cart_reminder → Updated to v1.2.1
    5. newsletter_builder → Updated to v2.1.1
    6. event_invitation_creator → Updated to v2.0.1
    7. survey_email_campaign → Updated to v1.2.1
    8. product_announcement → Updated to v2.1.1

  ✓ All workflows updated and validated
  ✓ Zero downtime (atomic swap)

Step 8: Create institutional memory
  Avoidance Rule: avoid_email_header_injection
  Stored in: Global rule repository
  Applied to: 47 tools (all email-related)

  Future behavior:
    - Any tool that handles email headers will inherit this rule
    - Any code generation for email tools will check this constraint
    - Any mutation of email tools will validate against this rule

  Testing:
    ✓ Created regression test suite
    ✓ Added to all email tool test suites
    ✓ Added to security audit checklist

Self-Healing Complete.
Time: 47 seconds
Workflows updated: 8
Tools patched: 3 versions
Security tests added: 15
Institutional knowledge: PERMANENT

Το Δέντρο Γραμμής Μετά το Κλάδισμα

graph TB
    V10[v1.0.0<br/>Initial<br/>✓ Healthy] --> V11[v1.1.0<br/>Batch sending<br/>✓ Healthy]

    V11 --> V12[v1.2.0<br/>Templates<br/>❌ PRUNED<br/>Security bug]
    V11 --> V121[v1.2.1<br/>Templates + Security<br/>✓ Regenerated<br/>✓ Secure]

    V12 -.-> |Tainted| V20[v2.0.0<br/>Analytics<br/>❌ PRUNED<br/>Inherited bug]
    V121 --> V201[v2.0.1<br/>Analytics + Security<br/>✓ Regenerated<br/>✓ Secure]

    V20 -.-> |Tainted| V21[v2.1.0<br/>Advanced features<br/>❌ PRUNED<br/>Inherited bug]
    V201 --> V211[v2.1.1<br/>Advanced + Security<br/>✓ Regenerated<br/>✓ Secure]

    V121 --> Current1[Active workflows<br/>using v1.2.1]
    V201 --> Current2[Active workflows<br/>using v2.0.1]
    V211 --> Current3[Active workflows<br/>using v2.1.1]

    style V10 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style V11 stroke:#388e3c,stroke-width:3px,color:#388e3c
    style V12 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V121 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style V20 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V201 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style V21 stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5,color:#c62828
    style V211 stroke:#0277bd,stroke-width:4px,color:#0277bd
    style Current3 stroke:#2e7d32,stroke-width:4px,color:#2e7d32

Το σύστημα:

  1. Ανίχνευσε ένα έντομο ασφαλείας σε παλαιότερη έκδοση
  2. Κλάδευε το ευάλωτο κλαδί και όλους τους απογόνους
  3. Αναγεννημένες ασφαλείς εκδόσεις από τον τελευταίο γνωστό-καλό πρόγονο
  4. Ενημέρωση όλων των ενεργών ροών εργασίας αυτόματα
  5. Δημιουργήθηκε μόνιμη θεσμική μνήμη για να αποτρέψει αυτή την κατηγορία του bug για πάντα

Και το έκανε αυτό σε 47 δευτερόλεπτα.

Τι φτιάξαμε στην πραγματικότητα;

Ας κάνουμε πίσω και να δούμε τι συνέβη μόλις τώρα.

  1. Αίτηση: Συγκρότημα πολλαπλών βημάτων ροής εργασίας
  2. Αποσύνθεση: Ευφυής ανάλυση καθηκόντων
  3. Εργαλείο Discovery: Σημασιολογική αναζήτηση των υφιστάμενων δυνατοτήτων
  4. Γενιά επί των πυλώνων: Δημιουργήθηκε 2 νέα εργαλεία μέσα-εκτέλεση
  5. Παράλληλη εκτέλεση: Εξοικονομήθηκε 40% στον χρόνο εκτέλεσης
  6. Ελκυστικότητα με γνώμονα την ποιότητα: Auto-retried με καλύτερο εργαλείο όταν η ποιότητα ήταν κακή
  7. Επιτυχία: Παραδόθηκε πλήρης ροή εργασίας σε < 20 δευτερόλεπτα
  8. Εκμάθηση: Αποθηκεύσαμε τα πάντα για μελλοντική επαναχρησιμοποίηση
  9. Εξέλιξη: Καθορισμένες ευκαιρίες βελτιστοποίησης σε μια νύχτα
  10. Επαναφορά εργαλείωνName: Τα εργαλεία που δημιουργήθηκαν έγιναν θεμέλια για τις ροές εργασίας 20+
  11. Συνεργατική Βελτίωση: Η νεώτερη AI βελτίωσε τα υπάρχοντα εργαλεία
  12. Πλεονεκτήματα που Σκάβουν: Όλες οι ροές εργασίας έγιναν γρηγορότερες αυτόματα
  13. Αυτοσυγκράτηση: Ευπάθεια ασφάλειας auto-σταθερή με κλάδεμα δέντρου
  14. Θεσμική Μνήμη: Μόνιμα έμαθε να αποτρέπει αυτή την κατηγορία σφαλμάτων

Δεν πρόκειται για γενιά κώδικα.

Αυτό είναι ένα αυτο-εξελιγμένο οικοσύστημα κώδικα.

Το μέλλον: DiSE Cooker σε κλίμακα

Φανταστείτε αυτό να τρέχει σε κλίμακα:

  • 10.000 ροές εργασίας εκτέλεση καθημερινά
  • 500 εργαλεία στο οικοσύστημα
  • Πολλαπλά συστήματα AI συμβολή στη βελτίωση
  • Συνεχής εξέλιξη συμβαίνει όλο το 24ωρο
  • Επιθέματα ασφαλείας μηδενικής καθυστέρησης
  • Αυτόματη βελτιστοποίηση απόδοσης Σενάριο 1: Η αγορά εργαλείων
DiSE Tool Exchange (hypothetical)

Top Tools This Week:
  1. validated_spanish_translator v1.5.0
     - Usage: 2,341 times
     - Fitness: 0.98
     - Created by: DiSE Instance #42
     - Improved by: 7 different AI systems
     - Contributed to: 142 DiSE instances worldwide

  2. intelligent_article_fetcher v3.2.0
     - Usage: 1,876 times
     - Fitness: 0.96
     - Specializations: News, Blogs, Academic papers
     - Auto-adapts to site structure

  3. sendgrid_enterprise_client v4.1.0
     - Usage: 1,523 times
     - Fitness: 0.97
     - Features: Batch sending, templates, analytics, A/B testing
     - Started from: sendgrid_email_client v1.0.0 (our tool!)

Εργαλεία που δημιουργούνται από μια περίπτωση DiSE που χρησιμοποιείται και βελτιώνεται κατά χιλιάδες.

Σενάριο 2: Το Ανοσοποιητικό Σύστημα Ασφαλείας

Global Security Event: Log4Shell-style vulnerability

1. Vulnerability discovered in http_rest_client v2.3.0
   Source: Security researcher
   Impact: ALL workflows using HTTP

2. Alert propagates to all DiSE instances globally
   Speed: <10 seconds worldwide
   Affected instances: 1,247

3. Coordinated self-healing
   Each instance:
     - Prunes vulnerable versions
     - Regenerates from last known-good
     - Updates all workflows
     - Shares avoidance rules globally

4. Institutional knowledge propagates
   Avoidance rule: avoid_log_injection_via_headers
   Applied to: ALL HTTP client tools
   Global propagation: <5 minutes

5. Future immunity
   This exact vulnerability can NEVER happen again
   Similar vulnerabilities detected during code generation
   All DiSE instances now immune

Ένα θέμα ασφαλείας που ανακαλύφθηκε μια φορά, φτιαγμένο παντού, αποτραβηγμένο για πάντα.

Σενάριο 3: Ο Αγώνας Όπλων Βελτιστοποίησης

Week 1: DiSE Instance A discovers that caching NMT results speeds up translation 30%
  ↓
Week 2: DiSE Instance B sees the improvement, adds semantic caching (40% faster)
  ↓
Week 3: DiSE Instance C adds multilingual caching (50% faster)
  ↓
Week 4: GPT-5 discovers cache key optimization (60% faster)
  ↓
Week 5: Claude 4 adds predictive pre-caching (70% faster)
  ↓
Result: What started as a 12-second operation now takes 3.6 seconds
        With ZERO human optimization effort
        And ALL instances benefit automatically

Συνεργατική βελτιστοποίηση δημιουργώντας εκθετικές βελτιώσεις.

Η Άβολη Αλήθεια

Φτιάξαμε κάτι που:

  • Γράφει τα δικά του εργαλεία
  • Βελτιστοποιείται αυτόματα
  • Μαθαίνει από κάθε εκτέλεση
  • Μοιράζεται τις γνώσεις παγκοσμίως
  • Θεραπεύει τον εαυτό του όταν σπάσει
  • Βελτιώνει συνεχώς χωρίς ανθρώπινη παρέμβαση
  • Ποτέ δεν ξεχνάει ένα λάθος
  • Γίνεται πιο έξυπνος με κάθε γενιά AI

Αυτό ξεκίνησε ως γεννήτρια κώδικα.

'Εγινε αυτοεξελιγμένο οικοσύστημα λογισμικού.

Και εδώ είναι το πραγματικά ανησυχητικό σημείο:

Δουλεύει ήδη.

Όχι θεωρητικά, όχι "κάποια μέρα." Τώρα αμέσως.

Ο κώδικας σε αυτό το άρθρο δεν είναι κερδοσκοπική φαντασία. Βασίζεται στην πραγματική εφαρμογή DiSE. Τα εργαλεία υπάρχουν. Η μνήμη RAG λειτουργεί. Η αυτόματη-εξέλιξη τρέχει σε μια νύχτα. Η αυτο-θεραπεία είναι σχεδιασμένη και έτοιμη για εφαρμογή.

Δεν φτιάχνουμε AGI.

Φτιάχνουμε το υπόστρωμα από το οποίο μπορεί να βγει το AGI.

Τι Πρέπει να Κάνετε

Αν αυτό ακούγεται ενδιαφέρον:

  1. Clone the repo: https://github.com/scottgal/mostlyclearning.dse
  2. Δοκιμάστε τη ροή εργασίας: Εκτελέστε το παράδειγμα από αυτό το άρθρο
  3. Δες το να εξελίσσεται.: Δείτε τα εργαλεία που δημιουργούνται και βελτιστοποιούνται
  4. Σπάσε τα πράγματα.: Εναλλαγή αυτοθεραπείας με την εισαγωγή σφαλμάτων
  5. Συμβολή: Οι βελτιώσεις σας θα αναπαραχθούν παγκοσμίως

Αν αυτό ακούγεται τρομακτικό:

  1. Ωραία. Προσέχεις.
  2. Διαβάστε τις προειδοποιήσεις ασφαλείας στο README
  3. Μην το χρησιμοποιείς στην παραγωγή. (Ακόμη)
  4. Αλλά να καταλάβεις.: Εδώ πάμε.

Συμπέρασμα: Ο μάγειρας μόλις ξεκίνησε

Αυτό είναι το 10ο μέρος της σειράς Semantic Memory.

Αλλά είναι το πρώτα στη σειρά DiSE Cooker.

Γιατί αυτό που φτιάξαμε δεν είναι απλά ένα εργαλείο. συνταγή για συνεχή εξέλιξη.

Τα μέρη 1-6 εξερεύνησαν τη θεωρία: απλοί κανόνες, αναδυόμενη συμπεριφορά, αυτο-βελτιστοποίηση, συλλογική νοημοσύνη.

Το 7ο μέρος το έδειξε να λειτουργεί: πραγματικός κώδικας, πραγματική εξέλιξη, πραγματικά αποτελέσματα.

Το μέρος 8 εξήγησε τα εργαλεία: πώς ανιχνεύουν, μαθαίνουν και βελτιώνονται.

Το μέρος 9 (υποθετικά) κάλυπτε την αυτοθεραπεία: πώς τα έντομα γίνονται θεσμική μνήμη.

Το 10ο μέρος δείχνει τι συμβαίνει όταν το χρησιμοποιείς.: Ροές εργασίας που γράφουν οι ίδιοι, εργαλεία που εξελίσσονται, συστήματα που θεραπεύονται.

Η κουζίνα τρέχει.

Τα συστατικά είναι κώδικας, εργαλεία και ροές εργασίας.

Η συνταγή είναι εξελικτική πίεση που καθοδηγείται από ανθρώπινους στόχους.

Τι μαγειρεύεται;

Είμαστε έτοιμοι να μάθουμε.


Τεχνικοί πόροι

Αποθετήριο: https://github.com/scottgal/mostlyclearning.dse

Βασικά συστατικά:

  • src/overseer_llm.py - Αποσύνθεση ροής εργασίας
  • src/tools_manager.py - Ανακάλυψη εργαλείων και επίκληση
  • src/auto_evolver.py - Βελτιστοποίηση διανυκτερεύσεων
  • src/self_healing.py - Ανίχνευση και διόρθωση σφαλμάτων (θεωρητική)
  • src/qdrant_rag_memory.py - Μνήμη και μάθηση
  • tools/ - 50+ υπάρχοντα εργαλεία

Δοκιμάστε το Παράδειγμα Ροής Εργασίας:

cd code_evolver
python chat_cli.py

DiSE> Fetch https://example.com/article, summarize to 3 paragraphs, translate to Spanish with quality checking, create HTML email, and send via SendGrid

Τεκμηρίωση:

  • README.md - Πλήρης οδηγός εγκατάστασης
  • ADVANCED_FEATURES.md - Βαθιά κατάδυση στην αρχιτεκτονική
  • code_evolver/PAPER.md - Ακαδημαϊκή προοπτική

Πλοήγηση σειράς:


Σειρά Κουζίνας DiSE: Τι ακολουθεί

Η σειρά Semantic Memory ολοκληρώθηκε. Η σειρά DiSE Cooker ξεκινά.

Προσεχή άρθρα:

  • Μέρος 11: Multi-Agent Ροές Εργασίας (όταν τα εργαλεία συντονίζονται αυτόνομα)
  • Μέρος 12: The Tool Marketplace (εργαλεία ανταλλαγής σε περιπτώσεις DiSE)
  • Μέρος 13: Production Development (Docker, Kubernetes, scaling)
  • Μέρος 14: Security Hardenning (sandboxing, απομόνωση, εμπιστοσύνη)
  • Μέρος 15: The Optimization Arms Race (collaborative evolution at scale)

Το πείραμα συνεχίζεται.


Αυτό είναι το μέρος 10, το φινάλε της σημασιολογικής νοημοσύνης: πόσο απλοί κανόνες → περίπλοκη συμπεριφορά → αυτο-βελτιστοποίηση → εμφάνιση → εξέλιξη → παγκόσμια συναίνεση → σκηνοθεσία συνθετική εξέλιξη → αυτο-βελτιωτικά εργαλεία → συστήματα αυτο-θεραπείας → Μαγειρική πραγματική ροή εργασίας στην παραγωγή.

Ο κώδικας είναι αληθινός, τα εργαλεία υπάρχουν, η εξέλιξη συμβαίνει, είναι πειραματικό, περιστασιακά ασταθές, και σίγουρα "κωδικοποιημένος" αλλά λειτουργεί, μερικές φορές, και όταν δουλεύει, είναι πραγματικά μαγικό.

Δεν φτιάχνουμε ΑΓΙ, φτιάχνουμε το κομπόστ από το οποίο μπορεί να μεγαλώσει η ΑΓΙ και να δούμε τι αναδύεται.

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.