A framework for orchestrating applications powered by autonomous AI agents and LLMs.
gwenflow is a Python agent framework with 17 tools, but definition quality is severely compromised. Most tools lack visible input schemas in the source code provided. Tool descriptions are present but often generic or in French (search_best_books, search_cult_movies). No parameter descriptions are visible for most tools. Output schemas are undocumented. Error handling is minimal, tools return raw exception strings rather than actionable recovery guidance. The framework appears to wrap external APIs (DuckDuckGo, Yahoo Finance, Tavily) without schema validation or structured error responses. Tool composition is weak: many tools do similar things (multiple search variants) without clear differentiation. No evidence of idempotency, permission gates, or audit logging.
Search for news articles using DuckDuckGo.
Search the web using DuckDuckGo search engine.
Read and extract content from PDF files.
Search the web using Tavily search API.
Read and extract content from websites.
Search and retrieve information from Wikipedia.
Retrieve news articles related to stocks from Yahoo Finance.
Screen stocks based on financial criteria using Yahoo Finance.
Input schemas missing or not visible for 14 of 17 tools. Tools like DuckDuckGoSearchTool, WikipediaTool, TavilyWebSearchTool have no documented parameter types or constraints. This violates pattern:constrained-input and forces LLMs to guess valid parameter formats.
Tool names violate verb_noun convention. 'DuckDuckGoSearchTool', 'WikipediaTool', 'WebsiteReaderTool' are noun-heavy and lack action verbs. Should be 'search_duckduckgo', 'search_wikipedia', 'read_website'. This makes intent ambiguous to LLMs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | <=2025-11-25 | v2 |
Search for financial information using Yahoo Finance.
Retrieve stock data and fundamentals from Yahoo Finance.
Get the current number of bikes available at a given Rennes station. The station_name must match exactly the station name in the API. Otherwise, we return the full record. Returns JSON string with station data or error message.
Get the current exchange rate for a given currency. Currency MUST be in iso format.
List all available skills with their name and description.
Load the full instructions for a named skill. Always call this before applying a skill.
Read a resource file from a skill. Call load_skill first to get exact resource names.
Cherche les livres les plus pertinents sur un thème.
Cherche des films populaires sur un thème.
Descriptions in French (search_best_books: 'Cherche les livres les plus pertinents sur un thème') and generic English descriptions lack actionable context. No guidance on when to use search_best_books vs search_cult_movies vs web search. Descriptions should be 50-200 chars and explain WHAT, WHEN, and WHY.
No output schemas documented. Tools return raw strings or JSON without field definitions. LLMs cannot plan downstream calls or extract structured data. E.g., get_bike_availability returns 'JSON string with station data or error message', what fields? What structure?
Error handling returns raw exception strings ('return str(e)' in demo_tools_app.py). No recovery guidance, no error classification, no actionable messages. LLMs cannot self-correct or retry intelligently. Violates pattern:recovery-guide.