Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 215 additions & 0 deletions a2as.yaml
Original file line number Diff line number Diff line change
@@ -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": <percentage>, "negative": <percentage>, "neutral": <percentage>},', '"keyword_frequency": {"<keyword1>":
<count>, "<keyword2>": <count>, ...},', '"priority_counts": {"urgent": <count>, "important": <count>, "low": <count>},',
'"numerical_insights": {"<metric1>": <value>, "<metric2>": <value>, ...}', '}']
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]