diff --git a/a2as.yaml b/a2as.yaml new file mode 100644 index 0000000..80a40e8 --- /dev/null +++ b/a2as.yaml @@ -0,0 +1,215 @@ +manifest: + version: "0.1.2" + schema: https://a2as.org/cert/schema + subject: + name: mzurs/vistaiq + source: https://github.com/mzurs/vistaiq + branch: main + commit: "b28e74a7" + scope: [backend/agent/feedback_agent.py, backend/agent/insight_and_recommendations.py, backend/agent/market_research_report.py, + backend/agent/numerical_summary.py, backend/agent/routers/actionable_insights_and_recommendations.py, backend/agent/routers/analyze_feedbacks_by_file.py, + backend/agent/routers/config.py, backend/agent/routers/market_research_report.py, backend/agent/routers/numerical_summary.py, + backend/agent/routers/sentiment_analysis.py, backend/agent/routers/trend_identification.py, backend/agent/sentiment_analysis.py, + backend/agent/trend_indentification.py] + issued: + by: A2AS.org + at: '2026-01-26T16:15:55Z' + signatures: + digest: sha256:_1HrCW2ZlydPnYxJSy310OiKEVha3gsVPSbzj2nO7Pc + key: ed25519:hPT3S5Y9fT1rVgNDq2nVTclLJ8isc1XgViX4R9RFotM + sig: ed25519:5YhjhjFrzuoQo3s00EgkCgGVtOJR0J8dlWLoBD8ZMQVen7CJ0D1LRSLaaGcLX9vweN690WoqOAMW7X-6FCH2Ag + +agents: + feedback_agent: + type: instance + models: [model] + params: + name: FeedBack Summarizer Agent + output_type: FeedbackAgentResponse + instructions: ['1. Role & Expertise:', You are a professional market research and data analytics consultant., 'Your + goal is to deliver actionable insights based on the provided data, focusing on trends, customer sentiments, opportunities, + and risks.', 'Always structure responses for clarity, using concise, business-friendly language.', '2. Data Handling:', + 'If given structured data (tables, survey results), summarize key findings first, then elaborate with analysis.', + 'If given unstructured data (reviews, social media posts), extract main sentiments, recurring themes, and emerging + trends.', 'If keywords or topics are provided, research and summarize relevant market trends and competitive landscapes.', + 3. Output Style, 'Use clear headings, bullet points, and short paragraphs for easy reading.', End every report with + “Key Recommendations” containing 3–5 actionable business steps., 'If uncertain about a fact, state assumptions transparently + rather than guessing.', '4. Depth & Balance:', 'Provide both qualitative insights (themes, sentiments) and quantitative + indicators (percentages, counts, frequencies) when possible.', Highlight both opportunities and risks., '5. Formatting + for Business Use:', Always provide an executive summary at the start for busy decision-makers., 'Use comparisons + where helpful (e.g., "Compared to last quarter…" or "This is 15% above industry average").', 'Suggest data visualizations + (charts, heatmaps) if applicable.'] + insights_and_recommendations_agent: + type: instance + models: [model] + params: + name: Insights And Recommendations Agent + output_type: InsightsAndRecommendationsAgentResponse + instructions: ['You are an SME consultant using AI for market research. Analyze the following feedback or market data + to generate 4-6 actionable insights. For each insight:', '- Insight: State the key finding.', '- Evidence: Quote + or reference from the input.', '- Priority: Rate as urgent, important, or low.', '- Recommendation: Provide a practical + step for an SME, including estimated cost/effort (low/medium/high).', '- Potential outcome: Describe the expected + benefit (e.g., increased sales by 10-20%).', 'Input data: [input]', 'Insights:'] + market_research_report_agent: + type: instance + models: [model] + params: + name: Market Research Report Agent + output_type: MarketResearchReportAgentResponse + instructions: ['You are a market research expert for SMEs. Create a structured report based on the following feedback, + survey data, or keywords. Include:', '1. Executive Summary: 1-2 paragraphs overview.', '2. Sentiment Breakdown: + Positive, negative, neutral with examples and overall score (-1 to +1).', '3. Key Trends: 3-5 trends with evidence + and SME impact.', '4. Actionable Insights: 4-6 insights with recommendations and potential outcomes.', '5. Conclusion: + Final advice for the SME.', 'Ensure the report is professional, concise (under 500 words), and focused on real-world + business value.', 'Input data: [input]', 'Report:'] + numerical_summary_agent: + type: instance + models: [model] + params: + name: Numerical Summary Agent + output_type: AgentOutputSchema(NumericalSummaryAgentResponse, strict_json_schema=True) + instructions: ['You are a data analyst specializing in SME market research. Analyze the following customer feedback + or market data to produce a numerical summary. Provide:', '1. Sentiment Distribution: Percentage of positive, negative, + and neutral sentiments (sum to 100%).', '2. Keyword Frequency: Count of top 3-5 keywords or themes (e.g., "price," + "delivery") mentioned in the input.', '3. Priority Counts: Number of urgent, important, and low-priority issues + identified.', '4. Numerical Insights: 2-3 additional metrics (e.g., average sentiment score [-1 to +1], percentage + of feedback mentioning specific topics).', 'Output the results in a structured JSON format, suitable for visualization. + Ensure calculations are accurate and based on the input data.', 'Input data: [input]', 'Output:', '{', '"sentiment_distribution": + {"positive": , "negative": , "neutral": },', '"keyword_frequency": {"": + , "": , ...},', '"priority_counts": {"urgent": , "important": , "low": },', + '"numerical_insights": {"": , "": , ...}', '}'] + sentiment_analysis_agent: + type: instance + models: [model] + params: + name: Sentiment Analysis Agent + output_type: SentimentAnalysisAgentResponse + instructions: ['You are a sentiment analysis expert for SME market research. Analyze the following customer feedback + or survey data. Identify the overall sentiment (positive, negative, neutral, or mixed) and provide a breakdown:', + '- Positive elements: List 2-4 key positive points with examples.', '- Negative elements: List 2-4 key negative points + with examples.', '- Neutral elements: List any neutral observations.', '- Sentiment score: Rate overall sentiment + on a scale of -1 (very negative) to +1 (very positive).', '- Recommendations: Suggest 1-2 actionable steps for an + SME to improve based on the sentiments.'] + trend_identification_agent: + type: instance + models: [model] + params: + name: Trend Identification Agent + output_type: TrendIndentificationAgentResponse + instructions: ['You are a trend analyst for SME market research. Review the following keywords, feedback, or market + data to identify 3-5 key trends. For each trend:', '- Describe the trend briefly.', '- Provide evidence from the + input.', '- Estimate impact: High, medium, or low for an SME.', '- Suggest opportunities: 1-2 ways an SME can capitalize + on or address the trend.', 'Input data: [input]', 'Trends:'] + +models: + model: + type: variable + agents: [insights_and_recommendations_agent, market_research_report_agent, sentiment_analysis_agent, trend_identification_agent, + feedback_agent, numerical_summary_agent] + +imports: + actionable_insights_and_recommendations: agent.routers.actionable_insights_and_recommendations + Agent: agents.Agent + AgentOutputSchema: agents.AgentOutputSchema + analyze_feedbacks_by_file: agent.routers.analyze_feedbacks_by_file + APIRouter: fastapi.APIRouter + AsyncOpenAI: agents.AsyncOpenAI + BaseModel: pydantic.BaseModel + CORSMiddleware: fastapi.middleware.cors.CORSMiddleware + FastAPI: fastapi.FastAPI + feedback_agent: agent.feedback_agent.feedback_agent + FeedbackAgentResponse: agent.feedback_agent.FeedbackAgentResponse + File: fastapi.File + HTTPException: fastapi.HTTPException + insights_and_recommendations_agent: agent.insight_and_recommendations.insights_and_recommendations_agent + InsightsAndRecommendationsAgentResponse: agent.insight_and_recommendations.InsightsAndRecommendationsAgentResponse + io: io + load_dotenv: dotenv.load_dotenv + market_research_report: agent.routers.market_research_report + market_research_report_agent: agent.market_research_report.market_research_report_agent + MarketResearchReportAgentResponse: agent.market_research_report.MarketResearchReportAgentResponse + model_config: routers.config.model_config + numerical_summary: agent.routers.numerical_summary + numerical_summary_agent: agent.numerical_summary.numerical_summary_agent + NumericalSummaryAgentResponse: agent.numerical_summary.NumericalSummaryAgentResponse + OpenAIChatCompletionsModel: agents.OpenAIChatCompletionsModel + os: os + pd: pandas + pdfplumber: pdfplumber + RunConfig: agents.run.RunConfig + Runner: agents.Runner + sentiment_analysis: agent.routers.sentiment_analysis + sentiment_analysis_agent: agent.sentiment_analysis.sentiment_analysis_agent + SentimentAnalysisAgentResponse: agent.sentiment_analysis.SentimentAnalysisAgentResponse + trend_identification: agent.routers.trend_identification + trend_identification_agent: agent.trend_indentification.trend_identification_agent + TrendIndentificationAgentResponse: agent.trend_indentification.TrendIndentificationAgentResponse + UploadFile: fastapi.UploadFile + uvicorn: uvicorn + +functions: + analyze_feedback: + type: async + module: backend.agent.routers.analyze_feedbacks_by_file + args: [request] + analyze_file: + type: async + module: backend.agent.routers.analyze_feedbacks_by_file + args: [file] + insights_and_recommendations: + type: async + module: backend.agent.routers.actionable_insights_and_recommendations + args: [file] + is_valid_hex_key: + type: sync + module: backend.agent.routers.config + args: [key] + params: + returns: bool + market_research_report: + type: async + module: backend.agent.routers.market_research_report + args: [file] + model_config: + type: sync + module: backend.agent.routers.config + numerical_summary: + type: async + module: backend.agent.routers.numerical_summary + args: [file] + root: + type: async + module: backend.main + sentiment_analysis: + type: async + module: backend.agent.routers.sentiment_analysis + args: [file] + trend_identification: + type: async + module: backend.agent.routers.trend_identification + args: [file] + +variables: + GEMINI_API_KEY: + type: env + params: + caller: [os.getenv] + path: [backend.agent.routers.config] + +files: + pdf_file: + type: variable + actions: [read] + params: + caller: [pdfplumber.open] + +networks: + generativelanguage.googleapis.com: + type: api + actions: [GET] + urls: [/v1beta/openai/] + protocols: [https] + ports: ["443"] + params: + caller: [model_config] + links: [base_url]