Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(wren-ai-service): generate semantics for alias #976

Open
wants to merge 17 commits into
base: main
Choose a base branch
from

Conversation

paopa
Copy link
Member

@paopa paopa commented Dec 5, 2024

This PR refactors the semantics description service to improve clarity and functionality:

  1. Renamed Components

    • Renamed semantics_description to semantics_enrichment for better clarity
    • Updated all related imports, class names, and configuration references
  2. Enhanced Model Properties

    • Added alias field to model and column properties
    • Improved property handling for better business context
  3. API Improvements

    • Added new /semantics-enrichment endpoint
    • Deprecated old /semantics-descriptions endpoint (maintaining backward compatibility)
    • Updated response format to include display names
  4. System Prompt Updates

    • Enhanced LLM system prompt to focus on business-friendly descriptions
    • Added guidelines for generating clear aliases and descriptions
  5. Model Processing

    • Removed explicit model selection filtering (now supports wildcard "*")
    • Improved chunking logic for better performance

Migration

Existing clients should migrate to the new /semantics-enrichment endpoint. The old endpoint will be maintained temporarily but is marked as deprecated.

Configuration Updates

Updated configuration files:

  • deployment/kustomizations/base/cm.yaml
  • docker/config.example.yaml
  • tools/config/config.example.yaml
  • tools/config/config.full.yaml

Testing for Endpoint

Request Body

{
  "selected_models": [
    "*"
  ],
  "user_prompt": "Track student enrollments, grades, and GPA calculations to monitor academic performance and identify areas for student support",
    "mdl": "{\"catalog\":\"canner-cml\",\"schema\":\"spider\",\"models\":[{\"name\":\"Course\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Course\\\"\",\"columns\":[{\"name\":\"CID\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"CID\",\"properties\":{}},{\"name\":\"CName\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"CName\",\"properties\":{}},{\"name\":\"Credits\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Credits\",\"properties\":{}},{\"name\":\"Instructor\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Instructor\",\"properties\":{}},{\"name\":\"Days\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Days\",\"properties\":{}},{\"name\":\"Hours\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Hours\",\"properties\":{}},{\"name\":\"DNO\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DNO\",\"properties\":{}},{\"name\":\"Faculty\",\"type\":\"Faculty\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Course_Faculty\",\"properties\":{}},{\"name\":\"Department\",\"type\":\"Department\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Course_Department\",\"properties\":{}}],\"primaryKey\":\"CID\"},{\"name\":\"Department\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Department\\\"\",\"columns\":[{\"name\":\"DNO\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DNO\",\"properties\":{}},{\"name\":\"Division\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Division\",\"properties\":{}},{\"name\":\"DName\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DName\",\"properties\":{}},{\"name\":\"Room\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Room\",\"properties\":{}},{\"name\":\"Building\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Building\",\"properties\":{}},{\"name\":\"DPhone\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DPhone\",\"properties\":{}}],\"primaryKey\":\"DNO\"},{\"name\":\"Enrolled_in\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Enrolled_in\\\"\",\"columns\":[{\"name\":\"StuID\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"StuID\",\"properties\":{}},{\"name\":\"CID\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"CID\",\"properties\":{}},{\"name\":\"Grade\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Grade\",\"properties\":{}},{\"name\":\"Student\",\"type\":\"Student\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Enrolled_in_Student\",\"properties\":{}},{\"name\":\"Course\",\"type\":\"Course\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Enrolled_in_Course\",\"properties\":{}},{\"name\":\"Gradeconversion\",\"type\":\"Gradeconversion\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Enrolled_in_Gradeconversion\",\"properties\":{}}],\"primaryKey\":\"\"},{\"name\":\"Faculty\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Faculty\\\"\",\"columns\":[{\"name\":\"FacID\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"FacID\",\"properties\":{}},{\"name\":\"Lname\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Lname\",\"properties\":{}},{\"name\":\"Fname\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Fname\",\"properties\":{}},{\"name\":\"Rank\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Rank\",\"properties\":{}},{\"name\":\"Sex\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Sex\",\"properties\":{}},{\"name\":\"Phone\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Phone\",\"properties\":{}},{\"name\":\"Room\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Room\",\"properties\":{}},{\"name\":\"Building\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Building\",\"properties\":{}}],\"primaryKey\":\"FacID\"},{\"name\":\"Gradeconversion\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Gradeconversion\\\"\",\"columns\":[{\"name\":\"lettergrade\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"lettergrade\",\"properties\":{}},{\"name\":\"gradepoint\",\"type\":\"FLOAT\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"gradepoint\",\"properties\":{}}],\"primaryKey\":\"lettergrade\"},{\"name\":\"Member_of\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Member_of\\\"\",\"columns\":[{\"name\":\"FacID\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"FacID\",\"properties\":{}},{\"name\":\"DNO\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DNO\",\"properties\":{}},{\"name\":\"Appt_Type\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Appt_Type\",\"properties\":{}},{\"name\":\"Faculty\",\"type\":\"Faculty\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Member_of_Faculty\",\"properties\":{}},{\"name\":\"Department\",\"type\":\"Department\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Member_of_Department\",\"properties\":{}}],\"primaryKey\":\"\"},{\"name\":\"Minor_in\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Minor_in\\\"\",\"columns\":[{\"name\":\"StuID\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"StuID\",\"properties\":{}},{\"name\":\"DNO\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"DNO\",\"properties\":{}},{\"name\":\"Student\",\"type\":\"Student\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Minor_in_Student\",\"properties\":{}},{\"name\":\"Department\",\"type\":\"Department\",\"notNull\":true,\"isCalculated\":false,\"relationship\":\"Minor_in_Department\",\"properties\":{}}],\"primaryKey\":\"\"},{\"name\":\"Student\",\"properties\":{},\"refSql\":\"select * from wrenai.spider.\\\"college_3-Student\\\"\",\"columns\":[{\"name\":\"StuID\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"StuID\",\"properties\":{}},{\"name\":\"LName\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"LName\",\"properties\":{}},{\"name\":\"Fname\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Fname\",\"properties\":{}},{\"name\":\"Age\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Age\",\"properties\":{}},{\"name\":\"Sex\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Sex\",\"properties\":{}},{\"name\":\"Major\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Major\",\"properties\":{}},{\"name\":\"Advisor\",\"type\":\"INTEGER\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"Advisor\",\"properties\":{}},{\"name\":\"city_code\",\"type\":\"VARCHAR\",\"notNull\":false,\"isCalculated\":false,\"expression\":\"city_code\",\"properties\":{}}],\"primaryKey\":\"StuID\"}],\"relationships\":[{\"name\":\"Course_Faculty\",\"models\":[\"Course\",\"Faculty\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Course.Instructor = Faculty.FacID\"},{\"name\":\"Course_Department\",\"models\":[\"Course\",\"Department\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Course.DNO = Department.DNO\"},{\"name\":\"Enrolled_in_Student\",\"models\":[\"Enrolled_in\",\"Student\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Enrolled_in.StuID = Student.StuID\"},{\"name\":\"Enrolled_in_Course\",\"models\":[\"Enrolled_in\",\"Course\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Enrolled_in.CID = Course.CID\"},{\"name\":\"Enrolled_in_Gradeconversion\",\"models\":[\"Enrolled_in\",\"Gradeconversion\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Enrolled_in.Grade = Gradeconversion.lettergrade\"},{\"name\":\"Member_of_Faculty\",\"models\":[\"Member_of\",\"Faculty\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Member_of.FacID = Faculty.FacID\"},{\"name\":\"Member_of_Department\",\"models\":[\"Member_of\",\"Department\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Member_of.DNO = Department.DNO\"},{\"name\":\"Minor_in_Student\",\"models\":[\"Minor_in\",\"Student\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Minor_in.StuID = Student.StuID\"},{\"name\":\"Minor_in_Department\",\"models\":[\"Minor_in\",\"Department\"],\"joinType\":\"MANY_TO_ONE\",\"condition\":\"Minor_in.DNO = Department.DNO\"}],\"metrics\":[],\"cumulativeMetrics\":[],\"enumDefinitions\":[],\"views\":[],\"macros\":[]}",
  "project_id": "string",
  "configuration": {
    "language": "zh_TW",
    "timezone": {
      "name": "Asia/Taipei",
      "utc_offset": ""
    }
  }
}

Screenshots

image image image image image image

Summary by CodeRabbit

Summary by CodeRabbit

  • Refactor

    • Renamed "Semantics Description" pipeline to "Semantics Enrichment" across multiple configuration and service files.
    • Updated service, router, and test files to reflect the new pipeline name.
  • New Features

    • Enhanced model and column metadata handling in the semantics enrichment pipeline.
    • Added more detailed information like display names and aliases for models.
  • Documentation

    • Updated configuration examples to match new pipeline terminology.

@paopa paopa changed the title feat(wren-ai-service): generate semantics alias feat(wren-ai-service): generate semantics for alias Dec 5, 2024
@paopa paopa added module/ai-service ai-service related ci/ai-service ai-service related labels Dec 5, 2024
@paopa paopa marked this pull request as ready for review December 5, 2024 09:54
@paopa paopa requested a review from cyyeh December 5, 2024 09:54
@paopa paopa force-pushed the feat/semantics-for-alias branch 3 times, most recently from b611452 to b693a49 Compare December 12, 2024 07:47
@paopa paopa force-pushed the feat/semantics-for-alias branch 3 times, most recently from be95bb2 to a9bb8b5 Compare December 23, 2024 10:26
@paopa paopa force-pushed the feat/semantics-for-alias branch from a9bb8b5 to 4cd4eff Compare December 27, 2024 05:57
Copy link
Contributor

coderabbitai bot commented Dec 27, 2024

Walkthrough

The pull request introduces a comprehensive renaming of the "Semantics Description" functionality to "Semantics Enrichment" across multiple configuration files, service implementations, and test suites in the Wren AI service. The changes involve updating pipeline names, service classes, router endpoints, and configuration files to reflect the new terminology. The modifications are consistent across different components, ensuring a unified approach to semantics enrichment while maintaining the existing functionality.

Changes

File Path Change Summary
deployment/kustomizations/base/cm.yaml Renamed pipeline from semantics_description to semantics_enrichment in ConfigMap
docker/config.example.yaml Updated pipeline name from semantics_description to semantics_enrichment
wren-ai-service/src/globals.py Refactored service container with updated service names and reintroduced chart-related services
wren-ai-service/src/pipelines/generation/* Renamed classes, updated imports, and modified __all__ declarations
wren-ai-service/src/web/v1/routers/* Updated router configurations and endpoints for semantics enrichment
wren-ai-service/src/web/v1/services/semantics_enrichment.py Comprehensive renaming and slight logic modifications
Configuration files Updated pipeline names across multiple YAML configuration files

Possibly related PRs

Poem

🐰 Hop, hop, semantics dance!
From description to enrichment's glance,
Rename the pipeline, update the code,
A rabbit's refactor down this winding road!
Semantic magic, now more bright! 🌟

✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (10)
wren-ai-service/src/web/v1/routers/semantics_enrichment.py (1)

95-102: Deprecation Strategy
It's good practice to keep the old endpoint (semantics-descriptions) with deprecated=True for backward compatibility. Consider documenting a sunset date or version where it will be removed so that clients can plan migrations.

wren-ai-service/src/pipelines/generation/__init__.py (1)

18-35: Comprehensive Public API
The consolidated list in __all__ indicates a well-organized approach to your generation pipelines. Consider adding docstrings or usage examples for top-level classes for convenience and clarity.

wren-ai-service/src/web/v1/services/semantics_enrichment.py (4)

58-58: Detailed Error Logging
Logging Project ID with the error provides valuable context for troubleshooting. Make sure sensitive user data is not accidentally leaked in logs.


68-70: Refined Model Selection
The _model_picker closure is a nice abstraction. Returning model["name"] in selected or "*" in selected is straightforward. Consider extending the logic if partial matches, regex, or advanced selection might be needed in the future.


100-102: Improved Logging
Using a descriptive log statement (Enrich Semantics pipeline is running...) is helpful for debugging. Consider including chunk sizes or number of chunks for additional context.


122-122: Exception Handling
Catching the broad Exception ensures resilience, but can obscure specific issues. Where feasible, handle known error types individually for more precise feedback to the client.

wren-ai-service/src/pipelines/generation/semantics_enrichment.py (2)

39-49: Synchronized field usage.

Using prop = model["properties"] for retrieving both alias and description ensures consistency. However, if model["properties"] might be missing or malformed, consider robust error handling.


219-220: Usage example clarity.

This example is helpful for local validation. Considering adding docstrings or inline comments to illustrate sample usage scenarios for future maintainers.

wren-ai-service/tools/config/config.full.yaml (1)

127-128: Update documentation to reflect the new pipeline name

Consider updating the documentation to reflect the semantic change from "description" to "enrichment" and explain the enhanced capabilities.

Would you like me to help create a documentation PR that:

  1. Updates all references to the pipeline name
  2. Explains the enhanced semantics capabilities
  3. Provides migration guidelines for existing users
deployment/kustomizations/base/cm.yaml (1)

144-145: Consider adding a temporary pipeline alias for backward compatibility.

Since this is a breaking change that requires client updates, consider temporarily maintaining both pipeline names to ensure a smooth transition period.

Add this entry to maintain backward compatibility:

      - name: semantics_enrichment
        llm: litellm_llm.gpt-4o-mini-2024-07-18
+     # TODO: Remove this alias after all clients have migrated to semantics_enrichment
+     - name: semantics_description
+       llm: litellm_llm.gpt-4o-mini-2024-07-18
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cd4dc69 and 4cd4eff.

📒 Files selected for processing (13)
  • deployment/kustomizations/base/cm.yaml (1 hunks)
  • docker/config.example.yaml (1 hunks)
  • wren-ai-service/src/globals.py (7 hunks)
  • wren-ai-service/src/pipelines/generation/__init__.py (1 hunks)
  • wren-ai-service/src/pipelines/generation/semantics_enrichment.py (7 hunks)
  • wren-ai-service/src/pipelines/retrieval/__init__.py (1 hunks)
  • wren-ai-service/src/web/v1/routers/__init__.py (2 hunks)
  • wren-ai-service/src/web/v1/routers/semantics_enrichment.py (5 hunks)
  • wren-ai-service/src/web/v1/services/semantics_enrichment.py (7 hunks)
  • wren-ai-service/tests/data/config.test.yaml (1 hunks)
  • wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (10 hunks)
  • wren-ai-service/tools/config/config.example.yaml (1 hunks)
  • wren-ai-service/tools/config/config.full.yaml (1 hunks)
🔇 Additional comments (45)
wren-ai-service/src/web/v1/routers/semantics_enrichment.py (9)

15-15: Import Consistency Check
Great that you're directly importing SemanticsEnrichment from src.web.v1.services.semantics_enrichment. Ensure all references to SemanticsEnrichment in this file consistently point to the proper module to avoid confusion with any pipeline-level import.


20-64: Comprehensive Documentation
The inline documentation is exceptionally thorough, providing clear instructions and detailed examples. This helps future contributors and users understand the API.


71-71: Confirm Sufficient Async Handling
The note about asynchronous processing is helpful. Ensure that any potential race conditions or concurrency edge cases (e.g., multiple concurrent requests for the same ID) are handled gracefully in the background task.


111-114: Service Container Access
Assigning service = service_container.semantics_enrichment neatly centralizes service logic. This approach avoids multiple direct references to service_container throughout the router.


136-139: Consistent GET Endpoint Coverage
The new GET route for /semantics-enrichment/{id} mirrors the old one well. Confirm that all consumer integrations are updated to fetch from the new path if needed, especially if the deprecated endpoint eventually goes away.


143-143: Proper Deprecation Flag
Marking the old GET endpoint as deprecated is precise. Make sure you maintain logs or metrics to see if it is still in wide use before removing it completely.


149-149: Potential Missing Resource Handling
Accessing service_container.semantics_enrichment[id] may raise a KeyError if the ID is not in cache. The code below handles that scenario in the __getitem__, returning a "failed" resource with RESOURCE_NOT_FOUND. This approach is consistent.


161-161: Verify Null Aliases
Using column["properties"].get("alias", "") is a safe fallback. However, verify whether an empty string vs. None might cause confusion. If you rely on an empty string, confirm that downstream rendering handles it effectively.


166-166: Fallback for Model DisplayName
Similarly, using an empty string fallback for model-level alias helps avoid KeyError. Ensure there's no scenario where an empty string collides with real data, especially in UI.
[approve]

wren-ai-service/src/pipelines/retrieval/__init__.py (1)

1-6: Public API Expansion
The newly added classes (HistoricalQuestion, PreprocessSqlData, Retrieval, SQLExecutor) in __all__ nicely clarify what the module exports. Ensure the code in these classes is adequately documented and tested, as they are now part of the module’s public API.

wren-ai-service/src/web/v1/routers/__init__.py (2)

10-10: Module Import Organization
Importing semantics_enrichment here indicates an architectural preference for distinct subrouters. This separation improves maintainability but ensure the team is notified of new endpoints if cross-module references are needed.


23-23: Router Inclusion
Including router.include_router(semantics_enrichment.router) is consistent with the renamed semantics enrichment feature. Validate that referencing the old semantics_description router is fully removed to avoid confusion in application routes.

wren-ai-service/src/pipelines/generation/__init__.py (2)

1-9: Shared Pipeline Imports
These newly imported pipelines, like ChartAdjustment and DataAssistance, clarify the generation pipeline’s scope. Continue to ensure each class’s responsibilities remain well-defined and tested.


10-17: Exported Entities
Declaring them under __all__ helps with explicit module boundaries. Verify that references from other modules are properly updated to avoid referencing classes not explicitly exported by name.

wren-ai-service/src/web/v1/services/semantics_enrichment.py (5)

17-17: Renaming for Clarity
Renaming the class to SemanticsEnrichment aligns well with the updated feature scope. This improves code discoverability and sets a clear domain concept.


43-43: TTLCache for Scalability
Using TTLCache for caching resources is efficient. Validate if the maxsize and ttl values are optimal for typical usage scenarios to avoid excessive memory usage or stale data.


77-81: Chunking Logic
Breaking large MDL data into chunks is a solid approach to controlling payloads. Confirm that partial chunk failures are handled gracefully and that combined results preserve the correct order of columns.


97-102: Async Generation Flow
The asynchronous gather approach is well-structured. Confirm that partial failures in one of the tasks don’t mask or disrupt final status updates (e.g., a single chunk failing after all tasks are initiated).


131-131: Graceful Resource Lookup
When a resource is not found, returning a “failed” resource with RESOURCE_NOT_FOUND code is user-friendly. This approach avoids surprising 500 errors and helps the client handle the missing resource scenario gracefully.

wren-ai-service/src/pipelines/generation/semantics_enrichment.py (6)

Line range hint 20-29: Ensure alignment with broader logic changes.

The picked_models function now extracts all models without filtering. Confirm that services depending on model filtration logic are updated accordingly to avoid unexpected results.


Line range hint 30-36: Nicely structured property addition.

The addition of "alias": column["properties"].get("displayName", "") is consistent with the rest of the code and enhances clarity.


Line range hint 92-96: Well-defined Pydantic model.

ModelProperties properly captures new fields. This strongly enforces typed usage and helps keep the enrichment data structured.


111-120: Naming continuity check.

semantics_enrichment_KWARGS references the updated schema. Confirm that any references from previous naming (SEMANTICS_DESCRIPTION_MODEL_KWARGS) are fully replaced throughout the codebase.


178-181: Appropriate usage of template.

The user_prompt_template incorporates relevant placeholders for user prompt and picked models. Ensure the placeholders match the Jinja-like logic used by PromptBuilder.


188-190: Confirm generation kwargs usage.

Passing generation_kwargs=semantics_enrichment_KWARGS aligns well with the pipeline approach. Verify the desired openAI or language model parameters are honored.

wren-ai-service/src/globals.py (4)

9-9: Modular import improvement.

Aggregating imports into generation, indexing, and retrieval can reduce clutter. Confirm that there's no performance overhead or unused imports.


16-16: Renaming for clarity.

Using SemanticsEnrichment improves the descriptive nature compared to SemanticsDescription. This fosters better domain understanding.


32-32: Correctly updated service container field.

semantics_enrichment: SemanticsEnrichment is consistent with the new service naming. This ensures code consistency and maintainability.


57-60: Instantiation logic.

Wrapping generation.SemanticsEnrichment(**pipe_components["semantics_enrichment"]) inside your own service class is a clean approach. Confirm if there's any legacy references to the old name.

wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (11)

7-7: Renamed import to match new module.

from src.web.v1.services.semantics_enrichment import SemanticsEnrichment keeps unit tests aligned with the rename.


16-26: Mock pipeline's structure alignment.

Mock returns columns and properties with alias fields. This matches the new data structure. Good thoroughness in test coverage.


Line range hint 40-72: Coverage for valid generation flow.

The test verifies the id, status, and the enriched model structure thoroughly. This ensures no regression in the normal usage path.


Line range hint 79-95: Validation for invalid MDL.

The MDL_PARSE_ERROR assertion clarifies error-handling. Including checks on the error message further cements robust test coverage.


Line range hint 101-123: Exception handling scenario.

Simulating an unexpected exception with service._pipelines["semantics_enrichment"].run.side_effect ensures the service gracefully returns a failure status. Great to see negative test coverage.


Line range hint 126-139: Resource retrieval.

Accessing results via service["test_id"] is succinct. Ensures that resources store the final response for the tested scenario.


Line range hint 141-150: Non-existent resource scenario.

Ensuring RESOURCE_NOT_FOUND is returned for unknown IDs is essential for robust error handling.


Line range hint 155-172: Batch model coverage.

Testing multiple models ensures the batch logic for chunking is correct. Confirm the user prompt is effectively shared across chunks.


190-231: Custom chunk size test.

Verifies chunking logic with a chunk size of 1. This level of granularity ensures small data sets are handled consistently.


236-259: Partial failure scenario.

Asserting a failing chunk sets the overall status to failed aligns with typical batch processing semantics.


Line range hint 275-296: Concurrent execution test.

The delay approach is a good way to mimic race conditions. Ensuring the final result merges partial responses from multiple models without data clobbering preserves concurrency safety.

wren-ai-service/tests/data/config.test.yaml (1)

73-73: Renamed pipeline step.

Changing semantics_description to semantics_enrichment ensures consistency with the service rename. Verify references in other config files, if any remain, for correctness.

docker/config.example.yaml (1)

94-95: LGTM! Verify Docker deployment updates

The pipeline renaming from semantics_description to semantics_enrichment is consistent with the PR objectives. The configuration maintains the correct model reference.

Run this script to verify Docker deployment configurations:

✅ Verification successful

Pipeline renaming is consistently applied across Docker configurations

After checking all Docker and deployment configurations, the pipeline name change from semantics_description to semantics_enrichment is correctly reflected in all relevant configuration files. The new pipeline name is consistently used in:

  • docker/config.example.yaml
  • deployment/kustomizations/base/cm.yaml
  • wren-ai-service/tools/config/config.full.yaml

No instances of the old pipeline name semantics_description were found in any Docker or deployment configurations, indicating a complete migration.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining references to the old pipeline name in Docker configurations
# and deployment files to ensure complete migration.

echo "Checking Docker and deployment configurations..."
rg -l "semantics_description" 'docker/' 'deployment/'

Length of output: 156


Script:

#!/bin/bash
# Let's try a broader search to find any references to either the old or new pipeline name
echo "Searching for both old and new pipeline names in the entire codebase..."
rg -l "semantics_(description|enrichment)"

# Also check for any Docker or deployment related files
echo -e "\nListing Docker and deployment related files:"
fd -t f -e yaml -e yml -e dockerfile -e docker

Length of output: 2182


Script:

#!/bin/bash
# Let's check the content of deployment and configuration files for the old pipeline name
echo "Checking content of deployment and configuration files..."
echo "1. Checking deployment/kustomizations/base/cm.yaml:"
cat deployment/kustomizations/base/cm.yaml

echo -e "\n2. Checking docker/docker-compose.yaml:"
cat docker/docker-compose.yaml

echo -e "\n3. Checking docker/docker-compose-dev.yaml:"
cat docker/docker-compose-dev.yaml

echo -e "\n4. Checking wren-ai-service/tools/config/config.full.yaml:"
cat wren-ai-service/tools/config/config.full.yaml

Length of output: 15653

wren-ai-service/tools/config/config.example.yaml (1)

108-109: LGTM! Verify local development setup

The pipeline renaming is consistent with the Docker configuration. The development configuration maintains the correct model reference and localhost endpoints.

Run this script to verify local development configurations:

✅ Verification successful

No references to old pipeline name found

The verification shows that there are no remaining references to semantics_description in any Python files, YAML configurations, or other development-related files within the wren-ai-service/tools and wren-ai-service/tests directories. The renaming to semantics_enrichment appears to be complete and consistent across the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining references to the old pipeline name in development
# configurations and ensure all development tools are updated.

echo "Checking development configurations..."
rg -l "semantics_description" 'wren-ai-service/tools/' 'wren-ai-service/tests/'

# Check if any Python files still reference the old name
ast-grep --pattern 'semantics_description' -l '*.py'

Length of output: 324


Script:

#!/bin/bash
# Description: Check for any remaining references to the old pipeline name in development
# configurations and ensure all development tools are updated.

echo "Checking development configurations..."
# Search in Python files
rg -l "semantics_description" --type py

# Search in YAML files
rg -l "semantics_description" --type yaml

# Search in development-related files
fd -e yaml -e yml -e json -e ini -e conf -e config . wren-ai-service/tools wren-ai-service/tests --exec rg -l "semantics_description" {}

Length of output: 307

wren-ai-service/tools/config/config.full.yaml (1)

127-128: LGTM! Verify production configuration

The pipeline renaming is consistent across all configuration files. The full configuration maintains all necessary components and production settings.

Run this script to verify production configurations and documentation:

✅ Verification successful

Pipeline name has been successfully renamed across all configuration files

Based on the search results, I can confirm that:

  1. The pipeline name has been consistently renamed from semantics_description to semantics_enrichment in all configuration files.
  2. The change appears in the full configuration example (config.full.yaml) and is consistent with other configuration files shown in the output.
  3. No other references to the old name semantics_description were found in the codebase.
  4. The pipeline configuration maintains all necessary components and settings.

The change is isolated to just the pipeline name and does not impact any functionality or dependencies. The pipeline continues to use the same LLM model configuration (litellm_llm.gpt-4o-mini-2024-07-18).

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining references to the old pipeline name in production
# configurations and documentation.

echo "Checking production configurations and documentation..."
# Check configuration files
rg -l "semantics_description" 'deployment/' 'docs/'

# Check Python files for any remaining references
ast-grep --pattern 'semantics_description' -l '*.py'

# Check documentation files
fd -e md -e rst -e txt | xargs rg "semantics[_\s]description" -l

Length of output: 443


Script:

#!/bin/bash
# Let's try a different approach to search for any remaining references

# Search for any files containing the old name pattern
echo "Searching for files with 'semantics_description'..."
rg -l "semantics[_\s]description"

# Find Python files and search within them
echo -e "\nSearching in Python files..."
fd -e py | xargs rg "semantics[_\s]description" -l

# Find YAML files and search within them
echo -e "\nSearching in YAML files..."
fd -e yaml -e yml | xargs rg "semantics[_\s]description" -l

# Find any documentation files
echo -e "\nSearching in documentation files..."
fd -e md | xargs rg "semantics[_\s]description" -l

Length of output: 551


Script:

#!/bin/bash
# Let's try one final approach focusing on the pipeline configuration and related files

# Search for any pipeline configuration files
echo "Finding all pipeline configuration files..."
fd -e yaml -e yml | grep -i 'config\|pipeline'

# Show content of these files to check pipeline names
echo -e "\nChecking pipeline configurations..."
fd -e yaml -e yml | grep -i 'config\|pipeline' | xargs cat

# Search for Python files that might handle pipeline configurations
echo -e "\nSearching for pipeline-related Python files..."
fd -e py | grep -i 'pipeline\|config' | xargs cat

Length of output: 129260

deployment/kustomizations/base/cm.yaml (1)

144-145: LGTM! Verify dependent services.

The pipeline renaming from semantics_description to semantics_enrichment aligns with the PR objectives. The configuration structure is maintained correctly.

Let's verify that all dependent services have been updated to use the new pipeline name:

✅ Verification successful

Pipeline renaming is consistently implemented

The search results show that the new pipeline name semantics_enrichment is used consistently across the codebase in all relevant files:

  • Configuration files (config.example.yaml, config.full.yaml, config.test.yaml)
  • Source code files (globals.py, pipelines, web routers)
  • Test files (test_semantics_enrichment.py)
  • Deployment configuration (cm.yaml)

No occurrences of the old name semantics_description were found, indicating that the renaming has been properly implemented across all dependent services and configurations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining references to the old pipeline name
rg -l 'semantics_description' --type yaml --type python

# Search for the new pipeline name to confirm updates
rg -l 'semantics_enrichment' --type yaml --type python

Length of output: 172


Script:

#!/bin/bash
# Search for any remaining references to the old pipeline name without file type restrictions
rg -l 'semantics_description'

# Search for the new pipeline name to confirm updates
rg -l 'semantics_enrichment'

Length of output: 645


Script:

#!/bin/bash
# Let's check the content of these files to ensure there are no remaining references to the old name
rg 'semantics_description' -C 2

Length of output: 31

@paopa paopa force-pushed the feat/semantics-for-alias branch from 4cd4eff to 176b6ee Compare January 24, 2025 02:59
@paopa paopa removed the request for review from cyyeh January 24, 2025 03:00
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
wren-ai-service/src/pipelines/generation/semantics_enrichment.py (2)

159-166: Enhance the example section in the system prompt.

The current example only shows a single column. Consider expanding it to demonstrate both model and column-level enrichment, making it more representative of the complete output format.

 Example:
-Input model "orders" with column "created_at" might become:
+Input:
+{
+    "name": "orders",
+    "columns": [
+        {"name": "created_at", "type": "timestamp"},
+        {"name": "total_amount", "type": "decimal"}
+    ]
+}
+
+Output:
 {
-    "name": "created_at",
+    "name": "orders",
     "properties": {
-        "alias": "Order Creation Date",
-        "description": "Timestamp when the order was first created in the system"
-    }
+        "alias": "Customer Orders",
+        "description": "Records of customer purchase transactions"
+    },
+    "columns": [
+        {
+            "name": "created_at",
+            "properties": {
+                "alias": "Order Creation Date",
+                "description": "Timestamp when the order was first created in the system"
+            }
+        },
+        {
+            "name": "total_amount",
+            "properties": {
+                "alias": "Order Total",
+                "description": "Total monetary value of the order"
+            }
+        }
+    ]
 }

218-224: Add error handling to the dry run example.

The dry run example uses an empty model dictionary (mdl={}), which could lead to unexpected behavior. Consider adding a more realistic example with proper error handling.

     dry_run_pipeline(
         SemanticsEnrichment,
         "semantics_enrichment",
         user_prompt="Track student enrollments, grades, and GPA calculations to monitor academic performance and identify areas for student support",
-        mdl={},
+        mdl={"models": [
+            {
+                "name": "student_records",
+                "columns": [
+                    {"name": "enrollment_date", "type": "date"},
+                    {"name": "gpa", "type": "decimal"}
+                ]
+            }
+        ]},
         language="en",
     )
wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (3)

16-30: Enhance test data with more realistic examples.

The mock response could be improved to better represent real-world scenarios by including more diverse column types and meaningful descriptions.

                 "columns": [
                     {
                         "name": "column1",
-                        "type": "varchar",
+                        "type": "timestamp",
                         "notNull": False,
                         "properties": {
-                            "description": "Test description",
-                            "alias": "column1_alias",
+                            "description": "Timestamp when the record was last updated",
+                            "alias": "Last Update Time",
                         },
+                    },
+                    {
+                        "name": "status",
+                        "type": "enum",
+                        "notNull": True,
+                        "properties": {
+                            "description": "Current status of the record",
+                            "alias": "Record Status",
+                        },
                     }
                 ],
                 "properties": {
-                    "description": "Test description",
-                    "alias": "model1_alias",
+                    "description": "Tracks the lifecycle of business records",
+                    "alias": "Business Records",
                 },

224-231: Improve chunk size test assertions.

The test could be more explicit about validating the content of chunks, particularly for the split of model4 which has multiple columns.

     assert len(chunks) == 5
     assert chunks[0]["mdl"]["models"][0]["name"] == "model1"
     assert chunks[1]["mdl"]["models"][0]["name"] == "model2"
     assert chunks[2]["mdl"]["models"][0]["name"] == "model3"
     assert chunks[3]["mdl"]["models"][0]["name"] == "model4"
     assert chunks[4]["mdl"]["models"][0]["name"] == "model4"
+    # Verify column distribution in model4 chunks
+    assert len(chunks[3]["mdl"]["models"][0]["columns"]) == 1
+    assert len(chunks[4]["mdl"]["models"][0]["columns"]) == 1
+    assert chunks[3]["mdl"]["models"][0]["columns"][0]["name"] == "column1"
+    assert chunks[4]["mdl"]["models"][0]["columns"][0]["name"] == "column2"

259-262: Add more specific error scenarios in batch processing tests.

The current test only simulates a generic exception. Consider testing specific error cases that might occur during batch processing.

     service._pipelines["semantics_enrichment"].run.side_effect = [
         {"normalize": {"model1": {"description": "Description 1"}}},
-        Exception("Failed processing model2"),
+        ValueError("Invalid model structure: missing required field 'columns' in model2"),
     ]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4cd4eff and 176b6ee.

📒 Files selected for processing (16)
  • deployment/kustomizations/base/cm.yaml (1 hunks)
  • docker/config.example.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.google_ai_studio.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.groq.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.ollama.yaml (1 hunks)
  • wren-ai-service/src/globals.py (3 hunks)
  • wren-ai-service/src/pipelines/generation/__init__.py (2 hunks)
  • wren-ai-service/src/pipelines/generation/semantics_enrichment.py (7 hunks)
  • wren-ai-service/src/pipelines/indexing/__init__.py (1 hunks)
  • wren-ai-service/src/web/v1/routers/__init__.py (2 hunks)
  • wren-ai-service/src/web/v1/routers/semantics_enrichment.py (5 hunks)
  • wren-ai-service/src/web/v1/services/semantics_enrichment.py (7 hunks)
  • wren-ai-service/tests/data/config.test.yaml (1 hunks)
  • wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (10 hunks)
  • wren-ai-service/tools/config/config.example.yaml (1 hunks)
  • wren-ai-service/tools/config/config.full.yaml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • wren-ai-service/src/pipelines/indexing/init.py
🚧 Files skipped from review as they are similar to previous changes (8)
  • wren-ai-service/tests/data/config.test.yaml
  • docker/config.example.yaml
  • wren-ai-service/tools/config/config.full.yaml
  • wren-ai-service/src/web/v1/routers/init.py
  • wren-ai-service/tools/config/config.example.yaml
  • deployment/kustomizations/base/cm.yaml
  • wren-ai-service/src/pipelines/generation/init.py
  • wren-ai-service/src/globals.py
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: pytest
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (go)
🔇 Additional comments (9)
wren-ai-service/src/web/v1/routers/semantics_enrichment.py (3)

20-34: Documentation is well-structured and comprehensive.

The API documentation clearly explains the new semantics enrichment functionality and request format.


95-102: Good practice: Maintaining backward compatibility.

The old endpoint is correctly marked as deprecated while maintaining the same functionality, allowing for a smooth transition.


49-64: Consider validating empty display names in the response.

The response format now includes displayName fields which could be empty strings. Consider adding validation or documentation about the expected format of these fields.

wren-ai-service/src/web/v1/services/semantics_enrichment.py (2)

68-69: Good addition: Model picker function improves code readability.

The _model_picker function nicely encapsulates the model selection logic and supports wildcard matching.


43-44: Verify cache type annotation after class renaming.

The cache type annotation has been updated to use SemanticsEnrichment.Resource. Ensure all cache accesses throughout the codebase are updated accordingly.

✅ Verification successful

Type annotation is correctly updated and consistent

The cache type annotation Dict[str, SemanticsEnrichment.Resource] is properly updated and all cache accesses are correctly encapsulated through typed methods. No inconsistencies found in the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for potential cache type references
rg "Dict\[str,\s*Semantics.*?Resource\]" .

Length of output: 179


Script:

#!/bin/bash
# Search for Resource type usage and cache access patterns
echo "=== Searching for Resource type usage ==="
rg "Resource" ./wren-ai-service/src/web/v1/services/semantics_enrichment.py -A 2

echo -e "\n=== Searching for cache access patterns ==="
rg "self\._cache\[" ./wren-ai-service/src/web/v1/services/semantics_enrichment.py -A 2

echo -e "\n=== Looking for any old type annotations ==="
rg "Dict\[str,.*Resource\]" .

Length of output: 2174

wren-ai-service/docs/config_examples/config.ollama.yaml (1)

83-83: Pipeline name updated consistently.

The semantics enrichment pipeline is correctly configured with the new name while maintaining the same LLM configuration.

wren-ai-service/docs/config_examples/config.google_ai_studio.yaml (1)

83-83: Configuration aligned with other providers.

The semantics enrichment pipeline configuration is consistent with other provider configurations.

wren-ai-service/docs/config_examples/config.groq.yaml (1)

84-84: Configuration maintains consistency across providers.

The semantics enrichment pipeline is correctly configured, maintaining consistency with other provider configurations.

wren-ai-service/src/pipelines/generation/semantics_enrichment.py (1)

Line range hint 20-49: LGTM! The picked_models function has been simplified and enhanced.

The function now processes all models without filtering, and includes both description and alias fields in the properties. This change aligns well with the service's new focus on semantic enrichment.

@paopa paopa force-pushed the feat/semantics-for-alias branch from 176b6ee to 049627f Compare January 24, 2025 07:04
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
wren-ai-service/src/web/v1/routers/semantics_enrichment.py (1)

95-102: Consider adding deprecation timeline.

While the old endpoint is properly marked as deprecated, consider adding a deprecation timeline in the router documentation to help users plan their migration.

wren-ai-service/src/pipelines/generation/semantics_enrichment.py (1)

Line range hint 20-47: Consider optimizing model extraction.

The model extraction logic could be simplified using dictionary comprehension.

-    def extract(model: dict) -> dict:
-        prop = model["properties"]
-        return {
-            "name": model["name"],
-            "columns": column_formatter(model["columns"]),
-            "properties": {
-                "alias": prop.get("displayName", ""),
-                "description": prop.get("description", ""),
-            },
-        }
-
-    return [extract(model) for model in mdl.get("models", [])]
+    return [
+        {
+            "name": model["name"],
+            "columns": column_formatter(model["columns"]),
+            "properties": {
+                "alias": model["properties"].get("displayName", ""),
+                "description": model["properties"].get("description", ""),
+            },
+        }
+        for model in mdl.get("models", [])
+    ]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 176b6ee and 049627f.

📒 Files selected for processing (18)
  • deployment/kustomizations/base/cm.yaml (1 hunks)
  • docker/config.example.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.google_ai_studio.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.groq.yaml (1 hunks)
  • wren-ai-service/docs/config_examples/config.ollama.yaml (1 hunks)
  • wren-ai-service/src/globals.py (3 hunks)
  • wren-ai-service/src/pipelines/common.py (1 hunks)
  • wren-ai-service/src/pipelines/generation/__init__.py (2 hunks)
  • wren-ai-service/src/pipelines/generation/semantics_enrichment.py (6 hunks)
  • wren-ai-service/src/pipelines/indexing/__init__.py (1 hunks)
  • wren-ai-service/src/web/v1/routers/__init__.py (2 hunks)
  • wren-ai-service/src/web/v1/routers/semantics_enrichment.py (5 hunks)
  • wren-ai-service/src/web/v1/services/semantics_enrichment.py (7 hunks)
  • wren-ai-service/tests/data/config.test.yaml (1 hunks)
  • wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (10 hunks)
  • wren-ai-service/tools/config/config.example.yaml (1 hunks)
  • wren-ai-service/tools/config/config.full.yaml (1 hunks)
  • wren-ai-service/tools/dev/.env (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (12)
  • wren-ai-service/docs/config_examples/config.ollama.yaml
  • wren-ai-service/tools/config/config.full.yaml
  • wren-ai-service/tests/data/config.test.yaml
  • wren-ai-service/docs/config_examples/config.google_ai_studio.yaml
  • docker/config.example.yaml
  • wren-ai-service/tools/config/config.example.yaml
  • wren-ai-service/src/pipelines/indexing/init.py
  • wren-ai-service/src/web/v1/routers/init.py
  • wren-ai-service/docs/config_examples/config.groq.yaml
  • deployment/kustomizations/base/cm.yaml
  • wren-ai-service/src/pipelines/generation/init.py
  • wren-ai-service/src/web/v1/services/semantics_enrichment.py
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: pytest
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (go)
🔇 Additional comments (11)
wren-ai-service/tools/dev/.env (1)

2-2: Verify ARM64 platform compatibility across the development team.

The platform change from linux/amd64 to linux/arm64 might impact development environments. Ensure all team members can build and run the service on ARM64 architecture.

✅ Verification successful

Platform configuration change is consistently applied across all services

The change from linux/amd64 to linux/arm64 is systematically implemented across all containerized services in both development and production environments. The platform configuration is properly propagated to:

  • wren-engine
  • wren-engine-ibis
  • wren-ui
  • wren-bootstrap
  • wren-ai-service
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check Docker platform support and existing images
# Test 1: Check if Docker supports ARM64
docker buildx ls | grep -i 'linux/arm64'

# Test 2: Check if existing images support ARM64
docker manifest inspect wren-ai-service:latest 2>/dev/null | grep 'arm64' || echo "No ARM64 support found in existing images"

Length of output: 292


Script:

#!/bin/bash
# Search for Docker-related files and platform configurations
echo "=== Docker-related files ==="
fd -t f "Dockerfile|docker-compose" -X echo "Found: {}"

echo -e "\n=== Platform-specific configurations ==="
rg -i "platform|arch|amd64|arm64" -g "Dockerfile*" -g "*.yaml" -g "*.yml" -A 2 -B 2

echo -e "\n=== Build scripts ==="
fd -t f "build|compile" -e sh -e bash -X echo "Found: {}"

Length of output: 6458

wren-ai-service/src/web/v1/routers/semantics_enrichment.py (1)

Line range hint 20-80: Well-documented API changes with clear deprecation notice.

The documentation clearly explains the new endpoints, request/response formats, and usage guidelines. The deprecation of old endpoints is properly handled.

wren-ai-service/src/pipelines/generation/semantics_enrichment.py (2)

91-104: Good use of Pydantic models for type safety.

The introduction of Pydantic models (Properties, ModelColumns, SemanticModel) ensures type safety and validation.


122-144: Clear and comprehensive system prompt.

The system prompt provides clear guidelines for generating business-friendly descriptions and aliases while maintaining data integrity.

wren-ai-service/tests/pytest/services/test_semantics_enrichment.py (3)

16-30: Well-structured mock responses.

The mock responses correctly include the new alias fields and maintain proper structure.


Line range hint 275-314: Good concurrent processing test.

The test effectively verifies race condition handling using delayed responses.


224-231: Verify chunk size calculation.

The test assumes 5 chunks for 4 models. Ensure this is the expected behavior and document the chunking logic.

wren-ai-service/src/globals.py (4)

16-16: LGTM! Import updated to reflect the new module name.

The import statement has been correctly updated to use the new semantics_enrichment module, aligning with the PR's renaming objectives.


36-36: LGTM! Service container fields updated correctly.

The renaming from semantics_description to semantics_enrichment and retention of sql_regeneration_service are consistent with the PR objectives.

Also applies to: 43-43


32-33: Verify the addition of chart services.

The addition of chart_service and chart_adjustment_service appears unrelated to the semantics enrichment changes. Please confirm if these additions should be in a separate PR for better change isolation.

Let's verify the chart services integration:


61-64: Verify configuration consistency across environments.

The service initialization has been correctly updated to use SemanticsEnrichment. However, let's ensure the pipeline component name "semantics_enrichment" is consistently updated in all configuration files.

Let's verify the configuration consistency:

✅ Verification successful

Configuration is consistent across all environments

The pipeline component name "semantics_enrichment" is correctly configured in all YAML files, and no instances of the old naming were found. The service initialization matches the configuration structure across all environments.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the pipeline component name is consistently updated
# in all configuration files.

echo "Checking configuration files for semantics_enrichment..."
rg -l "semantics_description|semantics_enrichment" --type yaml

echo "Checking for any remaining references to old name..."
rg "semantics_description" --type yaml

Length of output: 722


Script:

#!/bin/bash
# Check the content of configuration files for the semantics_enrichment structure
echo "Checking configuration structure..."
for file in docker/config.example.yaml wren-ai-service/tools/config/config.example.yaml deployment/kustomizations/base/cm.yaml wren-ai-service/tools/config/config.full.yaml wren-ai-service/tests/data/config.test.yaml wren-ai-service/docs/config_examples/config.google_ai_studio.yaml wren-ai-service/docs/config_examples/config.ollama.yaml wren-ai-service/docs/config_examples/config.groq.yaml; do
    echo "=== $file ==="
    grep -A 5 "semantics_enrichment:" "$file" 2>/dev/null || true
done

Length of output: 4911


Script:

#!/bin/bash
# Search for pipeline configurations with more context
echo "Checking pipeline configurations..."
rg -i "pipelines:|semantics.*enrichment" -B 2 -A 5 --type yaml

echo -e "\nChecking specific files content..."
for file in wren-ai-service/tools/config/config.full.yaml wren-ai-service/tests/data/config.test.yaml; do
    echo -e "\n=== $file ==="
    cat "$file" | grep -A 10 -B 2 "pipeline" || true
done

Length of output: 6797

@@ -14,7 +14,7 @@ WREN_PRODUCT_VERSION=development
WREN_ENGINE_VERSION=latest
WREN_AI_SERVICE_VERSION=latest
WREN_UI_VERSION=latest
IBIS_SERVER_VERSION=latest
IBIS_SERVER_VERSION=sha-ce21e44
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Invalid IBIS server commit hash specified

The commit hash ce21e44 does not exist in the ibis-project/ibis repository. Please update IBIS_SERVER_VERSION to use a valid commit hash. The most recent commit hash is 9b44750 from 2025-01-22.

🔗 Analysis chain

Verify IBIS server commit hash.

Using a specific commit hash (sha-ce21e44) instead of 'latest' improves reproducibility but requires verification.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify IBIS server commit hash exists and check for newer versions
# Test: Check if the commit exists and list newer commits
curl -s "https://api.github.com/repos/ibis-project/ibis/commits?per_page=5" | \
jq -r '.[] | select(.sha | startswith("ce21e44")) as $current | 
  if $current then "Commit exists. Newer versions available:" else "Commit not found or repository inaccessible" end, 
  if $current then (.commit.author.date + " " + .sha[0:7] + ": " + .commit.message | split("\n")[0]) else empty end'

Length of output: 380


Script:

#!/bin/bash
# First check if the repository exists and is accessible
echo "Checking repository accessibility..."
gh repo view ibis-project/ibis 2>&1 || echo "Repository not accessible"

echo -e "\nChecking commit existence..."
gh api \
  -H "Accept: application/vnd.github+json" \
  repos/ibis-project/ibis/commits/ce21e44 2>/dev/null || echo "Commit not found"

Length of output: 9793


Script:

#!/bin/bash
echo "Recent commits in ibis-project/ibis:"
gh api \
  -H "Accept: application/vnd.github+json" \
  repos/ibis-project/ibis/commits?per_page=5 | \
  jq -r '.[] | .sha[0:7] + " (" + (.commit.author.date | split("T")[0]) + "): " + (.commit.message | split("\n")[0])'

echo -e "\nSearching for commits starting with 'ce21':"
gh api \
  -H "Accept: application/vnd.github+json" \
  repos/ibis-project/ibis/commits | \
  jq -r '.[] | select(.sha | startswith("ce21")) | .sha[0:7] + " (" + (.commit.author.date | split("T")[0]) + "): " + (.commit.message | split("\n")[0])'

Length of output: 1009

@@ -41,7 +41,7 @@ def dry_run_pipeline(pipeline_cls: BasicPipeline, pipeline_name: str, **kwargs):
from src.providers import generate_components
from src.utils import init_langfuse, setup_custom_logger

setup_custom_logger("wren-ai-service", level_str=settings.logging_level)
setup_custom_logger("wren-ai-service", level_str=settings.logging_level, is_dev=True)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Pipeline logging configuration inconsistent with environment settings

The pipeline module hardcodes is_dev=True, which forces development logging regardless of the environment configuration. This creates an inconsistency with the main application that correctly uses settings.development.

  • In src/pipelines/common.py, replace:
setup_custom_logger("wren-ai-service", level_str=settings.logging_level, is_dev=True)

with:

setup_custom_logger("wren-ai-service", level_str=settings.logging_level, is_dev=settings.development)
🔗 Analysis chain

Verify logging behavior in production environment.

The addition of is_dev=True parameter to setup_custom_logger might affect logging behavior. Ensure this doesn't impact production logging configuration.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for other instances of setup_custom_logger to ensure consistent usage
rg -A 2 "setup_custom_logger\(" | grep -v "is_dev"

Length of output: 380


Script:

#!/bin/bash
# Get the implementation of setup_custom_logger
ast-grep --pattern 'def setup_custom_logger($$$) { $$$ }'

# Get all usages with more context
rg -B 2 -A 5 "setup_custom_logger\("

Length of output: 1627


Script:

#!/bin/bash
# Find settings implementation
rg -B 2 -A 5 "class.*Settings.*:"

# Check for development flag usage
rg "development.*=.*" -B 2 -A 2

Length of output: 1865

Comment on lines +161 to 167
"displayName": column["properties"].get("alias", ""),
"description": column["properties"].get("description", ""),
}
for column in model_data["columns"]
],
"displayName": model_data["properties"].get("alias", ""),
"description": model_data["properties"].get("description", ""),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

🛠️ Refactor suggestion

Verify null handling for optional properties - Issues confirmed

The code is vulnerable to KeyError exceptions when accessing properties dictionary. While nested properties are safely accessed using .get(), the properties dictionary itself is accessed directly. This is confirmed by:

  • The utils.py implementation which explicitly checks for "properties" existence
  • Lack of test coverage for missing "properties" scenarios

The suggested implementation in the review comment correctly handles all nullable paths and should be implemented.

🔗 Analysis chain

Verify null handling for optional properties.

The response formatter accesses nested properties without explicit null checks. Consider adding null checks for optional properties.

def _formatter(response: Optional[dict]) -> Optional[list[dict]]:
    if response is None:
        return None

    return [
        {
            "name": model_name,
            "columns": [
                {
                    "name": column["name"],
                    "displayName": column.get("properties", {}).get("alias", ""),
                    "description": column.get("properties", {}).get("description", ""),
                }
                for column in model_data.get("columns", [])
            ],
            "displayName": model_data.get("properties", {}).get("alias", ""),
            "description": model_data.get("properties", {}).get("description", ""),
        }
        for model_name, model_data in response.items()
    ]
🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Find the complete implementation of the response formatter
ast-grep --pattern 'def _formatter'

# Search for test files related to semantics enrichment
fd test_semantics_enrichment.py

# Look for example responses or test data
rg -A 5 -B 5 '"properties".*"alias"' 

Length of output: 3470


Script:

#!/bin/bash
# Check test file for test cases and example data
cat wren-ai-service/tests/pytest/services/test_semantics_enrichment.py

Length of output: 10844

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci/ai-service ai-service related module/ai-service ai-service related
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant